Search

Item 35. ordinal 메서드 대신 인스턴스 필드를 사용하라

생성일
2023/07/27 00:27
챕터
6장 - 열거 타입과 애너테이션

ordinal 메서드 대신 인스턴스 필드를 사용하라

모든 열거 타입은 해당 상수값이 전체 열거 타입 중 몇 번째 순번인지를 반환하는 ordinal 메서드를 제공한다.
public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONTET, DECTET; public int numberOfMusicions() { return ordinal() + 1; } }
Java
복사
이 예시에서는 ordinal 메서드를 사용해 합주단에서 연주자의 수가 몇 명인지 구하는 numberOfMusicions 라는 메서드를 구현했다. 하지만 이 방법은 상수 선언을 추가하거나 순서를 바꾸는 순간 오작동하며, 8중주(octet) 상수가 이미 있으니 복4중주(double quarter)은 추가할 수 없다. 또한 11명이 하는 합주 없이 12명이 하는 합주를 추가하고 싶다면 더미 상수를 추가해야한다.
해결책은 ordinal 메서드를 사용하지 않고, 이전 장에서 설명했던 열거형 매핑을 통해 상수마다 값을 저장하도록 하자.
public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8), NONTET(9), DECTET(10), TRIPLE_QUARTET(12); private final int numberOfMusicions; Ensemble(int size) { this.numberOfMusicions = size; } public int numberOfMusicions() { return numberOfMusicions; } }
Java
복사