JDK 1.5부터 C언어의 열거체보다 더 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있다.
자바의 열거체는 아래와 같은 장점이 있다.
문법
enum 열거체이름 { 상수1이름, 상수2이름, ... }
예제
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
문법
열거체이름.상수이름
예제
Rainbow.RED
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
위 예제와 같의 정의돈 열거체의 첫 번째 상숫값은 배열의 인덱스처럼 0부터 설정되며 그 다음부터 1씩 증가되며 설정된다.
불규칙한 값을(사용자 정의 값) 상숫값으로 설정하고 싶다면 상수의 이름 옆에 괄호를 추가하여, 그 안에 원하는 상숫값을 명시할 수 있다.
이 때, 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 아래 예제와 같이 별도로 추가해야한다.
enum Rainbow {
RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), INDIGO(-1), VIOLET(-11);
private final int value;
Rainbow(int value) { this.value = value; }
public int getValue() { return value; }
}
value() 메소드 예제
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum01 {
public static void main(String[] args) {
Rainbow[] arr = Rainbow.values();
for (Rainbow rb : arr) {
System.out.println(rb); // RED ORANGE YELLOW GREEN BLUE INDIGO VIOLET
}
}
}
valueOf() 메소드 예제
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum02 {
public static void main(String[] args) {
Rainbow rb = Rainbow.valueOf("GREEN");
System.out.println(rb); // GREEN
}
}
ordinal() 메소드 예제
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum03 {
public static void main(String[] args) {
int idx = Rainbow.YELLOW.ordinal();
System.out.println(idx); // 2
}
}
불규칙적인(사용자 정의) 상숫값을 가지는 열거체에서 ordinal() 메소드 예제
enum Rainbow {
RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), INDIGO(-1), VIOLET(-11);
private final int value;
Rainbow(int value) { this.value = value; }
public int getValue() { return value; }
}
public class Enum04 {
public static void main(String[] args) {
System.out.println(Rainbow.YELLOW.ordinal()); // 2
}
}