어제 오늘 내일

[Java] enum 사용법 및 실전 예제 본문

IT/Java

[Java] enum 사용법 및 실전 예제

hi.anna 2025. 12. 30. 00:50

Java의 enum(열거형)은 한정된 값들의 집합을 표현할 때 사용하는 특별한 타입입니다.
예를 들어 요일, 상태값, 권한 등 “정해진 값만 존재해야 하는 상황”에서 매우 유용합니다.
enum을 사용하면 코드 안정성이 높아지고, switch문이나 상수 처리도 훨씬 직관적입니다.

 

1. enum 기본 사용법

enum은 클래스처럼 파일에 선언할 수 있으며, 여러 상수를 나열합니다.

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

사용:

Day today = Day.MONDAY;

특징

  • 각 값은 객체처럼 취급됨
  • 상수명을 모두 대문자로 작성하는 것이 관례

 

2. enum을 사용하는 이유

✔ 문자열/숫자 상수보다 안전

String day = "Fridyy"; // 오타 발생 가능

enum 사용 시:

Day day = Day.FRIDAY; // ✔ 오타 방지, 안전

✔ 제한된 값만 사용하도록 강제

  • 유효하지 않은 값이 들어갈 위험 없음
  • 타입 안정성(Type-Safety) 향상

✔ 비교가 빠르고 안전

오타가 나지 않으며 equals가 아닌 == 비교도 가능

 

3. enum과 switch문

enum은 switch문에서 매우 자주 사용됩니다.

Day today = Day.FRIDAY;

switch (today) {
    case MONDAY:
        System.out.println("월요일입니다");
        break;
    case FRIDAY:
        System.out.println("드디어 금요일!");
        break;
    default:
        System.out.println("평일 or 주말");
}

 

 

4. enum에 필드와 메서드 추가하기

enum은 단순 상수 집합이 아니라 클래스처럼 필드, 생성자, 메서드도 가질 수 있습니다.

public enum Status {
    READY("준비"),
    RUNNING("진행중"),
    DONE("완료");

    private final String description;

    Status(String description) { // 생성자
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

사용:

Status s = Status.READY;
System.out.println(s.getDescription()); // 준비

설명

  • 각 enum 상수마다 다른 값을 부여할 수 있음

 

5. enum에 메서드를 선언하여 동작 정의하기

public enum Operation {
    ADD {
        public int apply(int x, int y) { return x + y; }
    },
    SUBTRACT {
        public int apply(int x, int y) { return x - y; }
    };

    public abstract int apply(int x, int y);
}

사용:

int result = Operation.ADD.apply(3, 5);
System.out.println(result); // 8

설명

  • enum 상수별로 다른 동작을 정의할 수 있음

 

6. enum과 Singleton 패턴

enum은 간단하고 안전한 싱글턴 패턴 구현에도 활용됩니다.

public enum Singleton {
    INSTANCE;

    public void doSomething() {
        System.out.println("싱글턴 동작");
    }
}

사용:

Singleton.INSTANCE.doSomething();

장점

  • 직렬화 문제 해결
  • 리플렉션 공격 방어
  • 가장 안전한 싱글턴 구현 방식

 

7. 실전 예제: 주문 상태 관리

public enum OrderStatus {
    NEW, PROCESSING, SHIPPED, DELIVERED, CANCELED
}

사용:

public void handleOrder(OrderStatus status) {
    switch (status) {
        case NEW:
            System.out.println("신규 주문");
            break;
        case PROCESSING:
            System.out.println("처리 중");
            break;
        case SHIPPED:
            System.out.println("배송 중");
            break;
        case DELIVERED:
            System.out.println("배송 완료");
            break;
        case CANCELED:
            System.out.println("취소됨");
            break;
    }
}

 

 

8. 실전 예제: Role(권한) 처리

public enum Role {
    USER(1),
    ADMIN(2);

    private final int level;

    Role(int level) {
        this.level = level;
    }

    public int getLevel() {
        return level;
    }
}

사용:

Role r = Role.ADMIN;

if (r.getLevel() >= 2) {
    System.out.println("관리자 권한 접근 가능");
}

 

 

9. 정리

  • enum은 타입 안전성을 가진 상수 집합
  • switch문과 함께 자주 사용
  • 필드·생성자·메서드를 추가해 확장 가능
  • 동작이 다른 상수를 만들어 전략 패턴처럼 사용 가능
  • 싱글턴 구현에도 활용 가능

 

 

반응형
Comments