본문으로 건너뛰기
Advertisement

12.2 열거형 (Enum)

열거형(Enum) 은 서로 관련된 상수(Constant) 들을 하나의 클래스처럼 그룹으로 묶어 관리하는 특별한 자바 타입입니다. Java 5에서 도입되었습니다.

1. 왜 열거형이 필요한가?

열거형 없이 프로그램에서 "계절"을 표현하려면 보통 이렇게 정수 상수로 관리했습니다.

// 예전 방식 (문제 있음!)
final int SPRING = 1;
final int SUMMER = 2;
final int FALL = 3;
final int WINTER = 4;

int season = 5; // 아무도 막지 못하는 잘못된 값!

이 방식은 season5처럼 유효하지 않은 값을 대입해도 컴파일러가 잡아주지 못하는 큰 문제가 있습니다.

2. Enum 정의하기

// 계절 열거형 정의
public enum Season {
SPRING, SUMMER, FALL, WINTER
}
// 방향 열거형 정의
public enum Direction {
NORTH, SOUTH, EAST, WEST
}

3. Enum 사용하기

public class EnumExample {
public static void main(String[] args) {
Season today = Season.SUMMER;
System.out.println(today); // SUMMER
System.out.println(today.name()); // "SUMMER" (문자열)
System.out.println(today.ordinal()); // 1 (선언 순서 인덱스, 0부터 시작)

// switch 문과 함께 완벽하게 작동합니다
switch (today) {
case SPRING -> System.out.println("따뜻한 봄!");
case SUMMER -> System.out.println("뜨거운 여름!");
case FALL -> System.out.println("시원한 가을!");
case WINTER -> System.out.println("추운 겨울!");
}
// 출력: 뜨거운 여름!
}
}

4. 데이터와 메서드를 가진 Enum

열거형은 단순한 이름 모음에서 더 나아가 각 상수마다 고유한 데이터와 메서드 를 가질 수도 있습니다.

public enum Planet {
MERCURY(3.303e+23, 2.4397e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6);

private final double mass; // 질량 (kg)
private final double radius; // 반지름 (m)

// Enum 생성자
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}

// Enum 메서드 (표면 중력 계산)
public double surfaceGravity() {
final double G = 6.67300E-11;
return G * mass / (radius * radius);
}
}

public class PlanetTest {
public static void main(String[] args) {
for (Planet p : Planet.values()) {
System.out.printf("%-8s: 중력 = %.2f%n", p, p.surfaceGravity());
}
}
}

Enum을 사용하면 타입 안전성(Type Safety)이 보장되고, 코드의 가독성과 유지보수성이 크게 향상됩니다.

Advertisement