본문 바로가기

Enum

Effective Java ( 이펙티브 자바 ) - 아이템 38 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 열거 타입은 거의 모든 상황에서 이 책 초판에서 소개한 타입 안전 열거 패턴보다 우수하다. 단, 예외가 있으니 타입 안전 열거 패턴은 확장할 수 있으나 열거 타입은 그럴 수 없다는 점이다. 달리 말하면, 열거 타입은 값들을 그대로 가져온 다음 값을 추가하여 다른 목적으로 쓸 수 없다는 뜻이다. 실수로 이렇게 설계한 것은 아니다. 사실 대부분 상황에서 열거 타입을 확장하는건 좋지 않은 생각이다. 확장한 타입의 원소는 기반 타입의 원소로 취급하지만 그 반대는 성립하지 않는다면 이상하지 않은가! 확장성을 높이려면 고려할 요소가 늘어나 설계와 구현이 더욱 복잡해진다. 그런데 확장할 수 있는 열거 타입이 어울리는 쓰임이 최소한 하나는 있다. 바로 연산 코.. 더보기
Effective Java ( 이펙티브 자바 ) - 아이템 35 ordinal 메서드 대신 인스턴스 필드를 사용하라 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 그리고 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal 이라는 메서드를 제공한다. 이런 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal이라는 메서드를 제공한다. public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusicians() { return ordinal() + 1; } } 동작은 하지만 유지보수하기가 끔찍한 코드다. 상수 선언 순서를 바꾸는 순간 numberOfMusi.. 더보기
Effective Java ( 이펙티브 자바 ) - 아이템 34 int 상수 대신 열거 타입을 사용하라 열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 자바에서 열거 타입을 지원하기 전에는 정수 상수를 한 묶음 선언해서 사용하곤 했다. public static final int APPLE_FUJI= 0; public static final int APPLE_PIPPIN= 1; public static final int APPLE_GRANNY_SMITH= 2; public static final int ORANGE_NAVEL= 0; public static final int ORANGE_TEMPLE= 1; public static final int ORANGE_BLOOD= 2; 정수 열거 패턴(int enum pattern) 기.. 더보기