

Future Engineering
기술의 최전선을 기록합니다.
[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 상수 관리