πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

ordinal λ©”μ„œλ“œ λŒ€μ‹  μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ35)]

Amenable 2023. 7. 1. 21:07

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

  κ·Έλž˜μ„œ μ—΄κ±° νƒ€μž… μƒμˆ˜μ™€ μ—°κ²°λœ μ •μˆ«κ°’μ΄ ν•„μš”ν•˜λ‹€λ©΄ ordinal λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ˜μ§€ μ•Šμ„κΉŒλΌλŠ” 생각을 ν•  수 μžˆλ‹€.

  κ²°λ‘ λΆ€ν„° λ§ν•˜μžλ©΄ κ·Έλ ‡κ²Œ μ‚¬μš©ν•˜λ©΄ μ•ˆ λœλ‹€.

  'μ™œ κ·Έλ ‡κ²Œ μ‚¬μš©ν•˜λ©΄ μ•ˆ λ˜λŠ”μ§€'와 '그러면 μ–Έμ œ ordinal을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€'에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

 

πŸ“™ 1. μ—΄κ±° νƒ€μž… μƒμˆ˜μ™€ μ—°κ²°λœ μ •μˆ«κ°’μ„ μ–»κΈ° μœ„ν•΄ ordinal λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆ λ˜λŠ” μ΄μœ 

public enum Ensemble {
    SOLO, DUET, TRIO, QUARTET, QUINTET,
    SEXTET, SEPTET, OCTET, NONET, DECTET;

    public int numberOfMusicians() {
        return ordinal() + 1;
    }
}

  μœ„μ˜ μ½”λ“œλŠ” ν•©μ£Όλ‹¨μ˜ μ’…λ₯˜λ₯Ό μ—°μ£Όμžκ°€ 1λͺ…인 μ†”λ‘œ(solo)λΆ€ν„° 10λͺ…인 λ””ν…νŠΈ(dectet)κΉŒμ§€ μ •μ˜ν•œ μ—΄κ±° νƒ€μž…μ΄λ‹€. λ™μž‘μ€ ν•˜μ§€λ§Œ μœ μ§€λ³΄μˆ˜ν•˜κΈ°κ°€ λ”μ°ν•œ μ½”λ“œμ΄λ‹€.

  κ·Έ μ΄μœ λŠ” μ•„λž˜μ™€ κ°™λ‹€.

  1. μƒμˆ˜ μ„ μ–Έ μˆœμ„œλ₯Ό λ°”κΎΈλŠ” μˆœκ°„ numberOfMusiciansκ°€ μ˜€λ™μž‘ν•œλ‹€.
  2. 이미 μ‚¬μš© 쀑인 μ •μˆ˜μ™€ κ°’이 κ°™μ€ μƒμˆ˜λŠ” μΆ”κ°€ν•  λ°©λ²•이 μ—†λ‹€.
    8쀑주(octet) μƒμˆ˜κ°€ μ΄λ―Έ μžˆμœΌλ‹ˆ λ˜‘같이 8λͺ…이 μ—°μ£Όν•˜λŠ” λ³΅4쀑주(double quartet)λŠ” μΆ”κ°€ν•  μˆ˜ μ—†λ‹€.
  3. 값을 μ€‘간에 λΉ„μ›Œλ‘˜ μˆ˜ μ—†λ‹€.
    12λͺ…이 μ—°μ£Όν•˜λŠ” 3쀑 4쀑주(triple quartet)λ₯Ό μΆ”κ°€ν•˜λ €λ©΄ 11λͺ…μœΌλ‘œ κ΅¬μ„±λœ ν•©μ£Όλ‹¨μ„ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€. (그런데 11λͺ…μœΌλ‘œ κ΅¬μ„±λœ ν•©μ£Όλ‹¨μ΄ μ—†κΈ° λ•Œλ¬Έμ— λ”λ―Έ(dummy) μƒμˆ˜λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•œλ‹€...)

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

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 numberOfMusicians) {
        this.numberOfMusicians = numberOfMusicians;
    }

    public int numberOfMusicians() {
        return numberOfMusicians;
    }
}

 

 

πŸ“™ 2. κ·ΈλŸ¬λ©΄ μ–Έμ œ ordinal λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 걸까?

  그러면 μ–Έμ œ ordinal을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²ƒμΌκΉŒ? Enum의 API λ¬Έμ„œλ₯Ό λ³΄λ©΄ ordinal에 λŒ€ν•΄ μ•„λž˜μ™€ κ°™μ΄ μž‘μ„±λ˜μ–΄ μžˆλ‹€.

λŒ€λΆ€λΆ„ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 이 λ©”μ„œλ“œλ₯Ό μ“Έ 일이 μ—†λ‹€.
이 λ©”μ„œλ“œλŠ” EnumSetκ³Ό EnumMap κ°™μ΄ μ—΄κ±° νƒ€μž… κΈ°λ°˜μ˜ λ²”μš© μžλ£Œκ΅¬μ‘°μ— μ“Έ λͺ©μ μœΌλ‘œ μ„€κ³„λ˜μ—ˆλ‹€.

  λ”°λΌμ„œ, 이런 μš©λ„κ°€ μ•„λ‹ˆλΌλ©΄ ordinal λ©”μ„œλ“œλŠ” μ ˆλŒ€ μ‚¬μš©ν•˜μ§€ 말자. πŸ“’

 

ν•΄λ‹Ή 글은 Joshua Bloch λ‹˜μ˜ 'Effective Java 3/E'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.