public class Foods {
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;
}
위 클래스는 품종별 사과와 오렌지를 정수 상수처럼 묶어서 작성해놓은 Foods 클래스이다.
이런 정수 열거 패턴 기법에는 단점이 있으며 다음과 같다.
타입 안전을 보장할 수 없다.
표현력이 좋지 않다.
오렌지를 건네야 할 메서드에 사과를 보내고 동등 연산자(==)로 비교해도 컴파일러는 경고를 내보내지 않는다.
자바에서 별도의 namespace를 지원하지 않아서 접두어(APPLE, ORANGE)를 붙혀야 한다.
상수를 나열한 것 뿐이기에 깨지기 쉽다.
⇒ 컴파일시 그 값이 클라이언트 파일에 그대로 새겨지는데, 상수의 값이 바뀌면 클라이언트도 다시 컴파일해야한다.
이러한 단점으로 정수 열거 패턴의 변형인 문자열 열거 패턴(String enum pattern)
도 있지만, 이역시 더 나쁘면 나쁘지 좋지는 않다. 숫자가 아니라 문자를 사용하게되면서 미숙한 개발자는 문자열 값을 그대로 사용하며 하드코딩 할 수 있기 때문이다. 이는 런타임 버그와 문자열 비교에 따른 성능저하를 유발시킨다.
그래서 다시 본론으로 돌아와 위에서 언급한 여러 단점들때문에 열거 타입이라는 대안책을 자바에서 제시했고 이 대악책을 사용하면 위와같은 단점들을 모두 해결할 수 있다.