Java

Java 기초정리 - enum(열거형)

chungmani 2026. 6. 17. 21:01

enum이란?

enum(열거형)미리 정해진 값들만 사용할 수 있도록 만들어주는 자료형이다.

선택지가 이미 정해져 있는 타입이라고 생각하면 됨.

 

예를 들어 주문 상태는 아래 네 가지 중 하나만 존재한다.

  • 주문 완료
  • 배송 준비
  • 배송 중
  • 배송 완료

이처럼 가능한 값이 정해져 있을 때 enum을 사용하면 된다.


enum이 필요한 이유

만약 String으로 상태를 관리한다면

String status = "배송중";
 

 

다음과 같은 문제들이 발생할 수 있다.

status = "배송중";
status = "배송 중";   // 띄어쓰기
status = "배숑중";    // 오타
status = "사과";      // 엉뚱한 값
 

모두 컴파일 오류 없이 저장된다.

즉, 아무 문자열이나 저장할 수 있기 때문에 실수가 발생하기 쉽다.


enum 사용하기

public enum OrderStatus {
    ORDERED,
    PREPARING,
    SHIPPING,
    COMPLETED
}
 

사용할 때는

OrderStatus status = OrderStatus.SHIPPING;

 

status = OrderStatus.COMPLETED;   // 사용 가능
status = "배송중"; // 컴파일 오류, 사용불가
status = "사과";  // 컴파일 오류, 사용 불가
 

enum을 사용하는 이유

1. 오타를 방지할 수 있다.

OrderStatus.SHIPPING
 

처럼 사용하기 때문에

OrderStatus.SHIPPNG
 

처럼 오타를 내면 컴파일 단계에서 바로 알려준다.

 

2. 코드가 더 안전하다.

String은 아무 값이나 저장할 수 있지만,

enum은 정해진 값만 사용할 수 있다.

예상하지 못한 데이터가 들어오는 것을 막아준다.

 

3. 가독성이 좋아진다.

if (status == OrderStatus.SHIPPING)
 

이렇게 작성하면

"배송 중인지 확인하는 코드"

라는 것을 바로 알 수 있다.


enum은 언제 사용할까?

다음처럼 선택지가 정해져 있는 데이터에 많이 사용한다.

  • 회원 등급
  • 주문 상태
  • 결제 방식
  • 로그인 방식
  • 요일
  • 계절
  • 게임 직업
  • 방향(상, 하, 좌, 우)

enum도 클래스이다.

enum은 단순히 상수만 저장하는 것이 아니라,

특별한 클래스이다.

그래서 변수, 생성자, 메서드도 가질 수 있다.

public enum Season {

    SPRING("봄"),
    SUMMER("여름"),
    AUTUMN("가을"),
    WINTER("겨울");

    private final String korean;

    Season(String korean) {
        this.korean = korean;
    }

    public String getKorean() {
        return korean;
    }
}
 

 

사용

System.out.println(Season.SPRING.getKorean());
 

출력

 

자주 사용하는 메서드

values()

모든 enum 값을 배열로 반환한다.

for (Season season : Season.values()) {
    System.out.println(season);
}
 

name()

enum 이름을 문자열(String)로 반환한다.

System.out.println(Season.SPRING.name());
 

출력

SPRING
 

valueOf()

문자열을 enum으로 변환한다.

Season season = Season.valueOf("SPRING");
 

enum은 어디에 만들까?

보통은 별도의 파일로 만들어 사용한다.

Member.java
Order.java
Product.java

OrderStatus.java   ← enum
Grade.java         ← enum
Role.java          ← enum
 

필요한 클래스에서 가져다 사용하면 된다.

public class Order {

    private OrderStatus status;

}