떄로 ordinal 메서드가 반환하는 값을 배열 첨자로 이용하는 코드를 만날 때가 있다.
이제 화단에 심은 허브들을 나타내는 배열이 하나 있다고 해 보자. 이 허브들을 품좀별로 나열해야 한다. 그러러면 품졸별 집합을 세 개 만든 다음에, 허브 각각을 그 품종에 맞는 집합에 넣어야 한다. 일부 프로그래머들은 배열을 사용할 테지만 배열로 구현하면 많은 문제점이 있다.
배열은 제네릭과 호환되지 않으므로 배열을 쓰려면 무점검 형변환이 필요하며 깔끔하게 컴파일 되지 않는다. 거디가가 배열은 첨자가 무엇을 나타내는지 모르므로 라벨을 수동으로 달아줘야 하며, eunum이 ordinal값으로 배열 원소를 참조할 때 정확한 int값이 사용되도록 해야 한다는 것이다. int enum과 같은 수준의 형 안전성을 보장하지 않으므로 위험하다.
사실 enum 상수를 키로 사용할 목적으로 설계된 성능이 아주 우수한 Map있는데 바로 EnumMap이다.
요약
ordinal 값을 배열 첨자로 사용하는 것은 적절치 않다는 것. 대신 EnumMap을 사용하라
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[열거형과 어노테이션]작명 패턴 대신 어노테이션을 사용하라 (0) | 2017.05.04 |
---|---|
[열거형과 어노테이션]규칙34. 확장 가능한 enum을 만들어야 한다면 인터페이스를 이용하라 (0) | 2017.05.04 |
[열거형과 어노테이션]규칙32. 비트 필드대신 EnumSet을 사용하라 (0) | 2017.05.03 |
[열거형과 어노테이션]규칙31. ordinal 대신 객체 필드를 사용하라 (0) | 2017.05.03 |
[열겨형과 어노테이션]규칙30. int 상수 대신 enum을 사용하라 (0) | 2017.05.03 |