JAVA/이펙티브 자바
35. ordinal 메서드 대신 인스턴스 필드를 사용하라
간펴니
2023. 7. 18. 20:52
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