Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

ordinal ์ธ๋ฑ์‹ฑ ๋Œ€์‹  EnumMap์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ37)]
๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

ordinal ์ธ๋ฑ์‹ฑ ๋Œ€์‹  EnumMap์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ37)]

2023. 7. 2. 11:08

  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ordinal์„ ์“ฐ๋Š” ๊ฑฐ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์ง€ ์•Š์œผ๋‹ˆ, ๋Œ€์‹  EnumMap์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

  ์•„๋ž˜์˜ 2๊ฐ€์ง€ ์ƒํ™ฉ(์ผ์ฐจ์› ๊ด€๊ณ„, ๋‹ค์ฐจ์› ๊ด€๊ณ„)์„ ํ†ตํ•ด ์™œ EnumMap์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

1. 1์ฐจ์› ๊ด€๊ณ„์—์„œ์˜ EnumMap

  ์•„๋ž˜์˜ Plant ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์‹๋ฌผ์˜ ์ด๋ฆ„(name)๊ณผ ์ƒ์• ์ฃผ๊ธฐ(lifeCycle)๋ฅผ ๊ฐ„๋‹จํžˆ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

public class Plant {
    enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } // ํ•œํ•ด์‚ด์ด, ์—ฌ๋Ÿฌํ•ด์‚ด์ด, ๋‘ํ•ด์‚ด์ด

    final String name;
    final LifeCycle lifeCycle;

    public Plant(String name, LifeCycle lifeCycle) {
        this.name = name;
        this.lifeCycle = lifeCycle;
    }

    @Override
    public String toString() {
        return name;
    }
}

  ์ด์ œ ์ •์›์— ์‹ฌ์€ ์‹๋ฌผ๋“ค์„ ๋ฐฐ์—ด ํ•˜๋‚˜(garden)๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ด๋“ค์„ ์ƒ์• ์ฃผ๊ธฐ๋ณ„๋กœ ๋ฌถ์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

  ordinal()์„ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด 3๊ฐœ์˜ ์ง‘ํ•ฉ(ํ•œํ•ด์‚ด์ด, ์—ฌ๋Ÿฌํ•ด์‚ด์ด, ๋‘ํ•ด์‚ด์ด)์„ ๋งŒ๋“ค๊ณ , ์ •์›์„ ํ•œ ๋ฐ”ํ€ด ๋Œ๋ฉฐ ๊ฐ ์‹๋ฌผ์„ ํ•ด๋‹น ์ง‘ํ•ฉ์— ๋„ฃ๊ณ ์ž ํ•œ๋‹ค.

    public static void main(String[] args) {
        Set<Plant>[] plantsByLifeCycle =
            (Set<Plant>[]) new Set[LifeCycle.values().length];

        for (int i = 0; i < plantsByLifeCycle.length; i++)
            plantsByLifeCycle[i] = new HashSet<>();

        Plant[] garden = new Plant[]{new Plant("A", LifeCycle.ANNUAL),
                                    new Plant("B", LifeCycle.PERENNIAL),
                                    new Plant("C", LifeCycle.BIENNIAL), 
                                    new Plant("D", LifeCycle.BIENNIAL)};

        // LifeCycle.ANNUAL -> 0
        // LifeCycle.PERENNIAL -> 1
        // LifeCycle.BIENNIAL -> 2
        // ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค์— ์‹๋ฌผ ์ €์žฅ ์ €์žฅ
        for (Plant p : garden)
            plantsByLifeCycle[p.lifeCycle.ordinal()].add(p);

        for(int i = 0; i < plantsByLifeCycle.length; i++) {
            System.out.printf("%s: %s%n",
                Plant.LifeCycle.values()[i], plantsByLifeCycle[i]);
        }

        // ์ถœ๋ ฅ ๊ฒฐ๊ณผ
        // ANNUAL: [A]
        // PERENNIAL: [B]
        // BIENNIAL: [D, C]
    }

  ์œ„์˜ ์ฝ”๋“œ๋Š” ๋™์ž‘์€ ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

  1. ๋ฐฐ์—ด์€ ์ œ๋„ค๋ฆญ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์œผ๋‹ˆ ๋น„๊ฒ€์‚ฌ ํ˜•๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ณ  ๊น”๋”ํžˆ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.
  2. ๋ฐฐ์—ด์€ ๊ฐ ์ธ๋ฑ์Šค์˜ ์˜๋ฏธ๋ฅผ ๋ชจ๋ฅด๋‹ˆ ์ถœ๋ ฅ ๊ฒฐ๊ณผ์— ์ง์ ‘ ๋ ˆ์ด๋ธ”์„ ๋‹ฌ์•„์•ผ ํ•œ๋‹ค.
  3. ์ •ํ™•ํ•œ ์ •์ˆซ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์—ฌ๋Ÿฌ๋ถ„์ด ์ง์ ‘ ๋ณด์ฆํ•ด์•ผ ํ•œ๋‹ค. (์ •์ˆ˜๋Š” ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ๋‹ฌ๋ฆฌ ํƒ€์ž… ์•ˆ์ „ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)

 

  EnumMap์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์ด ์‹ค์งˆ์ ์œผ๋กœ ์—ด๊ฑฐ ํƒ€์ž… ์ƒ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ๋งคํ•‘์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ํ›Œ๋ฅญํ•œ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค.
  EnumMap์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ์™€ ์—ด๊ฑฐ ํƒ€์ž…์„ ๋งคํ•‘ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

