우리가 보통 상수를 쓸때 final을 쓰고
여러개 상수를 정의할때
public static final ## ### =값;
이렇게 썻지만 상수명이 겹치는 경우가 있다.
여러개 쓰면 코드도 길어진다.
그래서 enum을 쓰면
enum Seasons { SPRING, SUMMER, FALL, WINTER }
enum Frameworks { DJANGO, SPRING, NEST, EXPRESS }
이렇게 상수명이 겹쳐도 되고, switch 문도 쓸수 있고
코드를 단순하고 가독성 좋게 만들수 있다.
enum Seasons {
SPRING, //정수 값 0할당
SUMMER,//정수 값 1할당
FALL,//정수 값 2할당
WINTER}//정수 값 3할당
public class Main {
public static void main(String[] args) {
Seasons seasons = Seasons.SPRING;
switch (seasons) {
case SPRING:
System.out.println("봄");
break;
case SUMMER:
System.out.println("여름");
break;
case FALL:
System.out.println("가을");
break;
case WINTER:
System.out.println("겨울");
break;
}
}
}
이렇게 편리하게 관리할수 있고, 중복도 피하며 타입에 대한 안정성을 보장한다.
리턴타입 | 메소드 | 설명 |
---|---|---|
String | name() | 열거 객체에 있는 문자열을 리턴, 문자열은 열거 타입 정의 할때 사용한 상수 이름과 동일하다 |
int | ordnal() | 열거 객체의 순번을 리턴 |
int | compareTo(비교값) | 주어진 매개값과 비교해서 순번 차이를 리턴한다. |
열거 타입 | valueOf(String name) | 주어진 문자열의 열거 객체를 리턴한다. |
열거 배열 | values() | 모든 열거 객체들을 배열로 리턴한다. |
예제
enum Level {
LOW, // 0
MEDIUM, // 1
HIGH // 2
}
public class Test {
public static void main(String[] args) {
Level level = Level.MEDIUM;
Level[] allLevels = Level.values();
for(Level x : allLevels) {
System.out.printf("%s=%d%n", x.name(), x.ordinal());
}
Level findLevel = Level.valueOf("LOW");
System.out.println(findLevel);
System.out.println(Level.LOW == Level.valueOf("LOW"));
switch(level) {
case LOW:
System.out.println("낮은 레벨");
break;
case MEDIUM:
System.out.println("중간 레벨");
break;
case HIGH:
System.out.println("높은 레벨");
break;
}
}
}
//출력값
LOW=0
MEDIUM=1
HIGH=2
LOW
true
중간 레벨