본문 바로가기
effective java

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

by mjjang 2022. 3. 6.

대부분의 열거 타입 상수는 하나의 정숫값에 대응 (0부터 할당됨)

    enum Direction {

        TOP, RIGHT, BOTTOM, LEFT
    }

    public static  void main(String[] args) {
        if (Direction.BOTTOM.ordinal() == 2) {
            System.out.println("아래");
        }
    }

모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메서드를 제공

    @RequiredArgsConstructor
    @Getter
    enum Direction {

        TOP(0), RIGHT(1), BOTTOM(2), LEFT(3);

        private final int value;
    }

    public static  void main(String[] args) {
        if (Direction.BOTTOM.getValue() == 2) {
            System.out.println("아래");
        }
    }

열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고, 인스턴스 필드에 저장하자.

대부분의 프로그래머는 ordinal 메서드를 쓸 일이 없다. EnumSet, EnumMap 등 열거 타입 기반 자료구조에 쓸 목적으로 설계 (contains, add, remove)

댓글