public static void main(String[] args) {
    Map<Plant.LifeCycle, Set<Plant>> plantsByLifeCycle =
        new EnumMap<>(Plant.LifeCycle.class);

    for (Plant.LifeCycle lc : Plant.LifeCycle.values())
        plantsByLifeCycle.put(lc, new HashSet<>());

    Plant[] garden = new Plant[]{new Plant("A", LifeCycle.ANNUAL),
        new Plant("B", LifeCycle.PERENNIAL),
        new Plant("C", LifeCycle.BIENNIAL), 
        new Plant("D", LifeCycle.BIENNIAL)};

    for(Plant p : garden)
        plantsByLifeCycle.get(p.lifeCycle).add(p);

    System.out.println(plantsByLifeCycle);

    // ์ถœ๋ ฅ ๊ฒฐ๊ณผ
    // {ANNUAL=[A], PERENNIAL=[B], BIENNIAL=[D, C]}
}

  ordinal()์„ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ๋ฌธ์ œ์ ์„ EnumMap์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํ˜•๋ณ€ํ™˜์€ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
  2. ๋งต์˜ ํ‚ค์ธ ์—ด๊ฑฐ ํƒ€์ž…์ด ๊ทธ ์ž์ฒด๋กœ ์ถœ๋ ฅ์šฉ ๋ฌธ์ž์—ด์„ ์ œ๊ณตํ•˜๋‹ˆ ์ถœ๋ ฅ ๊ฒฐ๊ณผ์— ์ง์ ‘ ๋ ˆ์ด๋ธ”์„ ๋‹ฌ ์ผ์ด ์—†๋‹ค.
  3. ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ์›์ฒœ๋ด‰์‡„๋œ๋‹ค.

  EnumMap๋„ ๊ทธ ๋‚ด๋ถ€์—์„œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ordinal์„ ์“ด ๋ฐฐ์—ด์— ๋น„๊ฒฌ๋œ๋‹ค. ๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์•ˆ์œผ๋กœ ์ˆจ๊ฒจ์„œ Map์˜ ํƒ€์ž… ์•ˆ์ „์„ฑ๊ณผ ๋ฐฐ์—ด์˜ ์„ฑ๋Šฅ์„ ๋ชจ๋‘ ์–ป์–ด๋‚ธ ๊ฒƒ์ด๋‹ค.

 

  ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

