Skip to content

Latest commit

ย 

History

History
359 lines (265 loc) ยท 20.2 KB

File metadata and controls

359 lines (265 loc) ยท 20.2 KB

item 52 : ๋‹ค์ค‘์ •์˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•˜๋ผ

1. ๋‹ค์ค‘์ •์˜

1) ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ฝ”๋“œ

import org.junit.Test;
import java.util.*;

public class OverloadingProblem {

    static class CollectionClassifier {
        public static String classify(Set<?> s) {
            return "์ง‘ํ•ฉ";
        }

        public static String classify(List<?> s) {
            return "๋ฆฌ์ŠคํŠธ";
        }

        public static String classify(Collection<?> s) {
            return "๊ทธ ์™ธ ์ปฌ๋ ‰์…˜";
        }
    }

    @Test
    public void collectionClassifierTest() {
        Collection<?>[] collections = {
                new HashSet<>(),            // Set
                new ArrayList<>(),          // List
                new HashMap<>().values()    // Collection
        };

        for (Collection<?> collection : collections) {
            System.out.println(CollectionClassifier.classify(collection));
        }
    }
}
  • ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ๋Š” CollectionClassifier ํด๋ž˜์Šค๊ฐ€ classify๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋‹ค์ค‘ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ 3๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค:
    1. classify(Set<?> s) - "์ง‘ํ•ฉ"
    2. classify(List<?> s) - "๋ฆฌ์ŠคํŠธ"
    3. classify(Collection<?> s) - "๊ทธ ์™ธ ์ปฌ๋ ‰์…˜"
  • ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ collectionClassifierTest()์—์„œ HashSet, ArrayList, ๊ทธ๋ฆฌ๊ณ  HashMap์˜ values()๋ฅผ ํฌํ•จํ•˜๋Š” ์ปฌ๋ ‰์…˜ ๋ฐฐ์—ด์„ ์ •์˜ํ•œ๋‹ค. ์ดํ›„ for ๋ฌธ์—์„œ ๊ฐ ์ปฌ๋ ‰์…˜์„ classify ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„๋ฅ˜ํ•œ๋‹ค.

2) ๋ฌธ์ œ์ ๊ณผ ์‹คํ–‰ ๊ฒฐ๊ณผ

์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” "๊ทธ ์™ธ ์ปฌ๋ ‰์…˜"์ด 3๋ฒˆ ์ถœ๋ ฅ๋œ๋‹ค.

  • ์ด๋Š” ๋‹ค์ค‘ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋“ค ์ค‘์—์„œ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ• ์ง€ ์ปดํŒŒ์ผํƒ€์ž„์— ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Collection<?>[] ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฐ ๊ฐ์ฒด๋Š” ๋ชจ๋‘ ์ปดํŒŒ์ผํƒ€์ž„์—๋Š” Collection<?> ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฏ€๋กœ, ํ•ญ์ƒ classify(Collection<?> s) ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

์ฆ‰, ๋Ÿฐํƒ€์ž„์˜ ์‹ค์ œ ๊ฐ์ฒด ํƒ€์ž…(e.g., Set, List)์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.

3) ์ •์  ๋ฐ”์ธ๋”ฉ(Static Binding)๊ณผ ๋™์  ๋ฐ”์ธ๋”ฉ(Dynamic Binding)

  • ์žฌ์ •์˜(Overriding)๋œ ๋ฉ”์„œ๋“œ๋Š” ๋™์  ๋ฐ”์ธ๋”ฉ(Dynamic Binding)์œผ๋กœ ์„ ํƒ๋œ๋‹ค. ์ฆ‰, ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด์˜ ์‹ค์ œ ํƒ€์ž…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ์ ˆํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
  • ๋ฐ˜๋ฉด์— ๋‹ค์ค‘ ์ •์˜(Overloading)๋œ ๋ฉ”์„œ๋“œ๋Š” ์ •์  ๋ฐ”์ธ๋”ฉ(Static Binding)์œผ๋กœ ์„ ํƒ๋œ๋‹ค. ์ปดํŒŒ์ผํƒ€์ž„์— ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ •์  ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ํ˜ธ์ถœํ•  ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

