public static final int APPLE_FUJI = 0;public static final int APPLE_PIPPIN = 1;public static final int APPLE_GRANNY_SMITH = 2;
public enum Apple { FUJI, PIPPIN, GRANNY_SMITH }
열거타입은 싱글턴의 일반화한 형태라고 볼 수 있음
열거타입은 컴파일타임 타입 안정성을 제공
열거타입은 메서드나 필드를 추가할 수 있고 임의의 인터페이스를 구현할 수도 있음
아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라
열거 타입은 해당 상수가 열거 타입에서 몇 번째 위치하는지 반한하는 ordinal이라는 메서드를 제공
하지만 ordinal를 사용하는 로직을 구현시 열거타입내 상수의 순서를 바꾸거나 중간에 값을 삭제하는 등의 변경이 발생하면 dummy를 추가하는 등의 작업을 해야함
ordinal 메서드 보다는 인스턴스 필드에 원하는 값을 저장
public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4); // SOLO(1), DUET(2), QUARTET(4); 와 같이 TRIO를 삭제해도 작동 private final int numberOfMusicians; Ensemble(int size) { this.numberOfMusicians = size; } public int numberOfMusicians() { return numberOfMusicians; }}
아이템 36. 비트 필드 대신 EnumSet을 사용하라
예전에는 각 상수에 2의 거듭제곱값을 할당한 정수 열거 패턴을 사용했음
public static final int STYLE_BOLD = 1 << 0;public static final int STYLE_ITALIC = 1 << 1;public static final int STYLE_UNDERLINE = 1 << 2;public static final int STYLE_STRIKETHROUGH = 1 << 3;...// 다음과 같이 조합하여 사용text.applyStyle(STYLE_BOLD | STYLE_ITELIC);