item 35 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

ordinal λ©”μ„œλ“œ λŒ€μ‹  μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜λΌ

  • μ—΄κ±° νƒ€μž… μƒμˆ˜λŠ” ν•˜λ‚˜μ˜ μ •μˆ«κ°’μ— λŒ€μ‘λœλ‹€.
  • μ—΄κ±° νƒ€μž…μ€ ν•΄λ‹Ή μƒμˆ˜κ°€ κ·Έ μ—΄κ±° νƒ€μž…μ—μ„œ λͺ‡λ²ˆμ§Έ μœ„μΉ˜μΈμ§€ λ°˜ν™˜ν•˜λŠ” ordinal λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.
  • μ—΄κ±° νƒ€μž… μƒμˆ˜μ™€ μ—°κ²°λœ μ •μˆ«κ°’μ΄ ν•„μš”ν•˜λ©΄ ordinal λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜κ³  싢을 κ²½μš°κ°€ μžˆλ‹€.

잘λͺ»λœ 방법

3κ°€μ§€ 단점이 λ°œμƒ

  1. μ€‘κ°„μ˜ 값을 넣을 경우 κΈ°μ‘΄ λ™μž‘ μ†ŒμŠ€κ°€ 꼬이게 λœλ‹€.
  2. null 값을 넣을 수 μ—†λ‹€.
  3. μ€‘λ³΅λœ 자릿수λ₯Ό κ°€μ§ˆ 수 μžˆμ„ λ•Œ μ“Έ 수 μ—†λ‹€.
// ordinal을 잘λͺ» μ‚¬μš©ν•œ 예 - λ”°λΌν•˜μ§€ 말것. 
public enum Ensemble {
    SOLO, DUET, TRIO, QUARTET, QUINTET,
    SEXTET, SEPTET, OCTET, NONET, DECTET;
    public int numberOfMusicians() { return ordinal() + 1; } 
}

ν•΄κ²°μ±…

μ—΄κ±° νƒ€μž… μƒμˆ˜μ— μ—°κ²°λœ 값은 ordinal λ©”μ„œλ“œλ‘œ μ–»μ§€ 말고 μΈμŠ€ν„΄μŠ€ ν•„λ“œμ— μ €μž₯ν•˜μž.

μœ„μΉ˜κ°€ μ•„λ‹Œ 값이 되며 μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ¨μ„œ μƒμ„±μžλ₯Ό μ΄μš©ν•΄ enum에 값을 λ„£λŠ”λ‹€.

// μΈμŠ€ν„΄μŠ€ ν•„λ“œμ— μ •μˆ˜ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ—΄κ±° νƒ€μž… (222μͺ½)
public enum Ensemble {
    SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5),
    SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8),
    NONET(9), DECTET(10), TRIPLE_QUARTET(12);

    private final int numberOfMusicians;
    Ensemble(int size) { 
        this.numberOfMusicians = size; 
    }
    public int numberOfMusicians() { 
       return numberOfMusicians; 
    }
}

핡심 정리

EnumSet κ³Ό EnumMap 같이 μ—΄κ±° νƒ€μž… 기반의 λ²”μš© 자료ꡬ쑰λ₯Ό μ“Έ λͺ©μ μ΄ μ•„λ‹ˆλΌλ©΄ 
ordinal λ©”μ„œλ“œλŠ” μ‚¬μš©ν•˜μ§€ 말자.