ordinal 메서드 대신 인스턴스 필드를 사용하라
대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 그리고 모든 열거 타입은 ordinal이라는 메서드를 제공한다.
따라서 열거 타입 상수와 연결된 정숫값이 필요하다면 ordinal을 사용하곤 하는데 이 방법은 추천하지 않는 방법이다.
예를 들어, 다음과 같이 합주단의 종류를 연주자가 한명인 SOLO부터 10명인 DECTEC까지 정의한 열거 타입이 있다.
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET;
public int numberOfMusicians() {
return ordinal() + 1;
}
}
만약 위 방식처럼 사용한다면
numberOfMusicians
가 오작동하게 된다.열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지말고, 인스턴스 필드에 저장하는 것이 좋다.
실제로 ordinal은 EnumSet, EnumMap과 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다고 한다. 따라서 이러한 용도가 아니면 ordinal을 사용하지 말자.