반응형
✅ 왜 Enum을 잘 써야 할까요?
Java의 enum은 단순히 상수를 나열하는 기능을 넘어서,
비즈니스 로직과 상태를 안전하게 표현할 수 있는 강력한 도구입니다.
하지만 많은 코드에서는 여전히 if (type == A)와 같은 방식으로만 사용되고 있습니다.
이번 글에서는 실무에서 Enum을 더 똑똑하게 사용하는 방법을 정리하였습니다.
✅ 1. 기본적인 Enum 선언
public enum OrderStatus {
READY, PAID, SHIPPED, CANCELED
}
가장 기본적인 상태 표현 방법입니다.
실무에서는 코드, 설명, DB 값 등 추가 정보가 필요한 경우가 많습니다.
✅ 2. 필드와 생성자 추가하기 (코드 + 설명 포함)
public enum OrderStatus {
READY("R", "결제대기"),
PAID("P", "결제완료"),
SHIPPED("S", "배송중"),
CANCELED("C", "취소됨");
private final String code;
private final String description;
OrderStatus(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() { return code; }
public String getDescription() { return description; }
}
OrderStatus.PAID.getCode()를 통해 "P"를,getDescription()을 통해 "결제완료"를 가져올 수 있습니다.
✅ 3. 코드로 역변환하는 fromCode 메서드
public static OrderStatus fromCode(String code) {
return Arrays.stream(OrderStatus.values())
.filter(v -> v.getCode().equals(code))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("Unknown code: " + code));
}
데이터베이스에서 읽어온 코드 값을 Enum으로 변환할 때 유용합니다.
✅ 4. Enum과 전략 패턴을 결합한 예시
public enum DiscountPolicy {
NONE {
public int apply(int amount) { return amount; }
},
FIXED {
public int apply(int amount) { return amount - 1000; }
},
RATE {
public int apply(int amount) { return (int)(amount * 0.9); }
};
public abstract int apply(int amount);
}
Enum을 추상 메서드와 함께 사용하면 상태와 행동을 함께 정의할 수 있습니다.
전략 패턴을 간단하게 구현하는 좋은 방식입니다.
❌ 자주 보이는 안티패턴
if (status.equals(OrderStatus.READY)) {
...
} else if (status.equals(OrderStatus.PAID)) {
...
}
상태가 많아질수록 if-else 문이 늘어나고 유지보수가 어려워집니다.Map<Enum, Function> 또는 Enum 내부에 로직을 위임하는 구조가 더 적절합니다.
✅ 정리: 언제 Enum을 사용해야 할까요?
| 상황 | 사용 권장 여부 | 설명 |
|---|---|---|
| 단순한 상태 표현 | ✅ 사용 권장 | 상수를 명확히 표현 가능 |
| 코드와 설명이 필요한 경우 | ✅ 사용 권장 | 필드와 생성자 확장 가능 |
| 상태별 로직 분기 | ✅ 사용 권장 | 추상 메서드로 다형성 구현 가능 |
| if/else 분기 처리 | ❌ 지양 | 유지보수 어려움, 구조적 개선 필요 |
마무리
Enum은 단순한 값 나열이 아닌,
"상태 + 의미 + 로직"을 함께 담을 수 있는 타입 안전한 구조체입니다.
잘 설계된 Enum은 복잡한 조건문을 줄이고,
서비스의 유효 상태를 안전하고 명확하게 정의할 수 있도록 도와줍니다.
이번 글을 통해 실무에서 enum을 어떻게 더 효과적으로 사용할 수 있을지 감을 잡으셨기를 바랍니다.
반응형
'IT > Java' 카테고리의 다른 글
| [Java] Enum을 JSON으로 직렬화할 때 주의할 점 – @JsonValue, @JsonCreator 활용법 (0) | 2025.06.01 |
|---|---|
| [Java] Record vs. Lombok – 무엇을 언제 써야 할까? (0) | 2025.05.31 |
| [Java] Optional이란?? (0) | 2025.05.23 |
| [Java] List Grouping 하는 방법 (0) | 2025.02.10 |
| Error와 Exception (0) | 2021.04.08 |
댓글