값을 부여할 수도 있는데 다음 데모에서 살펴보기로 한다. 값을 부여하지 않으면 자동으로 변수명이 문자열 형태의 값으로 인식되며, 작성한 순서대로 0번부터 번호가 부여된다. 이름과 순서는 각각 name() , ordinal() 로 확인할 수 있다.
위 Enum은 다음 상수 형태로 표현이 가능하다
Week.java
public class Week {
public static final String MONDAY = "MONDAY";
public static final String TUESDAY = "TUESDAY";
public static final String WEDNESDAY = "WEDNESDAY";
public static final String THURSDAY = "THURSDAY";
public static final String FRIDAY = "FRIDAY";
public static final String SATURDAY = "SATURDAY";
public static final String SUNDAY = "SUNDAY";
}
EnumExample02.java
public class EnumExample02 {
public static void main(String[] args){
System.out.println(Week.MONDAY);
System.out.println(Week.TUESDAY);
System.out.println(Week.WEDNESDAY);
System.out.println(Week.THURSDAY);
System.out.println(Week.FRIDAY);
System.out.println(Week.SATURDAY);
System.out.println(Week.SUNDAY);
}
}
이름과 별개로 값을 가질 수 있으며, 이 때는 내부에 변수를 만들고 생성자를 구현해야 한다. 또한 열거형 상수 선언 시 ( ) 안에 생성자에 들어갈 데이터를 명시해야 한다. 변수는 여러 개 만들어서 여러 값을 보관시킬 수 있다. getValue() 는 임의의 getter 메소드이며, 데이터가 많다면 많이 만들어서 원하는 작업을 처리할 수 있다.
Enum의 생성자는 public일 수 없다.
이 예제를 통해 단순 상수 선언보다 Enum은 더 많은 데이터와 기능을 묶어서 가질 수 있음을 알 수 있다.
데모 3 : valueOf() 의 활용
Holiday.java
public enum Holiday {
NEWYEAR("신정", 1, 1),
LABORDAY("근로자의날", 5, 1),
CHILDRENSDAY("어린이날", 5, 5),
MEMORIALDAY("현충일", 6, 6),
INDEPENDENTDAY("광복절", 8, 15),
CHRISTMAS("크리스마스", 12, 25);
private String name;
private int month, day;
Holiday(String name, int month, int day){
this.name = name;
this.month = month;
this.day = day;
}
public String getName() {
return name;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
}
EnumExample04.java
public class EnumExample04 {
public static void main(String[] args){
String name = "CHILDRENSDAY";
Holiday holiday = Holiday.valueOf(name);
System.out.println(holiday.getName());
System.out.println(holiday.getMonth());
System.out.println(holiday.getDay());
}
}
valueOf()는 생성된 열거형 데이터 중에 해당하는 이름이 존재할 경우 객체를 반환하는 명령이다. 존재하지 않을 경우 java.lang.IllegalArgumentException을 발생시킨다. 이를 통하여 기존의 상수에 비해 좀 더 다양한 처리를 구현할 수 있다.