728x90
대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다.
모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지 반환하는 ordinal이라는 메서드를 제공한다.
이런 이유로 열거 타입 상수와 연결된 정수값이 필요할 때 ordinal 메서드를 이용하고 싶은 유혹에 빠진다.
그러나 해당 메서드를 사용하면 유지보수가 끔찍해질 수 있다.
구현에 따라 코드가 오동작 할 수 있고, 값을 추가하거나 제거하기가 힘들어질 수 있다.
또한 중간에 값을 비워둘 수 없게되고 때문에 더미 상수를 추가해야 하는 상황이 올 수 있다.
해답은 간단하다. ordinal 메서드를 사용하지 말고 인스턴스 필드에 int 필드를 추가 후 저장하여 사용하면 된다.
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; }
}
ordinal 메서드를 절대 사용하지 말자.
728x90
'JAVA > 이펙티브 자바' 카테고리의 다른 글
38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 (0) | 2023.07.20 |
---|---|
37. ordinal 인덱싱 대신 EnumMap을 사용하라 (0) | 2023.07.18 |
34. int 상수 대신 열거 타입을 사용하라 (0) | 2023.07.18 |
33. 타입 안정 이종 컨테이너를 고려하라 (0) | 2023.07.16 |
32. 제네릭과 가변인수를 함께 쓸 때는 신중하라 (0) | 2023.07.16 |