Search
Duplicate

아이템 35 - ordinal 메서드 대신 인스턴스 필드를 사용하라

작성자
챕터
6장 - 열거 타입과 애너테이션
최종 편집
2023/07/28 16:08
생성 시각
2023/07/28 14:15

ordinal

해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 메서드.
대부분의 열거 타입 상수는 하나의 정숫값에 대응되기 때문에 편리한 메서드처럼 보일 수 있다.
하지만 ordinal을 사용하면 상수 선언 순서를 바꾸기 힘들어진다. 또한, 값을 중간에 비워둘 수도 없어서 dummy 상수를 추가해야 할 수도 있다. 따라서 코드의 가독성와 실용성이 떨어지면서 유지보수가 힘들어진다.
열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고, 인스턴스 필드에 저장하자
public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8); // public int numberOfMusicians() { // return ordinal() + 1; // ordinal은 0부터 시작 // } private final int numberOfMusicians; Ensemble(int size) { this.numberOfMusicians = size; } public int numberOfMusicians() { return numberOfMusicians; } }
Java
복사
ordinal 메서드는 EnumSet과 EnumMap 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계된 메서드이고 대부분 프로그래머는 이 메서드를 쓸 일이 없다. - Enum API 문서

정리

Enum 또한 클래스이니 유지보수 힘들게 하는 ordinal 쓰지 말고 인스턴스 필드를 사용하자~