Book/Effective Java

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

성공종 2023. 5. 28. 15:42

ordinal method는 enum type의 상수가 몇번째 존재하는지를 반환하는 함수이다.

 

public enum Ensemble {
    SOLO, DUET, TRIO, QUARTET, QUINTET,
    SEXTET, SEPTET, OCTET, NONET, DECTET;
    
    public int numberOfMusicians(){return ordinal() + 1;}
}

합주단의 종류를 나열한 enum이다. 각각 1명부터 10명까지 합주단의 수에 따라 종류가 달라진다.

각각 index가 0 ~ 9까지 매칭되어 있기 때문에 ordinal() 메소드로 1 ~ 10까지의 값을 반환할 수 있다.

 

배열에서 어떤 값을 얻어내기 위해 그 배열의 인덱스 값을 참조한다는 뜻이다.

 

이럴 경우에 중복 된 값을 가질 수 없고, {ex) double quartet -> 얘도 8명임} 값들이 연속적이지 않으면 내부를 띄엄 띄엄 띄워둬야한다.

 

// 인스턴스 필드에 정수 데이터를 저장하는 열거 타입 (222쪽)
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; }
}

 

 

 

 

 

위와 같이 상수에 연결된 값은 인스턴스 내부에 저장하자.