서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할때 사용하면 유용하다. 열거형은 갖는 값뿐만 아니라 타입도 관리하기 때문에 보다 논리적인 오류를 줄일 수 있다.
Enum은 static final이다
상속 불가능
그룹핑이 가능(Enum의 Enum으로 조합 가능)
Object를 계상받아 Object에서 제공하는 메소드를 활용할 수 있다. 또는 디폴트 메소드를 사용할 수 있다.
serializable, comparable이 가능하다.
메소드를 사용하여 기능 확장이 무궁무진하다(상수 + 관련 데이터의 연계 및 연산을 사용할 수 있다.).
비교 연산은 Int 상수와 성능이 비슷하다.
위와 같은 이유로 인해 코드 가독성이 좋으며, 형 안전성이 좋고, 기능이 강력하다.
가게 마다의 익일 배송, 당일 배송을 기준으로 수령 가능일 조회 api를 구현해야하는데 배송 타입이 칼럼값으로 들어가서 열거형을 활용해 보았다.
public enum Type {
FAST(0, "fast"), REGULAR(1, "regular");
private final String delivery_type;
private final int value;
Type(int value, String type) {
this.delivery_type = type;
this.value = value;
}
public String getDelivery_type() {
return this.delivery_type;
}
// 배송 타입 기준으로 수령가능한 가장 이른 날짜를 반환
public LocalDate getDeliveryDate(boolean beforeClosing, LocalDateTime now) {
int plusDay1 = beforeClosing ? 0 : 1;
...
LocalDate startDay = now.toLocalDate();
// 현재 요청 당일이 주말 혹은 공휴일 인지 확인
startDay = Holidays.weekendOrHoliday(startDay);
// 오늘 날짜기준으로 마감시간 전에 시켰으면 + 0, 마김시간 후에 시켰으면 + 1
startDay = LocalDate.from(startDay).plusDays(plusDay1);
...
return startDay;
}
}
주문 날짜를 기준으로 익일 배송이면 +1 당일배송이면 +0을 한다.
참고 자료:
https://ehdvudee.tistory.com/33
자바의 정석 2편