4) ์˜ค๋ฒ„๋กœ๋”ฉ์ด ํ˜ผ๋ž€์„ ์ผ์œผํ‚ค๋Š” ์ด์œ 

  • ๋‹ค์ค‘ ์ •์˜๋Š” ์ปดํŒŒ์ผํƒ€์ž„์— ๋ฉ”์„œ๋“œ ์„ ํƒ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์‹ค์ œ ํƒ€์ž…(๋Ÿฐํƒ€์ž„ ํƒ€์ž…)์ด ์•„๋‹Œ ์ •์  ํƒ€์ž…(์ปดํŒŒ์ผํƒ€์ž„ ํƒ€์ž…)๋งŒ ๊ณ ๋ ค๋œ๋‹ค.
  • ์œ„ ์˜ˆ์ œ์—์„œ๋Š” ๋ชจ๋“  ์ปฌ๋ ‰์…˜์ด Collection<?> ํƒ€์ž…์œผ๋กœ ์ €์žฅ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•ญ์ƒ classify(Collection<?> s)๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ

5) ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฉ”์ปค๋‹ˆ์ฆ˜

์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ)์˜ ๊ฒฝ์šฐ

static class Wine {
    String name() { return "ํฌ๋„์ฃผ"; }
}

static class SparklingWine extends Wine {
    @Override String name() { return "๋ฐœํฌ์„ฑ ํฌ๋„์ฃผ"; }
}

static class Champagne extends SparklingWine {
    @Override String name() { return "์ƒดํŽ˜์ธ"; }
}

@Test
public void wineTest() {
    List<Wine> wineList = List.of(new Wine(), new SparklingWine(), new Champagne());

    for (Wine wine : wineList) {
        System.out.println("wine.name() = " + wine.name());
    }
}
  • Wine ํด๋ž˜์Šค๋Š” name() ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค์ธ SparklingWine๊ณผ Champagne์€ name() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ์—์„œ๋Š” Wine ๊ฐ์ฒด๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ณ  ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ๊ฐ์˜ name() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ

wine.name() = ํฌ๋„์ฃผ
wine.name() = ๋ฐœํฌ์„ฑ ํฌ๋„์ฃผ
wine.name() = ์ƒดํŽ˜์ธ
  • ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” "ํฌ๋„์ฃผ", "๋ฐœํฌ์„ฑ ํฌ๋„์ฃผ", "์ƒดํŽ˜์ธ"์ด ์ฐจ๋ก€๋กœ ์ถœ๋ ฅ๋œ๋‹ค.
  • ์ด๋Š” ๊ฐ ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ค ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ๊ฐ€์žฅ ํ•˜์œ„์—์„œ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

