Enum에서 제공해주는 ordinal메서드는 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환한다. 이런 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal메서드를 사용하고 싶을 텐데 유지보수 하기 매우매우 끔찍하다
여기서 만약 새로운 상수를 모르고 앞에다 추가했다면 APPLE의 정수값이 0 => 1로 바뀌고 이미 ordinal를 이용하여 코드를 작성했다면 이곳저곳에서 컴파일은 정상적으로 작동하고 런타임때 오류를 범할 것 이다. Enum의 API문서를 보면 ordinal에 대해 이렇게 쓰여 있다.
"대부분 프로그래머는 이 메서드를 쓸 일이 없다. 이 메서드는 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다."
따라서 이런 용도가 아니라면 ordinal메서드는 절대 사용하지 말자. 해결책은 간단하다. 열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고, 인스턴스 필드에 저장한다.
출처: https://www.yes24.com/Product/Goods/65551284
'공부방 > 이펙티브 자바' 카테고리의 다른 글
int 상수 대신 열거 타입을 사용해라(아이템 34) - Enum (0) | 2023.09.23 |
---|