enum이란?enum은 열거형(enumeration)의 줄임말로, 서로 연관된 상수들을 하나의 타입으로 정의할 때 사용하는 키워드다. 자바에서 enum은 상수들의 집합으로, 타입 안정성과 가독성을 높여준다.
enum 열거형이름 {
상수1, 상수2, 상수3, ...
}
class와 비슷한 역할을 하며, 내부적으로 java.lang.Enum 클래스를 상속받는다.static이고 final로 선언된 불변 객체다.enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class Main {
public static void main(String[] args) {
Day today = Day.MONDAY;
// 열거형 값 출력
System.out.println("오늘은: " + today);
// 열거형 비교
if (today == Day.MONDAY) {
System.out.println("월요일은 힘들어!");
}
}
}
오늘은: MONDAY
월요일은 힘들어!
타입 안정성: 열거형을 사용하면 정해진 값 외에 다른 값을 저장할 수 없다.
Day today = Day.MONDAY; // OK
// today = "MONDAY"; // 컴파일 에러!
switch 문에서 사용 가능:
public class Main {
public static void main(String[] args) {
Day today = Day.WEDNESDAY;
switch (today) {
case MONDAY:
System.out.println("월요일");
break;
case WEDNESDAY:
System.out.println("수요일");
break;
default:
System.out.println("다른 요일");
}
}
}
내부 메서드 제공:
name(): 열거형 상수의 이름을 문자열로 반환ordinal(): 상수의 순번(0부터 시작)을 반환valueOf(String): 문자열을 상수로 변환public class Main {
public static void main(String[] args) {
Day today = Day.FRIDAY;
System.out.println(today.name()); // "FRIDAY"
System.out.println(today.ordinal()); // 4
System.out.println(Day.valueOf("FRIDAY")); // SUNDAY
}
}
열거형은 단순히 상수만 정의하는 것이 아니라 필드와 메서드를 포함할 수 있다.
enum Planet {
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6),
MARS(6.421e+23, 3.3972e6);
private final double mass; // 질량 (kg)
private final double radius; // 반지름 (m)
// 생성자
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
// 중력 계산 메서드
double surfaceGravity() {
final double G = 6.67300E-11; // 중력 상수
return G * mass / (radius * radius);
}
}
public class Main {
public static void main(String[] args) {
for (Planet p : Planet.values()) {
System.out.printf("%s: 중력 = %.2f m/s²%n", p, p.surfaceGravity());
}
}
}
MERCURY: 중력 = 3.70 m/s²
VENUS: 중력 = 8.87 m/s²
EARTH: 중력 = 9.80 m/s²
MARS: 중력 = 3.71 m/s²
enum TrafficLight {
RED, YELLOW, GREEN
}
public class Main {
public static void main(String[] args) {
TrafficLight light = TrafficLight.RED;
switch (light) {
case RED:
System.out.println("정지!");
break;
case YELLOW:
System.out.println("주의!");
break;
case GREEN:
System.out.println("출발!");
break;
}
}
}
enum Level {
LOW(1), MEDIUM(2), HIGH(3);
private final int value;
Level(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public class Main {
public static void main(String[] args) {
Level level = Level.HIGH;
System.out.println("Level: " + level + ", Value: " + level.getValue());
}
}
Level: HIGH, Value: 3
enum은 상수를 열거할 때 사용하며, 타입 안정성을 보장한다.