JAVA
enum
고민말고생각하는사람
2024. 5. 1. 01:12
enum이란?
특정 범위의 값을 지정해두고 제공하는 열거형 타입이다.
왜 사용하는가?
Spring 사용 시 타입 안정성 부족
- 값의 제한이 어려움 : 대/소문자 구분, 오타 등을 관리 하기 어렵다.
- 컴파일 오류 감지 불가 : 오타와 같은 상황이 발생해도 단순한 String 이므로 컴파일 단계에서 오류를 잡을 수 없다. -> 런타임 오류로 직결됨.
Comparable
Enum 에서 comaprable 인터페이스의 compareTo()를 사용할 땐 항상 주의해야 한다.
Object 와 같이 enum 타입은 Enum을 상속하는데, Enum에는 이미 comparable 을 구현한 메서드가 있다.
public final int compareTo(E o) {
Enum<?> other = o;
Enum<E> self = this;
if (self.getClass() != other.getClass() && // optimization
self.getDeclaringClass() != other.getDeclaringClass())
throw new ClassCastException();
return self.ordinal - other.ordinal;
}
return 부분을 보면 ordinal 을 피연산자로 사용하고 있는데,
ordinal 은 enum에 열거한 타입들의 순서이다.
작성 순서에 따라 ordinal 값이 바뀌는데, 작업하다 순서 바뀌거나, 중간에 추가되거나 하면 그 때마다 각 타입이 갖는 값(ordinal)들이 달라진다.
따라서, ordinal은 비교 대상으로 적합하지 않다.