6) ์žฌ์ •์˜(Overriding)์™€ ๋‹ค์ค‘ ์ •์˜(Overloading)์˜ ์ฐจ์ด

  1. ์žฌ์ •์˜(Overriding):
    • ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ฐ™์€ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋กœ ๋‹ค์‹œ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด์˜ ์‹ค์ œ ํƒ€์ž…์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค. ์ด๋ฅผ ๋™์  ๋ฐ”์ธ๋”ฉ(Dynamic Binding)์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ์˜ˆ์ œ์—์„œ๋Š” Wine, SparklingWine, Champagne ํด๋ž˜์Šค๊ฐ€ ๋ชจ๋‘ name() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, wineList์˜ ๊ฐ ๊ฐ์ฒด๋Š” ์‹ค์ œ ์ธ์Šคํ„ด์Šค ํƒ€์ž…์— ๋”ฐ๋ผ ์ ์ ˆํ•œ name() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  2. ๋‹ค์ค‘ ์ •์˜(Overloading):
    • ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•˜๋˜, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž…์„ ๋‹ฌ๋ฆฌํ•˜์—ฌ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • ์ปดํŒŒ์ผํƒ€์ž„์— ํ˜ธ์ถœํ•  ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค. ์ฆ‰, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ •์  ํƒ€์ž…(์ปดํŒŒ์ผํƒ€์ž„ ํƒ€์ž…)์„ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ• ์ง€ ์„ ํƒํ•œ๋‹ค. ์ด๋ฅผ ์ •์  ๋ฐ”์ธ๋”ฉ(Static Binding)์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ์ด์ „์— ๋‹ค๋ฃฌ CollectionClassifier ์˜ˆ์ œ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ํƒ€์ž…๊ณผ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์ปดํŒŒ์ผํƒ€์ž„ ํƒ€์ž…(Collection<?>)์— ๋”ฐ๋ผ ํ˜ธ์ถœํ•  ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ, ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ "๊ทธ ์™ธ ์ปฌ๋ ‰์…˜"์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.
    • Collectionclassifier ์˜ˆ์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์›๋ž˜ ์˜๋„๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋Ÿฐํƒ€์ž„ ํƒ€์ž…์— ๊ธฐ์ดˆํ•ด ์ ์ ˆํ•œ ๋‹ค์ค‘์ •์˜ ๋ฉ”์„œ๋“œ๋กœ ์ž๋™ ๋ถ„๋ฐฐํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. Wine ์˜ˆ์—์„œ์˜ name ๋ฉ”์„œ๋“œ์™€ ๋˜‘๊ฐ™์ด ๋ง์ด๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์ค‘์ •์˜๋Š” ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

