enum의 특징

  1. 클래스처럼 동작: enum은 클래스를 상속받을 수 없지만, 내부적으로 java.lang.Enum 클래스를 확장합니다.
  2. 싱글톤 패턴: 각 enum 상수는 JVM 내에서 고유한 객체로 존재하며, 상수마다 딱 하나의 인스턴스만 생성됩니다.
  3. 불변성: enum 상수는 불변(Immutable) 객체입니다. 생성 후 상태가 변경되지 않습니다.
  4. 자동 제공 메서드:

예제: 간단한 enum

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY
}

컴파일 후, 다음과 유사한 클래스로 변환됩니다:


public final class Day extends Enum<Day> {
    public static final Day MONDAY = new Day("MONDAY", 0);
    public static final Day TUESDAY = new Day("TUESDAY", 1);
    public static final Day WEDNESDAY = new Day("WEDNESDAY", 2);

    private static final Day[] ENUM_VALUES = {MONDAY, TUESDAY, WEDNESDAY};

    private Day(String name, int ordinal) {
        super(name, ordinal);
    }

    public static Day[] values() {
        return ENUM_VALUES.clone();
    }

    public static Day valueOf(String name) {
        for (Day day : ENUM_VALUES) {
            if (day.name().equals(name)) {
                return day;
            }
        }
        throw new IllegalArgumentException("No enum constant " + name);
    }
}