열거형(Enum)은 여러 상수들을 편리하게 선언할 수 있도록 해줍니다. 서로 연관된 상수들의 집합이며, 다른 데이터 타입의 값을 저장하려고 하면 컴파일 오류가 발생합니다. 또한 관례적으로 대문자로 작성합니다. enum은 아래와 같이 선언할 수 있습니다.
enum Frameworks { DJANGO, SPRING, NEST, EXPRESS }
enum Direction {
NORTH,
EAST,
SOUTH,
WEST
}
public class EnumExample {
public static void main(String[] args) {
Direction d = Direction.EAST;
if (d == Direction.EAST) {
System.out.println("Direction is EAST");
}
}
}
위에서 Direction은 NORTH, EAST, SOUTH, WEST라는 상수를 가지고 있으며, Direction.EAST 로 접근할 수 있습니다.
enum Seasons {SPRING, SUMMER, FALL, WINTER}
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;
}
}
}
또한, 위와 같이 switch 문에서도 타입의 안정성을 보장합니다.

열거형은 순회할 수 있으며, enum.name()을 통해 문자열을 리턴합니다. 또한, enum.ordinal()을 사용하여 자동으로 객체의 순번을 리턴할 수 있습니다.
enum은 일반적으로 클래스로 정의되어있기 때문에, 일반 상수에 비해서 프로그램 성능에 영향을 미칠 수 있으나 미미합니다. 그러나 enum을 사용하면 프로젝트의 가독성과 유지보수성을 향상시키기 때문에 이점이 더 큽니다.
오라클에서 제공하는 Enum 에 관한 공식문서입니다.
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html