7) ์˜ค๋ฒ„๋กœ๋”ฉ ์—†๋Š” ํ•ด๊ฒฐ๋ฒ•

  • instanceof๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž… ๊ฒ€์‚ฌ: instanceof ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋ฉด, ๋‹ค์ค‘ ์ •์˜ ์—†์ด ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

    public static String classify(Collection<?> c) {
        return c instanceof Set ? "์ง‘ํ•ฉ" :
               c instanceof List ? "๋ฆฌ์ŠคํŠธ" : "๊ทธ ์™ธ ์ปฌ๋ ‰์…˜";
    }
    • ์ด ๋ฐฉ์‹์€ ๋Ÿฐํƒ€์ž„์— ์ปฌ๋ ‰์…˜์˜ ์‹ค์ œ ํƒ€์ž…์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ง๊ด€์ ์ด๋‹ค.
  • ๋‹ค์ค‘ ์ •์˜์˜ ์œ„ํ—˜์„ฑ:

    • ๋‹ค์ค‘ ์ •์˜๋Š” ์ปดํŒŒ์ผํƒ€์ž„์— ๊ฒฐ์ •๋˜๋ฏ€๋กœ, ๋Ÿฐํƒ€์ž„์˜ ๊ฐ์ฒด ํƒ€์ž…์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ˜ผ๋ž€์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํŠนํžˆ ๊ณต๊ฐœ API์˜ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์—†๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ๊ธด ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜ผ๋ž€์„ ์ค„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„์˜ ๋ช…ํ™•ํ™”:

    • ๋‹ค์ค‘ ์ •์˜ ๋Œ€์‹  ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ๊ฐ์˜ ํƒ€์ž…์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์ธ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋ถ™์—ฌ ํ˜ผ๋ž€์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํ™œ์šฉ:

    • ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์„ ๋ถ™์ด๋Š” ๊ฒƒ์œผ๋กœ ์ƒ์„ฑ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๋‹ค์ค‘ ์ •์˜ ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  1. ๋‹ค์ค‘ ์ •์˜๊ฐ€ ํ˜ผ๋ž€์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ ํ”ผํ•˜๊ธฐ:
    • ๋‹ค์ค‘ ์ •์˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ปดํŒŒ์ผํƒ€์ž„์— ์„ ํƒํ•˜๋ฏ€๋กœ, ๋Ÿฐํƒ€์ž„ ํƒ€์ž…์ด ์•„๋‹Œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ •์  ํƒ€์ž…์— ๋”ฐ๋ผ ํ˜ธ์ถœํ•  ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.
    • ์ด๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ๋Ÿฐํƒ€์ž„์— ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•˜๊ฒŒ ๋˜์–ด ์˜ค๋™์ž‘ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
  2. ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋‹ค์ค‘ ์ •์˜๋ฅผ ํ”ผํ•˜๊ธฐ:
    • ๋‹ค์ค‘ ์ •์˜๋œ ๋ฉ”์„œ๋“œ ์ค‘ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ •์  ํƒ€์ž…๋งŒ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ ํƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋‹ค์ค‘ ์ •์˜๋ฅผ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ€๋ณ€์ธ์ˆ˜ ์‚ฌ์šฉ ์‹œ ๋‹ค์ค‘ ์ •์˜ ํ”ผํ•˜๊ธฐ:
    • ๊ฐ€๋ณ€์ธ์ˆ˜(varargs)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์ค‘ ์ •์˜ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋А ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ• ์ง€ ๋ชจํ˜ธํ•ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€๋ณ€์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์ค‘ ์ •์˜๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  4. ๋‹ค์ค‘ ์ •์˜ ๋Œ€์‹  ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ์ง“๊ธฐ:
    • ๋‹ค์ค‘ ์ •์˜ ๋Œ€์‹  ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•œ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ObjectOutputStream ํด๋ž˜์Šค๋Š” writeBoolean(), writeInt() ๋“ฑ์˜ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋“ค์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋™์ž‘์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  5. ์ƒ์„ฑ์ž ๋‹ค์ค‘ ์ •์˜์˜ ๋Œ€์•ˆ - ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ:
    • ์ƒ์„ฑ์ž๋Š” ๋‹ค์ค‘ ์ •์˜๊ฐ€ ๋ถˆ๊ฐ€ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฆ„์„ ์ง€์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์˜ ๋ชฉ์ ์„ ๋” ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  6. ๋‹ค์ค‘ ์ •์˜๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‹ค๋ฅธ ํƒ€์ž…์ธ ๊ฒฝ์šฐ ๊ดœ์ฐฎ๋‹ค:
    • ๋‹ค์ค‘ ์ •์˜๋œ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‹ค๋ฅธ ํƒ€์ž…์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋ผ๋ฉด ํ˜ผ๋ž€์ด ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ๋‹ค. ํ•˜์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

3. ๋‹ค์ค‘ ์ •์˜์˜ ํ•จ์ •

1) ๋‹ค์ค‘ ์ •์˜์˜ ํ•จ์ • 1: ์˜คํ† ๋ฐ•์‹ฑ

  • ๋ฌธ์ œ ์ฝ”๋“œ:

๊ฐ„๋‹จํžˆ ๋ˆˆ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ด๋ณด๋ฉด, -3 ~ 2๊นŒ์ง€ ์ˆซ์ž๋ฅผ ๋„ฃ๊ณ , 0 ~ 2๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ง€์šฐ๋ ค๋Š” ์˜๋„๊ฐ€ ๋ณด์ธ๋‹ค.

@Test
public void boxingTest() {
    Set<Integer> set = new TreeSet<>();
    List<Integer> list = new ArrayList<>();

    for (int i = -3; i < 3; i++) {
        set.add(i);
        list.add(i);
    }

    for (int i = 0; i < 3; i++) {
        set.remove(i);
        list.remove(i);
    }

    System.out.println("set = " + set);
    System.out.println("list = " + list);
}

์‹คํ–‰ ๊ฒฐ๊ณผ

