IT/Programming / / 2023. 4. 27. 09:25

<Effective Java> RULE 31 ordinal 대신 객체 필드를 사용하라

반응형

 

상당수의 enum 상수는 자연스럽게 int 값 하나에 대응된다.

모든 enum에는 ordinal이란 메서드가 있는데 enum자료형 안에서 상수의 위치를 나타내는 정수값을 반환한다.

// 잘못된 예
public enum Ensemble{
    SOLO, DUET, TRIO;
    
    public int numberOfMusicians() { return ordinal() + 1; }
}
// 상수 순서를 변경하는 순간 깨지게 된다!
 

enum 상수에 연계되는 값을 ordinal을 사용해 표현하지 말아야 한다.

그런 값이 필요하다면 그 대신 객체 필드에 저장해야 한다.

public enum Ensemble{
    SOLO(1), DUET(2), TRIO(3);
    
    private final int numberOfMusicians;
    Ensemble(int size) { this.numberOfMusicians = size; }
    public int numberOfMusicians() { return numberOfMusicians; }
 

자바의 Enum 명세를 보면 ordinal에 대해 이렇게 설명되어있다.

· 대부분의 프로그래머는 이 메서드를 사용할 일이 별로 없다. EnumSet, EnumMap처럼 일반적인 용도의 enum기반 자료구조에서 사용할 목적으로 설계한 메서드다.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유