[Effective Java] 6 - item 35 ordinal()
대신 인스턴스 필드를 사용하라.
ordinal()
: 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환한다.
이 메소드를 열거 타입 상수와 연결된 정수값이 필요할 때 사용하고 싶겠지만…
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET,
SEXTET, SEPTET, OCTET, NONET, DECTET;
public int numberOfMusicians() { return ordinal() + 1; }
}
위와 같이 ordinal()
을 사용해 함수를 작성한다면,
- 상수 선언 위치를 바꾸는 순간
numberOfMusicians
메서드가 오작동할 것이다. - 이미 사용중인 정수와 값이 같은 상수는 추가할 수 없다.
- 중간에 사용하지 않는 값이 있더라도 비워둘 수 없기에 더미 값을 추가해야 한다.
- 코드가 깔끔하지 않아지고, 쓰이지 않는 값이 많아질수록 실용성이 떨어진다.
열거 타입 상수에 연결된 값은
ordinal()
으로 가져오지 말고, 인스턴스 필드를 두어 저장하자.
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; }
}
Leave a comment