set = [-3, -2, -1, 0, 1, 2]
list = [-3, -2, -1, 0, 1, 2]
set = [-3, -2, -1]
list = [-2, 0, 2]
  • set์˜ ๊ฒฐ๊ณผ๋Š” ์˜๋„์™€ ๊ฐ™์€๋ฐ, list์˜ ๊ฒฐ๊ณผ๋Š” ์˜๋„์™€ ๋‹ค๋ฅด๋‹ค.

  • ๊ทธ ์ด์œ ๋Š” list์—๋Š” remove(Object element)์™€ remove(int index) ๋‘๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค์ค‘ ์ •์˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    • ์ด ์ค‘ ์šฐ๋ฆฌ๊ฐ€ ์˜๋„ํ•œ ๊ฒƒ์€ ์ฒซ๋ฒˆ์งธ ๋ฉ”์„œ๋“œ์ธ๋ฐ, ๋‘๋ฒˆ์งธ ๋ฉ”์„œ๋“œ๊ฐ€ ์ ์šฉ๋˜์—ˆ๋‹ค.
    • ์ด ์ฝ”๋“œ๋Š” List<Integer>์—์„œ remove() ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค์ค‘ ์ •์˜๋œ ํƒ“์— ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ•œ๋‹ค. remove(int index)์™€ remove(Object element)๊ฐ€ ๋‹ค์ค‘ ์ •์˜๋˜์–ด, list.remove(i)๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.
  • ๋ฐ˜๋ฉด set์—๋Š” remove(Object element) ๋ฉ”์„œ๋“œ๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š์•„์„œ ์šฐ๋ฆฌ์˜ ์˜๋„๋Œ€๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ์ ์šฉ๋๋‹ค.

  • ์ •์ƒ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ •:

    @Test
    public void boxingTest2() {
        Set<Integer> set = new TreeSet<>();
        List<Integer> list = new ArrayList<>();
    
        for (int i = -3; i < 3; i++) {
            set.add(i);
            list.add(i);
        }
    
        for (int i = 0; i < 3; i++) {
            set.remove(i);
            list.remove((Integer) i);  // (Integer)๋กœ ๋ช…์‹œ์  ์บ์ŠคํŒ…
        }
    
        System.out.println("set = " + set);
        System.out.println("list = " + list);
    }
    • list.remove((Integer) i)๋กœ ๋ช…์‹œ์  ์บ์ŠคํŒ…์„ ํ†ตํ•ด ๋‹ค์ค‘ ์ •์˜๋œ ๋ฉ”์„œ๋“œ ์ค‘ ์˜๋„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

    • ์‹คํ–‰ ๊ฒฐ๊ณผ

      set = [-3, -2, -1, 0, 1, 2]
      list = [-3, -2, -1, 0, 1, 2]
      set = [-3, -2, -1]
      list = [-3, -2, -1]
      

2) ๋‹ค์ค‘ ์ •์˜์˜ ํ•จ์ • 2: ๋žŒ๋‹ค์™€ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ

๋ฌธ์ œ ์ฝ”๋“œ:

@Test
public void lambdaTest1() {
    new Thread(System.out::println).start();
}

@Test
public void lambdaTest2() {
    ExecutorService exec = Executors.newCachedThreadPool();
    exec.submit(System.out::println);  // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
}
  • lambdaTest1()์€ Runnable์„ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ์—†์ด ์ปดํŒŒ์ผ๋œ๋‹ค.
  • lambdaTest2()์—์„œ๋Š” submit() ๋ฉ”์„œ๋“œ๊ฐ€ Runnable๊ณผ Callable<T>๋ฅผ ๋ชจ๋‘ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ• ์ง€ ๋ชจํ˜ธํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋„ ๊ฐ™์€ ์œ„์น˜์˜ ์ธ์ˆ˜๋กœ ๋ฐ›์„ ๊ฒฝ์šฐ, ๋‹ค์ค‘ ์ •์˜๋Š” ํ˜ผ๋ž€์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด ๋ง์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋„ ์„œ๋กœ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๋Š” ๋œป์ด๋‹ค. ์ปดํŒŒ์ผํ•  ๋•Œ ๋ช…๋ น์ค„ ์Šค์œ„์น˜๋กœ -Xlint:overloads๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋‹ค์ค‘์ •์˜๋ฅผ ๊ฒฝ๊ณ ํ•ด์ค„ ๊ฒƒ์ด๋‹ค.

