Header Banner
GG Logo

Future Engineering

기술의 최전선을 기록합니다.

기술 자료/BackEnd/[Java] Enum, 아직도 상수로만 사용하시나요? (Enum 제대로 알고 쓰기)

[Java] Enum, 아직도 상수로만 사용하시나요? (Enum 제대로 알고 쓰기)

BackEnd약 1개월 전

Enum은 사실 백엔드 개발에만 국한된 개념이 아닙니다. 프론트엔드에서도 TypeScript의 enum이나 JavaScript의 Object.freeze()를 활용한 상수 관리 등 비슷한 패턴을 많이 사용하죠.

하지만 이번 글은 Java 학습 과정에서 정리한 내용이라 BackEnd Category에 작성합니다.

// 주문 상태를 숫자로 표현
public class Order {
    public static final int PENDING = 1;    // 대기중
    public static final int SHIPPED = 2;    // 배송중
    public static final int DELIVERED = 3;  // 배송완료
    public static final int CANCELLED = 4;  // 취소됨
    
    private int status;
    
    public void setStatus(int status) {
        this.status = status;
    }
}

하지만 이렇게 설정하면 응답 상태를 확실하게 파악할 수 없습니다.

문제를 해결하기 위해서 사용하는게 Enum입니다.

 

Enum이란? 

Enum은 "열거형(Enumeration)"의 줄임말로, 서로 관련있는 상수들을 하나로 묶어놓은 것입니다.

위의 주문 상태를 Enum으로 바꾸면

public enum OrderStatus {
    PENDING,    // 대기중
    SHIPPED,    // 배송중  
    DELIVERED,  // 배송완료
    CANCELLED   // 취소됨
}
Order order = new Order();
order.setStatus(OrderStatus.PENDING);  // 깔끔!

if (order.getStatus() == OrderStatus.PENDING) {
    System.out.println("주문이 대기 상태입니다.");
}

확실하게 파악할 수 있습니다.

이름 뿐 아니라 각 상태별 추가 정보를 담아줄 수 있습니다.

 

Java의 Enum은 기본적으로 대소문자를 정확히 구분하기 때문에 대문자 통일을 권장드립니다.

 

Enum 메소드

1) values(): 모든 상주 가져오기

// 모든 주문 상태 출력하기
for (OrderStatus status : OrderStatus.values()) {
    System.out.println(status.getKoreanName());
}

2) valueOf(): 문자열로 Enum 찾기

OrderStatus status = OrderStatus.valueOf("PENDING");  // OK
OrderStatus status2 = OrderStatus.valueOf("pending"); // 에러! (대소문자 구분)

3) name(): 이름 가져오기

OrderStatus status = OrderStatus.PENDING;
System.out.println(status.name());  // "PENDING"

 

Enum이 처음에는 불편하지만, 한 번 익숙해지면 편합니다.

숫자나 문자열 상수 대신 Enum을 사용하면 코드 실수를 줄일 수 있고, 코드 가독성이 좋아집니다.

키워드

Java EnumEnum 사용법Spring EnumJava 상수 관리