ordinal 메서드 대신 인스턴스 필드를 사용하라
•
모든 열거 타입은 해당 상수값이 전체 열거 타입 중 몇 번째 순번인지를 반환하는 ordinal 메서드를 제공한다.
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET,
SEXTET, SEPTET, OCTET, NONTET, DECTET;
public int numberOfMusicions() { return ordinal() + 1; }
}
Java
복사
•
이 예시에서는 ordinal 메서드를 사용해 합주단에서 연주자의 수가 몇 명인지 구하는 numberOfMusicions 라는 메서드를 구현했다. 하지만 이 방법은 상수 선언을 추가하거나 순서를 바꾸는 순간 오작동하며, 8중주(octet) 상수가 이미 있으니 복4중주(double quarter)은 추가할 수 없다. 또한 11명이 하는 합주 없이 12명이 하는 합주를 추가하고 싶다면 더미 상수를 추가해야한다.
•
해결책은 ordinal 메서드를 사용하지 않고, 이전 장에서 설명했던 열거형 매핑을 통해 상수마다 값을 저장하도록 하자.
public enum Ensemble {
SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5),
SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8),
NONTET(9), DECTET(10), TRIPLE_QUARTET(12);
private final int numberOfMusicions;
Ensemble(int size) { this.numberOfMusicions = size; }
public int numberOfMusicions() { return numberOfMusicions; }
}
Java
복사