{% hint style="danger" %} ์ž๋ฐ” 4์™€ ๊ทธ ์ดํ›„์— ๋Œ€ํ•ด์„œ {% endhint %}

์ œ๋„ค๋ฆญ์ด ๋„์ž…๋˜๊ธฐ ์ „์ธ ์ž๋ฐ” 4๊นŒ์ง€์˜ List์—์„œ๋Š” Object์™€ int๊ฐ€ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ฌ๋ผ์„œ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ œ๋„ค๋ฆญ๊ณผ ์˜คํ†  ๋ฐ•์‹ฑ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ๋‘ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋”๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅด์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๋‹ค. ์ •๋ฆฌํ•˜์ž๋ฉด, ์ž๋ฐ” ์–ธ์–ด์— ์ œ๋„ค๋ฆญ๊ณผ ์˜คํ† ๋ฐ•์‹ฑ์„ ๋”ํ•œ ๊ฒฐ๊ณผ List ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ทจ์•ฝํ•ด์กŒ๋‹ค. ๋‹คํ–‰ํžˆ ๊ฐ™์€ ํ”ผํ•ด๋ฅผ ์ž…์€ API๋Š” ๊ฑฐ์˜ ์—†์ง€๋งŒ, ๋‹ค์ค‘์ •์˜ ์‹œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ํ•  ๊ทผ๊ฑฐ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜๋‹ค.

์ž๋ฐ” 4 ์ด์ „์˜ ์ƒํ™ฉ

  • ์ž๋ฐ” 4๊นŒ์ง€๋Š” ์ œ๋„ค๋ฆญ๊ณผ ์˜คํ† ๋ฐ•์‹ฑ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค์™€ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ„์˜ ๊ตฌ๋ถ„์ด ๋ช…ํ™•ํ–ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, List ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ remove ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค:
    1. remove(Object element): ์ฃผ์–ด์ง„ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
    2. remove(int index): ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค ์œ„์น˜์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
  • ๊ธฐ๋ณธ ํƒ€์ž…(int)๊ณผ ์ฐธ์กฐ ํƒ€์ž…(Object)์€ ์„œ๋กœ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ฌ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋А ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ• ์ง€ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ฆ‰, int ํƒ€์ž…์€ remove(int index) ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœ๋˜๊ณ , Object ํƒ€์ž…์€ remove(Object element) ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค.

