Enum

hoon·2025년 1월 13일

JAVA

목록 보기
6/21

enum이란?

enum은 열거형(enumeration)의 줄임말로, 서로 연관된 상수들을 하나의 타입으로 정의할 때 사용하는 키워드다. 자바에서 enum은 상수들의 집합으로, 타입 안정성가독성을 높여준다.


1. 기본 문법

enum 열거형이름 {
    상수1, 상수2, 상수3, ...
}
  • 열거형은 기본적으로 class와 비슷한 역할을 하며, 내부적으로 java.lang.Enum 클래스를 상속받는다.
  • 열거형 상수는 static이고 final로 선언된 불변 객체다.

2. 간단한 예제

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
월요일은 힘들어!

3. 주요 특징

  1. 타입 안정성: 열거형을 사용하면 정해진 값 외에 다른 값을 저장할 수 없다.

    Day today = Day.MONDAY; // OK
    // today = "MONDAY"; // 컴파일 에러!
    
  2. 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("다른 요일");
            }
        }
    }
    
  3. 내부 메서드 제공:

    • 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
        }
    }
    

4. 열거형에 필드와 메서드 추가하기

열거형은 단순히 상수만 정의하는 것이 아니라 필드와 메서드를 포함할 수 있다.

예제: 열거형에 필드와 메서드 추가

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²

5. 열거형 활용

상태 관리

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

6. 요약

  • enum은 상수를 열거할 때 사용하며, 타입 안정성을 보장한다.
  • 열거형은 가독성코드의 안정성을 높인다.
  • 필드, 메서드, 생성자를 추가해 더욱 확장된 기능을 구현할 수 있다.

0개의 댓글