public static void main(String[] args) {

    Plant[] garden = new Plant[]{new Plant("A", LifeCycle.ANNUAL),
        new Plant("B", LifeCycle.PERENNIAL),
        new Plant("C", LifeCycle.BIENNIAL), 
        new Plant("D", LifeCycle.BIENNIAL)};

    System.out.println(Arrays.stream(garden)
                        .collect(groupingBy(p -> p.lifeCycle)));

    // ์ถœ๋ ฅ ๊ฒฐ๊ณผ
    // {ANNUAL=[A], BIENNIAL=[C, D], PERENNIAL=[B]}
}

  ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฝ”๋“œ๋Š” EnumMap์ด ์•„๋‹Œ ๊ณ ์œ ํ•œ ๋งต ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— EnumMap์„ ์จ์„œ ์–ป์€ ๊ณต๊ฐ„๊ณผ ์„ฑ๋Šฅ ์ด์ ์ด ์‚ฌ๋ผ์ง„๋‹ค.

  ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด mapFactory ๋งค๊ฐœ๋ณ€์ˆ˜์— ์›ํ•˜๋Š” ๋งต ๊ตฌํ˜„์ฒด๋ฅผ ๋ช…์‹œํ•˜์—ฌ EnumMap์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

public static void main(String[] args) {

    Plant[] garden = new Plant[]{new Plant("A", LifeCycle.ANNUAL),
        new Plant("B", LifeCycle.PERENNIAL),
        new Plant("C", LifeCycle.BIENNIAL), 
        new Plant("D", LifeCycle.BIENNIAL)};

    System.out.println(Arrays.stream(garden)
        .collect(groupingBy(p -> p.lifeCycle,
            () -> new EnumMap<>(LifeCycle.class), toSet())));

    // ์ถœ๋ ฅ ๊ฒฐ๊ณผ
    // {ANNUAL=[A], PERENNIAL=[B], BIENNIAL=[D, C]}
}

 

 

2. ๋‹ค์ฐจ์› ๊ด€๊ณ„์—์„œ์˜ EnumMap

  ๋‘ ์—ด๊ฑฐ ํƒ€์ž… ๊ฐ’๋“ค์„ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ordinal์„ ๋‘ ๋ฒˆ์ด๋‚˜ ์“ด ๋ฐฐ์—ด๋“ค์˜ ๋ฐฐ์—ด์ด ์žˆ๋‹ค.

  ์˜ˆ์‹œ๋กœ๋Š” ๋‘ ๊ฐ€์ง€ ์ƒํƒœ(Phase)๋ฅผ ์ „์ด(Transition)์™€ ๋งคํ•‘ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค.

  (์•ก์ฒด → ๊ณ ์ฒด = ๊ณ ํ™”, ๊ณ ์ฒด → ์•ก์ฒด = ์•กํ™”)

public enum Phase {

    SOLID, LIQUID, GAS;

    public enum Transition {
        MELT, FREEZE, BOIL, CONDENSE, SUBLIME, DEPOSIT;

        // ํ–‰์€ from์˜ ordinal์„, ์—ด์€ to์˜ ordinal์„ ์ธ๋ฑ์Šค๋กœ ์“ด๋‹ค.
        private static final Transition[][] TRANSITIONS = {
            { null, MELT, SUBLIME },
            { FREEZE, null, BOIL },
            { DEPOSIT, CONDENSE, null }
        };

        // ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ์˜ ์ „์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
        public static Transition from(Phase from, Phase to) {
            return TRANSITIONS[from.ordinal()][to.ordinal()];
        }
    }
}

  ์ด๋ ‡๊ฒŒ ordinal()์„ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค.

  1. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ordinal๊ณผ ๋ฐฐ์—ด ์ธ๋ฑ์Šค์˜ ๊ด€๊ณ„๋ฅผ ์•Œ ๋„๋ฆฌ๊ฐ€ ์—†๋‹ค.
  2. ArrayIndexOutOfBoundsException์ด๋‚˜ NullPointerException์„ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค.
  3. ์ƒ์ „์ด ํ‘œ์˜ ํฌ๊ธฐ๋Š” ์ƒํƒœ์˜ ๊ฐ€์ง“์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ์ œ๊ณฑํ•ด์„œ ์ปค์ง€๋ฉฐ, null๋กœ ์ฑ„์›Œ์ง€๋Š” ์นธ๋„ ๋Š˜์–ด๋‚œ๋‹ค.

  ์ „์ด ํ•˜๋‚˜๋ฅผ ์–ป์œผ๋ ค๋ฉด ์ด์ „ ์ƒํƒœ(from)์™€ ์ดํ›„ ์ƒํƒœ(to)๊ฐ€ ํ•„์š”ํ•˜๋‹ˆ, ๋งต 2๊ฐœ๋ฅผ ์ค‘์ฒฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์•ˆ์ชฝ ๋งต์€ ์ด์ „ ์ƒํƒœ์™€ ์ „์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ”๊นฅ ๋งต์€ ์ดํ›„ ์ƒํƒœ์™€ ์•ˆ์ชฝ ๋งต์„ ์—ฐ๊ฒฐ ํ•˜๋ฉด ๋œ๋‹ค.

