Enum은 열거형 상수를 위한 타입이다. Enum 도입 이전 상수를 관리하기 위해서 인터페이스나 클래스의 static final 필드를 통한 개발을 해왔었다. Enum 이전의 클래스 형태의 상수 관리를 알아보자.
class Shoes{
static final int RUNNING = 0;
static final int WALKING = 1;
}
class Brand{
static final int NIKE = 0;
static final int ADIDAS = 1;
}
if(Shoes.RUNNING == Brand.NIKE) {
// 실행되면 안 되는 코드
}
위처럼 클래스를 통해 상수를 관리할 때 몇 가지 문제점이 생길 수 있다. Shoes.RUNNING == Brand.NIKE를 비교하는 과정에서 컴파일 에러가 발생하지 않는다. 상수이긴 하지만 정수형을 사용하는 한 고유한 값이 아니기 때문이다. 사람의 관점으로 본다면 비교조차 되지 못해 컴파일 에러가 발생해야 하는 값이다.
다음은 인스턴스를 생성하여 관리하는 방법이다.
class Season {
public static final Season SPRING = new Season("봄");
public static final Season SUMMER = new Season("여름");
public static final Season FALL = new Season("가을");
public static final Season WINTER = new Season("겨울");
private String name;
private Season(String name) {
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
그러나 위의 코드는 switch에서 사용할 수 없다. switch의 조건식에 들어가는 자료형이 정수형, String, enum 뿐으로 제한되기 때문이다.