반응형
상당수의 enum 상수는 자연스럽게 int 값 하나에 대응된다.
모든 enum에는 ordinal이란 메서드가 있는데 enum자료형 안에서 상수의 위치를 나타내는 정수값을 반환한다.
// 잘못된 예
public enum Ensemble{
SOLO, DUET, TRIO;
public int numberOfMusicians() { return ordinal() + 1; }
}
// 상수 순서를 변경하는 순간 깨지게 된다!
enum 상수에 연계되는 값을 ordinal을 사용해 표현하지 말아야 한다.
그런 값이 필요하다면 그 대신 객체 필드에 저장해야 한다.
public enum Ensemble{
SOLO(1), DUET(2), TRIO(3);
private final int numberOfMusicians;
Ensemble(int size) { this.numberOfMusicians = size; }
public int numberOfMusicians() { return numberOfMusicians; }
자바의 Enum 명세를 보면 ordinal에 대해 이렇게 설명되어있다.
· 대부분의 프로그래머는 이 메서드를 사용할 일이 별로 없다. EnumSet, EnumMap처럼 일반적인 용도의 enum기반 자료구조에서 사용할 목적으로 설계한 메서드다.
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 29 형안전 다형성 컨테이너를 쓰면 어떨지 따져보라 (0) | 2023.04.27 |
---|---|
<Effective Java> RULE 30 int상수 대신 enum을 사용하라 (0) | 2023.04.27 |
<Effective Java> RULE 32 비트필드 대신 EnumSet을 사용하라 (0) | 2023.04.27 |
<Effective Java> RULE 33 ordinal을 배열첨자로 사용하는 대신 EnumMap을 이용하라 (0) | 2023.04.27 |
<Effective Java> RULE 34 확장 가능한 enum을 만들어야 한다면 인터페이스를 이용하라 (0) | 2023.04.27 |