공부방/이펙티브 자바

ordinal 메서드 대신 인스턴스 필드를 사용하라(아이템 35) - Enum

EVO. 2023. 9. 23. 23:10

Enum에서 제공해주는 ordinal메서드는 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환한다. 이런 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal메서드를 사용하고 싶을 텐데 유지보수 하기 매우매우 끔찍하다

 

여기서 만약 새로운 상수를 모르고 앞에다 추가했다면 APPLE의 정수값이 0 => 1로 바뀌고 이미 ordinal를 이용하여 코드를 작성했다면 이곳저곳에서 컴파일은 정상적으로 작동하고 런타임때 오류를 범할 것 이다. Enum의 API문서를 보면 ordinal에 대해 이렇게 쓰여 있다. 

"대부분 프로그래머는 이 메서드를 쓸 일이 없다. 이 메서드는 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다."

따라서 이런 용도가 아니라면 ordinal메서드는 절대 사용하지 말자. 해결책은 간단하다. 열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고, 인스턴스 필드에 저장한다.

 

10,20,30으로 크게 띄어놓은 이유는 여유공간을 만들어 중간에 새로운 상수가 끼워넣어도 유지보수 편하게 하기 위함

 

출처: https://www.yes24.com/Product/Goods/65551284

 

이펙티브 자바 Effective Java 3/E - 예스24

자바 플랫폼 모범 사례 완벽 가이드 - Java 7, 8, 9 대응자바 6 출시 직후 출간된 『이펙티브 자바 2판』 이후로 자바는 커다란 변화를 겪었다. 그래서 졸트상에 빛나는 이 책도 자바 언어와 라이브

www.yes24.com