Java enum

kyw·2025년 10월 9일

Java

목록 보기
7/13

Java enum (열거형) 완전 정리 + 코드 리뷰

enum이란?

enum(열거형)은 상수(constant) 들을 하나의 그룹으로 묶어 관리하기 위한 특별한 클래스입니다.
final static 상수를 일일이 정의하는 대신, 타입 안전한 상수 집합을 만들 수 있습니다.


enum의 주요 특징

특징설명
타입 안전성허용된 상수 값만 사용할 수 있음 (오타 방지)
코드 가독성 향상상수를 그룹화하여 의미 있는 코드 작성 가능
내부 필드와 메서드 포함 가능단순 상수 외에 부가 정보(예: 설명, 한글명 등) 추가 가능
switch문과 함께 자주 사용분기 처리 시 직관적 사용 가능

기본 문법

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, FRIDAY
}
  • 각 상수는 Day 타입의 객체로 취급됩니다.

  • MONDAY → Day.MONDAY 형태로 접근합니다

코드 예시

Day.java

package com.mult6.e_enum;

public enum Day {
    MONDAY("월요일"),
    TUESDAY("화요일"),
    WEDNESDAY("수요일"),
    FRIDAY("금요일");

    private final String koreanDay;

    // 생성자는 private 형태로 자동 설정됨
    Day(String koreanDay) {
        this.koreanDay = koreanDay;
    }

    public String getKoreanDay() {
        return koreanDay;
    }
}

Run.java

package com.mult6.e_enum;

public class Run {
    public static void main(String[] args) {
        Day today = Day.MONDAY;

        // switch문 활용
        switch (today) {
            case MONDAY:
                System.out.println("월요일입니다!");
                break;
            case FRIDAY:
                System.out.println("금요일입니다!");
                break;
        }

        // 모든 enum 상수 출력
        for (Day day : Day.values()) {
            System.out.println(day);
        }

        // 문자열을 enum으로 변환
        Day day = Day.valueOf("MONDAY");
        System.out.println(day);

        // 한글 요일 출력
        System.out.println(today.getKoreanDay());

        // enum의 기본 제공 메서드
        System.out.println(today.name());     // "MONDAY"
        System.out.println(today.ordinal());  // 0 (순서 인덱스)
    }
}



실무에서 자주 쓰이는 enum 활용 예시

1. 상태(Status) 관리용

public enum OrderStatus {
    PENDING("대기 중"),
    SHIPPED("배송 중"),
    DELIVERED("배송 완료"),
    CANCELED("취소됨");

    private final String label;

    OrderStatus(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

장점

  • if문 대신 switch(OrderStatus)로 간결하게 관리
  • DB 저장 시 문자열/코드 매핑이 쉬움

2. 권한(Role) 관리용

public enum Role {
    USER("일반회원"),
    ADMIN("관리자"),
    MANAGER("매니저");

    private final String description;

    Role(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

실무 활용 예

  • 로그인 사용자 권한 체크
if (user.getRole() == Role.ADMIN) {
    // 관리자만 접근 가능
}
```'

3. 요일, 월, 국가 코드 등 고정된 목록

public enum Country {
    KOREA("KR"),
    USA("US"),
    JAPAN("JP");
    
    private final String code;
    Country(String code) { this.code = code; }
    public String getCode() { return code; }
}

코드 상에서 상수로 관리하면

  • 오타 방지
  • IDE 자동완성 지원
  • 유지보수 용이

요약

  • enum은 단순한 상수보다 안전하고 직관적인 상수 관리 도구

  • 메서드와 필드를 함께 사용할 수 있어 클래스 수준의 확장성

  • switch문, valueOf(), values() 등과 함께 가장 자주 쓰이는 패턴

" enum은 상수를 객체처럼 다룰 수 있는, 자바의 스마트한 상수 집합이다.”

profile
作心百日

0개의 댓글