public enum Phase {

    SOLID, LIQUID, GAS;

    public enum Transition {
        MELT(SOLID, LIQUID), FREEZE(LIQUID, SOLID),
        BOIL(LIQUID, GAS), CONDENSE(GAS, LIQUID),
        SUBLIME(SOLID, GAS), DEPOSIT(GAS, SOLID);

        private final Phase from;
        private final Phase to;

        Transition(Phase from, Phase to) {
            this.from = from;
            this.to = to;
        }

        // ์ƒ์ „์ด ๋งต์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
        private static final Map<Phase, Map<Phase, Transition>>
            m = Stream.of(values()).collect(groupingBy(t -> t.from,
                () -> new EnumMap<>(Phase.class),
                toMap(t -> t.to, t -> t,
                    (x, y) -> y, () -> new EnumMap<>(Phase.class))));

        // ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ์˜ ์ „์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
        public static Transition from(Phase from, Phase to) {
            return m.get(from).get(to);
        }
    }
}

  'Map<Phase, Map<Phase, Transition>>'์€ "์ด์ „ ์ƒํƒœ์—์„œ '์ดํ›„ ์ƒํƒœ์—์„œ ์ „์ด๋กœ์˜ ๋งต'์— ๋Œ€์‘์‹œํ‚ค๋Š” ๋งต"์ด๋ผ๋Š” ๋œป์ด๋‹ค.

 

  ๋งŒ์•ฝ ์—ฌ๊ธฐ์— ์ƒˆ๋กœ์šด ์ƒํƒœ์ธ ํ”Œ๋ผ์Šค๋งˆ(PLASMA)๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์ž.

  ๊ทธ๋Ÿฌ๋ฉด ์ƒํƒœ ๋ชฉ๋ก์— PLASMA๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์ „์ด ๋ชฉ๋ก์— IONIZE(GAS, PLASMA)์™€ DEIONIZE(PLASMA, GAS)๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋์ด๋‹ค. ๊ฐ„๋‹จํ•˜๋‹ค.

public enum Phase {

    SOLID, LIQUID, GAS, PLASMA;

    public enum Transition {
        MELT(SOLID, LIQUID), FREEZE(LIQUID, SOLID),
        BOIL(LIQUID, GAS), CONDENSE(GAS, LIQUID),
        SUBLIME(SOLID, GAS), DEPOSIT(GAS, SOLID),
        IONIZE(GAS, PLASMA), DEIONIZE(PLASMA, GAS);

        ...
    }
}

  ์‹ค์ œ ๋‚ด๋ถ€์—์„œ๋Š” ๋งต๋“ค์˜ ๋งต์ด ๋ฐฐ์—ด๋“ค์˜ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„๋˜๋‹ˆ ๋‚ญ๋น„๋˜๋Š” ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„๋„ ๊ฑฐ์˜ ์—†์ด ๋ช…ํ™•ํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€ Joshua Bloch ๋‹˜์˜ 'Effective Java 3/E'๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ JAVA > ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ช…๋ช… ํŒจํ„ด๋ณด๋‹ค ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ39)]  (0) 2023.07.06
ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐ ํƒ€์ž…์ด ํ•„์š”ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ38)]  (0) 2023.07.05
๋น„ํŠธ ํ•„๋“œ ๋Œ€์‹  EnumSet์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ36)]  (1) 2023.07.01
ordinal ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ35)]  (0) 2023.07.01
int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ34)] - (2)  (0) 2023.07.01
    '๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ๋ช…๋ช… ํŒจํ„ด๋ณด๋‹ค ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ39)]
    • ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐ ํƒ€์ž…์ด ํ•„์š”ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ38)]
    • ๋น„ํŠธ ํ•„๋“œ ๋Œ€์‹  EnumSet์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ36)]
    • ordinal ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ35)]
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”