ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Item 35: Use instance fields instead of ordinals
    독서/Effective Java 2022. 1. 8. 16:26

    ordiinal 메서드 대신 인스턴스 필드를 사용하라

     

    대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응되며, 그 정숫값을 반환하기 위해 열거 타입에서는 해당 상수가 몇 번째인지를 반환하는 ordinal이라는 메서드를 제공한다.

    public enum Ensemble {
      SOLO, DUET, TRIO, QUARTET, QUINTET,
      SEXTET, SEPTET, OCTET, NONET, DECTET;
    
      public int numberOfMusicians() {
        return ordinal() + 1;
      }
    }

    중간에 하나씩 같은 수의 열거 타입 상수가 추가된다 해도, 이에 따른 정숫값 정리를 하는 것이 불가능하다. 그리고 중간에 수를 비워두는 행위 또한 불가능하다(순서를 반환하는 것이기 때문)

    또한, 중간에 값이 변경되는 경우 순서로 이루어져 있기 때문에 변경의 범위가 상당히 많아지게 된다.

     

    변경 방법

    인스턴스 필드를 생성해 저장하자.

    Ex) octet(8중주)가 존재하는 경우

    public enum Ensemble {
      SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5),
      SEXTET(6), SEPTET(7), OCTET(8), NONET(9), DECTET(10);
    
      private final int numberOfMusicians;
    
      Ensemble(int size){
        this.numberOfMusicians = size;
      }
      public int numberOfMusicians() {
        return numberOfMusicians;
      }
    }

    ordinal은 다음과 같은 목적 때문에 존재한다.

    * EnumSet, EnumMap과 같은 열거 타입 기반의 범용 자료 구조에 사용하기 위한 목적

    * 이 목적 외에는 사용하면 안된다.

    댓글

Designed by Tistory.