Skip to content

Latest commit

Β 

History

History
37 lines (28 loc) Β· 1.13 KB

Item_35._don't_use_enum_ordinal.md

File metadata and controls

37 lines (28 loc) Β· 1.13 KB

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

Enum의 ordinal()

enum Fruit {
    APPLE, // 0
    ORANGE, // 1
    STRAWBERRY; // 2
}
  • ν•΄λ‹Ή μƒμˆ˜κ°€ μ—΄κ±° νƒ€μž…μ—μ„œ λͺ‡ 번째 μœ„μΉ˜μΈμ§€ λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ
  • μ‚¬μš©μ„ 맀우맀우맀우! μ§€μ–‘ν•˜λŠ” 것이 μ’‹μŒ
    • μœ„μΉ˜λ₯Ό λ°˜ν™˜ν•œλ‹€λŠ” 것은 곧 μœ„μΉ˜κ°€ 달라지면 λ‹¬λΌμ§€λŠ” κ°’μ΄λΌλŠ” 뜻
    • 쀑간에 νŠΉμ • μƒμˆ˜κ°€ 끼어듀면 λ’€μ˜ μƒμˆ˜λ“€μ˜ ordinal 값은 λͺ¨λ‘ λ°”λ€œ

μ—΄κ±° νƒ€μž… μƒμˆ˜μ— μ—°κ²°λœ 값은 직접 ν•„λ“œμ— μ €μž₯

enum Fruit {
    APPLE(1),
    ORANGE(2),
    STRAWBERRY(3);

    private final int number;

    Fruit(int number) {
        this.number = number;
    }
}

그럼 μ–Έμ œ ordinal λ©”μ„œλ“œλ₯Ό μ‚¬μš©?

  • Enum의 API λ¬Έμ„œμ—λŠ” ordinal λ©”μ„œλ“œμ— λŒ€ν•΄ λŒ€λΆ€λΆ„ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 이 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  일이 μ—†μœΌλ©°, EnumSetκ³Ό EnumMapκ³Ό 같은 μ—΄κ±° νƒ€μž… 기반 μžλ£Œκ΅¬μ‘°μ— μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜μ—ˆλ‹€κ³  말함
  • 즉, μ—΄κ±° νƒ€μž… 기반의 λ²”μš©μ  자료ꡬ쑰λ₯Ό μ„€κ³„ν•˜λŠ” 일이 μ•„λ‹ˆλΌλ©΄ μ‚¬μš©ν•˜μ§€ 말자