Skip to content

Latest commit

 

History

History
38 lines (28 loc) · 1.5 KB

ordinal_메서드_대신_인스턴스_필드를_사용하라.md

File metadata and controls

38 lines (28 loc) · 1.5 KB

아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라

열거 타입의 ordinal 메서드

  • Enum은 해당 상수가 몇 번째 위치인지를 반환하는 ordinal() 메서드를 제공한다.

  • ordinal을 잘못 사용한 예

    // 잘못된 버전!
    public enum Ensemble {
        SOLO, DUET, TRIO, QUARTET, QUINTET,
        SEXTET, SEPTET, OCTET, NONET, DECTET;
        
        public int numberOfMusicians() { return ordinal() + 1; }
    }
    • 8명이 연주하는 복4중주를 추가하고 싶다면? 8중주가 이미 있으니 추가할 수 없다.
    • 12명이 연주하는 3중 4중주를 추가하고 싶다면? 11명짜리 dummy 상수를 추가해야 한다.
  • 개선된 버전

    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; }
    }

결론

  • ordinal은 쓰지 말자. 필요하다면 인스턴스 필드로 넣자.
    • 자바 공식 문서: Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data structures, such as EnumSet and EnumMap.