본문 바로가기
카테고리 없음

자바 Enum 기본 개념 완전 정리

by 기록하는 거부기 2025. 12. 10.

자바에서 Enum 클래스는 일정한 값의 집합을 표현하고,
코드 안정성과 가독성을 높여주는 중요한 기능입니다.
특히 상태값, 코드값, 타입 안전성이 필요한 경우에
Enum은 실무에서 필수로 사용되며 유지보수에도 큰 도움이 됩니다.
이번 글에서는 Enum의 개념, 사용 이유, 활용법을 정리해보겠습니다.


▶ 1. Enum 클래스란 무엇인가?

**Enum(열거형)**은 고정된 상수 집합을 정의하는 자바의 특별한 클래스입니다.
예를 들어 요일, 주문 상태, 성별, 권한 같은 값들이 대표적인 Enum 사용 사례입니다.

기존에는 아래처럼 상수를 정의했습니다.

public static final int READY = 0;
public static final int COMPLETE = 1;

이 방식은 숫자로 표현되어 의미가 모호하고,
잘못된 값이 들어오는 오류를 방지하기 어렵습니다.
이 문제를 해결하는 것이 Enum입니다.


▶ 2. Enum을 사용하는 이유

1) 타입 안정성(Type Safety) 확보
정해진 값만 사용할 수 있어 잘못된 값 입력을 방지합니다.

2) 코드 가독성 향상
상태값이 의미 있는 이름으로 표현됩니다.

3) 비교 연산 안전성
Enum은 싱글턴처럼 동작해 == 비교가 가능합니다.

4) 클래스 수준 확장 가능
필드, 생성자, 메서드를 포함할 수 있어 단순 상수 이상의 역할을 수행합니다.


▶ 3. Enum 기본 사용법

가장 기본적인 Enum 선언은 아래와 같습니다.

public enum OrderStatus {
    READY,
    PROCESSING,
    COMPLETE,
    CANCEL
}

 

사용 예시는 다음과 같습니다.

OrderStatus status = OrderStatus.READY;

if (status == OrderStatus.READY) {
    System.out.println("주문 접수 상태");
}

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

Enum은 실제로 클래스처럼 동작할 수 있습니다.
각 상수에 코드값, 설명 등을 부여하는 것도 가능합니다.

public enum Grade {
    BASIC("B", "기본 등급"),
    VIP("V", "우수 등급");

    private final String code;
    private final String description;

    Grade(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() { return code; }
    public String getDescription() { return description; }
}
 

사용 예:

System.out.println(Grade.VIP.getCode()); // V

▶ 5. Enum에서 자주 쓰는 메서드

✔ name()

Enum 이름 반환

Grade.VIP.name(); // "VIP"

✔ ordinal()

선언된 순서 반환 (실무에서는 비추천)

Grade.BASIC.ordinal(); // 0

✔ valueOf()

문자열을 Enum 요소로 변환

Grade g = Grade.valueOf("BASIC");

✔ values()

모든 Enum 요소 배열 반환

for (Grade g : Grade.values()) {
    System.out.println(g);
}

▶ 6. Enum 실무 활용 예시

📌 상태값 처리

주문/결제/배송 등 상태값을 Enum으로 관리하면 오류를 대폭 줄일 수 있습니다.

📌 전략 패턴 간단 대체

Enum 내부에 abstract 메서드를 선언해 조건문을 최소화할 수 있습니다.

📌 DB 코드 매핑

코드값과 설명을 Enum으로 관리하면 유지보수가 편리합니다.


✔ 마무리

Java의 Enum은 단순 상수가 아니라
타입 안전성 + 가독성 + 유지보수성을 모두 제공하는 고급 기능입니다.
실무에서 상태값이나 코드값을 다룰 때 Enum을 올바르게 활용하면
코드 품질이 크게 향상되며 유지보수도 매우 쉬워집니다.