์ž๋ฐ” 5 ์ดํ›„์˜ ๋ณ€ํ™”

  • ์ž๋ฐ” 5๋ถ€ํ„ฐ ์ œ๋„ค๋ฆญ๊ณผ ์˜คํ† ๋ฐ•์‹ฑ์ด ๋„์ž…๋˜์—ˆ๋‹ค.

    • ์ œ๋„ค๋ฆญ(Generic): ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด, List<Integer>์™€ ๊ฐ™์ด ์ปฌ๋ ‰์…˜์— ๋‹ด๊ธฐ๋Š” ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
    • ์˜คํ† ๋ฐ•์‹ฑ(Auto-Boxing): ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ํ•ด๋‹น ์ฐธ์กฐ ํƒ€์ž… ๊ฐ„์— ์ž๋™์œผ๋กœ ํ˜•๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, int ํƒ€์ž…์ด ์ž๋™์œผ๋กœ Integer ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
  • ์ด๋กœ ์ธํ•ด List<Integer>์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋•Œ remove ๋ฉ”์„œ๋“œ์˜ ๋‹ค์ค‘ ์ •์˜์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ฒผ๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค์–ด, list.remove(i)๊ฐ€ ์žˆ์„ ๋•Œ, i๊ฐ€ ๊ธฐ๋ณธ ํƒ€์ž… int์ผ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ฐธ์กฐ ํƒ€์ž… Integer๋กœ ์˜คํ† ๋ฐ•์‹ฑ๋˜๋ฏ€๋กœ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด i๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ์˜๋ฏธํ•˜๋Š”์ง€, ๊ฐ’์„ ์˜๋ฏธํ•˜๋Š”์ง€ ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
    • ์ด๋กœ ์ธํ•ด remove(int index)์™€ remove(Object element) ์ค‘ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ• ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ๋Š” remove(int index) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜์–ด, ์˜๋„์™€๋Š” ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์ œ์—์„œ List<Integer>๊ฐ€ ์žˆ์„ ๋•Œ, list.remove(i)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ i๋ฅผ ์˜คํ† ๋ฐ•์‹ฑํ•˜์—ฌ Integer๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋‹จ์ˆœํžˆ ์ธ๋ฑ์Šค๋กœ ํ•ด์„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด:

    List<Integer> list = new ArrayList<>(Arrays.asList(-3, -2, -1, 0, 1, 2));
    list.remove(1);  // ์—ฌ๊ธฐ์„œ 1์€ ์ธ๋ฑ์Šค๋กœ ํ•ด์„๋˜์–ด ๋‘ ๋ฒˆ์งธ ์š”์†Œ(-2)๊ฐ€ ์ œ๊ฑฐ๋จ
    • ํ•˜์ง€๋งŒ ์˜๋„๋Š” 1์ด๋ผ๋Š” ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค๋ฉด, list.remove((Integer) 1)๋กœ ๋ช…์‹œ์  ์บ์ŠคํŒ…์„ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์ค‘ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ํ˜ผ๋™์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ํ”ผํ•˜๊ฑฐ๋‚˜, ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์„ ํ†ตํ•ด ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

3) ๋‹ค์ค‘ ์ •์˜์˜ ํ•จ์ • ํ”ผํ•˜๊ธฐ 1: ์ธ์ˆ˜ ํฌ์›Œ๋“œํ•˜๊ธฐ

  • ๋‹ค์ค‘ ์ •์˜๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ธ์ˆ˜ ํฌ์›Œ๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค.

    public boolean contentEquals(StringBuffer sb) {
        return contentEquals((CharSequence) sb);
    }
    • ์œ„์™€ ๊ฐ™์ด ๋ช…์‹œ์  ์บ์ŠคํŒ…์„ ํ†ตํ•ด ๋œ ํŠน์ˆ˜ํ•œ ๋‹ค์ค‘ ์ •์˜ ๋ฉ”์„œ๋“œ๋กœ ํฌ์›Œ๋”ฉํ•˜์—ฌ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

4) ์ž˜๋ชป๋œ ์„ค๊ณ„ ์‚ฌ๋ก€: String ํด๋ž˜์Šค์˜ ๋‹ค์ค‘ ์ •์˜

  • String ํด๋ž˜์Šค์˜ valueOf ๋ฉ”์„œ๋“œ๋“ค์€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๋”๋ผ๋„ ์ „ํ˜€ ๋‹ค๋ฅธ ์ผ์„ ์ˆ˜ํ–‰

    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
    
    public static String valueOf(char[] data) {
        return new String(data);
    }
    • ์ด๋Ÿฌํ•œ ๋‹ค์ค‘ ์ •์˜๋Š” ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์–ด ์ž˜๋ชป๋œ ์„ค๊ณ„ ์‚ฌ๋ก€๋กœ ๋‚จ์•„ ์žˆ๋‹ค.

