꾸준한 스터디
article thumbnail

Enum의 메서드 중 ordinal 메서드는 호출한 열거형 상수의 순서값을 반환하는 메서드이다.

enum Season {
    SPRING, // 순서값: 0
    SUMMER, // 순서값: 1
    FALL,   // 순서값: 2
    WINTER  // 순서값: 3
    
    public static void main(String[] args) {
        System.out.println(Season.SPRING.ordinal()); // 출력: 0
        System.out.println(Season.SUMMER.ordinal()); // 출력: 1
        System.out.println(Season.FALL.ordinal());   // 출력: 2
        System.out.println(Season.WINTER.ordinal()); // 출력: 3
    }
}

하지만 대부분 프로그래머가 ordinal 메서드를 사용하는 일은 없고 EnumSet이나 EnumMap 같이 열거 타입 기반의 범용 자료구조에 사용될 목적으로 만들어진 메서드이다.

 

단순하게 순서값을 받고 싶어서 사용할 수 있지만 나중에 유지보수가 어려울 수 있다.

 

이 앙상블 열거타입은 합주단의 종류를 열거한 타입으로, 해당하는 상수의 연주자가 몇 명인지 알기위해 ordinal 메서드를 사용하였다.

하지만 만약 상수 선언 순서를 바꾸는 순간 연주자의 인원수 또한 제대로 표현하지 하지 못하고 

이미 사용중인 정수와 값이 같은 상수는 추가할 수 없다. 

 

예를 들어 8중주(octet) 이 이미 있으니 8명이 연주하는 복4중주(double quartet)을 추가할 수 없다.

또한 12명이 연주하는 3중 4중주(triple quartet)를 추가해야하는데 11명이 연주하는 이름은 없기 때문에 중간에 값을 비우려면 사용하지 않는 dummy 상수를 추가해야 하는 끔찍한 코드가 생겨난다.

 

이에 대한 해결책은 열거타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고 인스턴스 필드에 저장하면 된다.

profile

꾸준한 스터디

@StudyRecord

포스팅이 유익하셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!