오늘은 Java 버전 1.5 부터 소개된 enum type 에 대해서 알아보자.
enumerated type 인 enum 은 Java SE 버전 1.5 부터 생긴 type 으로서 정수형 상수들을 대체하기에 적당한 기능들을 제공한다.
그래서 아래와 같은 상황에서 enum type 의 사용을 고려 해보는 것이 좋다.
Effective Java 2nd edition 에서는 int enum pattern 이라는 형식일 때, enum type 의 사용을 고려해 보라는 내용이 나온다.
예를 들어서 아래와 같은 코드가 있다고 하면, 아래의 코드는 int enum pattern 이라고 부른다.
public static final int WEEK_MON = 0; public static final int WEEK_TUE = 1; public static final int WEEK_WED = 2; public static final int WEEK_THU = 3; public static final int WEEK_FRI = 4; public static final int WEEK_SAT = 5; public static final int WEEK_SUN = 6; |
이럴 경우, 또 다시 아래와 같은 코드가 있다고 하면,
public static final int TIME_AM = 0; public static final int TIME_PM = 1; |
조금 과장된 표현일 수도 있지만, 아래와 같은 상황이 발생할 수 있다. 이러한 상황에서는 컴파일러는 아무런 경고 메시지도 출력하지 않는다.
if (WEEK_MON == TIME_AM) { System.out.println("Same time"); } |
이러한 상황은 우리가 원하는 것이 아니다. 하지만 이러한 코드는 컴파일러가 잘못 된 표현이라고 알려주지 않는다. 이러한 도움을 받고 싶을 경우에는 enum type 을 사용하면 간단하게 해결 된다. 위의 일주일에 관한 int enum pattern 을 enum type 으로 수정하면, 아래와 같이 코드를 작성할 수 있다.
public enum WEEK {MON, TUE, WED, THU, FRI, SAT, SUN} public enum TIME {AM, PM} |
그리고 아래와 같이 코드를 작성하게 되면, 컴파일 에러가 발생한다. WEEK.MON 과 TIME.AM 은 서로 비교할 수 없다고 컴파일러가 컴파일 타임에 친절하게 알려준다.
if (WEEK.MON == TIME.AM) {System.out.println("Same!");} |
이렇게 int enum patter 이 나타나는 경우에는 enum type 을 사용하면 코드의 잠재적인 버그를 줄일 수 있는 정확한 프로그램을 작성할 수 있다. 아울러 한가지 장점이 더 있는데, int enum pattern 이 사용될 경우 정수값에 해당하는 변수의 이름을 출력하기가 어렵다. (i.e. WEEK_MON 의 값 자체는 출력이 되지만 이 변수의 이름을 출력하려면 상당의 코드를 작성할 필요가 있다.)
이러할 경우에도 enum type 을 사용하면 간단하게 해결이 된다. 그냥 아래와 같이 사용하면 된다. 출력내용은 "MON" 이라고 나온다.
System.out.println(WEEK.MON) |
결론은, int enum pattern 이 나올 경우, 프로그램의 잠재적인 버그를 만들지 않을 수 있고, 디버깅에도 용이한 이점을 얻을 수 있는 enum type 의 사용을 고려해 보자. :)
'Programming > Java' 카테고리의 다른 글
Java Map 을 선언과 동시에 초기화 하기 (0) | 2012.11.27 |
---|---|
Bounded wildcard type vs Bounded type parameter (0) | 2012.11.27 |
enum type constant-specific method 구현 (0) | 2012.11.27 |
Android app (안드로이드 앱) 개발시 지켜야 할 코드 스타일 제안 (0) | 2012.11.27 |
Spring Hello World! (0) | 2012.06.10 |