열거 타입의 상수의 순서를 반환하는 Ordinal
메서드는 많은 부작용을 낳는다.
public enum Ensemble(){
SOLO,DUET,TRIO,QUARTET,QUINTET,
SEXTET,SEPTET,OCTET,NONET,DECTET;
public int numberOfMusicians(){ return ordinal() + 1; }
}
만약 중간에 새로운 상수를 추가하거나 상수가 제거되면 ordinal
로 반환되는 정숫값이 달라진다. 불필요한 더미 데이터를 넣거나 하는 방식 등으로 보완할 수 있겠지만 이는 불안정하고 실용성이 많이 떨어진다.
해결책은 간단하다. 열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고 인스턴스 필드에 저장하자.
public enum Ensemble{
SOLO(1),DUET(2),TRIO(3),QUARTET(4),QUINTET(5),
SEXTET(6),SEPTET(7),OCTET(8),NONET(9),DECTET(10);
private final int numberOfMusicians;
Ensemble(int size){
this.numberOfMusicians = size;
}
public int numberOfMusicians(){ return numberOfMusicians; }
}