서로 연관된 상수들의 집합
입니다.enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
enum Month {
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUEST, SEPTEMBER,
OCTOBER, NOVEMBER, DECEMBER;
}
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
열거체이름.상수이름
//예시
Rainbow.RED
별도의 추가정의가 없는 열거체의 첫 번째 상수값은 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; }
//getter
public int getValue() { return value; }
}
public class Main {
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 static void main(String[] args) {
Rainbow rainbow = Rainbow.BLUE;
System.out.println(rainbow.name()); //result: BLUE
Rainbow indigo = Rainbow.valueOf("INDIGO");
System.out.println(indigo.name()); //result: INDIGO
}
}
Enum Value를 String으로 정의할 때
Enum 타입과 String 타입을 구분하는 테스트 코드입니다.public class Main {
public enum Level {
GOLD("Gold"), SILVER("Silver");
private String value;
Level(String value) {
this.value = value;
}
public String getValue() { return value; }
}
public static void main(String[] args) throws Exception {
System.out.println(Level.GOLD); //GOLD
System.out.println(Level.SILVER); //SILVER
System.out.println(Level.GOLD.getValue()); //Gold
System.out.println(Level.SILVER.getValue()); //Silver
if (Level.GOLD instanceof Level) {
System.out.println("FSSLevel.GOLD instanceof FSSLevel"); //here
}
if (Level.GOLD.getValue() instanceof String) {
System.out.println("FSSLevel.GOLD.getValue() instanceof String"); //here
}
if (Level.GOLD.equals("GOLD")) {
System.out.println("FSSLevel.GOLD.equals(\"GOLD\") is true");
} else {
System.out.println("FSSLevel.GOLD.equals(\"GOLD\") is false"); //here
}
if (Level.GOLD.getValue().equals("Gold")) {
System.out.println("FSSLevel.GOLD.getValue().equals(\"Gold\") is true"); //here
} else {
System.out.println("FSSLevel.GOLD.getValue().equals(\"Gold\") is true");
}
}
}
//System.out.println result
GOLD
SILVER
Gold
Silver
FSSLevel.GOLD instanceof FSSLevel
FSSLevel.GOLD.getValue() instanceof String
FSSLevel.GOLD.equals("GOLD") is false
FSSLevel.GOLD.getValue().equals("Gold") is true