5) ์˜ฌ๋ฐ”๋ฅธ ๋‹ค์ค‘ ์ •์˜์˜ ์˜ˆ: ObjectOutputStream ํด๋ž˜์Šค

  • ObjectOutputStream ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ๊ธฐ๋ณธ ํƒ€์ž…์— ๋Œ€ํ•ด writeBoolean(boolean), writeInt(int) ๊ฐ™์€ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ด ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ฐ ๋ฉ”์„œ๋“œ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, read ๋ฉ”์„œ๋“œ์™€ ์ด๋ฆ„์„ ์ง์ง€์–ด ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ๋Œ€์‘๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: writeInt(int)์™€ readInt()

6) ์ƒ์„ฑ์ž์˜ ๋‹ค์ค‘ ์ •์˜์™€ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ

  • ์ƒ์„ฑ์ž๋Š” ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฒˆ์งธ ์ƒ์„ฑ์ž๋ถ€ํ„ฐ๋Š” ๋‹ค์ค‘ ์ •์˜๊ฐ€ ๋ถˆ๊ฐ€ํ”ผํ•˜๋‹ค.
  • ์ด ๊ฒฝ์šฐ์—๋Š” ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

7) ํ˜ผ๋™ ์—†๋Š” ๋‹ค์ค‘ ์ •์˜ ์กฐ๊ฑด

  • ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์ค‘ ์ •์˜๋ฅผ ์‚ฌ์šฉํ•ด๋„ ํ˜ผ๋ž€์ด ์—†๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ArrayList์—๋Š” int๋ฅผ ๋ฐ›๋Š” ์ƒ์„ฑ์ž์™€ Collection์„ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š”๋ฐ, ๋‘ ์ƒ์„ฑ์ž ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ํ˜ธ์ถœ๋ ์ง€ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜, ์˜คํ† ๋ฐ•์‹ฑ์ด ๋„์ž…๋˜๋ฉด์„œ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž… ๊ฐ„์— ํ˜ผ๋ž€์ด ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ช…์‹œ์  ์บ์ŠคํŒ…์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

๐Ÿ“š ํ•ต์‹ฌ ์ •๋ฆฌ

  • ๋‹ค์ค‘ ์ •์˜๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋‚จ๋ฐœํ•˜์ง€ ๋ง์ž.
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋‹ค์ค‘ ์ •์˜๋Š” ์›ฌ๋งŒํ•˜๋ฉด ๋งŒ๋“ค์ง€ ๋ง์ž.
  • ๋‹ค์ค‘ ์ •์˜์˜ ํ•จ์ •์€ ์˜คํ† ๋ฐ•์‹ฑ, ๋žŒ๋‹ค์™€ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ ๋“ฑ์˜ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ •์  ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค:
      • ๋ช…์‹œ์  ์บ์ŠคํŒ…์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜๋„ํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์œ ๋„.
      • ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋„ ๊ฐ™์€ ์œ„์น˜์˜ ์ธ์ˆ˜๋กœ ๋ฐ›์ง€ ์•Š๋„๋ก ์„ค๊ณ„
      • ๋‹ค์ค‘ ์ •์˜ ๋Œ€์‹  ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ์ •์˜ํ•˜์—ฌ ๋ช…ํ™•์„ฑ์„ ๋†’์ธ๋‹ค.
      • ์ƒ์„ฑ์ž์˜ ๊ฒฝ์šฐ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์„ ๋ช…ํ™•ํžˆ ํ•œ๋‹ค.
      • ๋‹ค์ค‘ ์ •์˜ ์‹œ์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค.

๋‹ค์ค‘์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ํ˜•๋ณ€ํ™˜ํ•˜์—ฌ ์ •ํ™•ํ•œ ๋‹ค์ค‘์ •์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์„ ํƒ๋˜๋„๋ก ํ•˜์ž

์ถœ์ฒ˜ ๋ฐ ์ฐธ๊ณ