티스토리 뷰
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다.
* (영어) ordinal: 서수(first, second...) <-> cardinal: 기수(1, 2, 3...)
31. ordinal 대신 객체 필드를 사용하라
상당수의 enum 상수는 자연스럽게 int값 하나에 대응된다. 모든 enum에는 ordinal이라는 메서드가 있는데, enum 자료형 안에서 enum 상수의 위치를 나타내는 정수값을 반환한다.
- 유지보수 관점에서 매우 끔찍한 결과를 불러올 수 있다. 가급적 절대 사용하면 안된다.
- 상수의 순서를 변경하거나, 중간에 끼워넣기라도 하게 되면 순서를 기반으로 작성된 메서드에 모두 문제가 발생한다.
정 위치값이 필요하다면 ordinal을 사용하는 대신 상수 객체 필드에 별도로 정의해서 사용하는 것이 바람직하다.
public enum Ensemble {
SOLO(1), DUET(2), TRIO(3), QUARTET(4),
QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8);
private final int numberOfMusicians;
Ensemble(int size) {
this.numberOfMusicians = size;
}
public int numberOfMusicians() {
return numberOfMusicians;
}
}
(결론)
ordinal 메서드는 그냥 없는 것으로 생각하자. 써서 좋을게 없다.
'JAVA' 카테고리의 다른 글
메서드 앞에서 인자의 유효성을 검사하라 (0) | 2022.07.27 |
---|---|
Override 애노테이션을 일관되게 붙여라 (0) | 2022.07.27 |
상수 대신 Enum을 사용하라 (2) | 2022.07.27 |
배열보다 리스트를 사용해라 (0) | 2022.07.26 |
unchecked warning은 제거하라 (0) | 2022.07.26 |
댓글