핵심 정리

Enum은 상수가 정의되어 있는 위치를 반환하는 ordinal이라는 메서드를 제공한 다.

프로그래머가 직접 사용할 용도로 만들어진 메서드가 아니다.

Enum에 정의하는 상수들의 순서가 바뀔 수 있고, 상수를 삭제하거나, 추가할 수도 있다는 것을 주의해야 한다.

필드와 메서드를 정의하는 것이 좋다.

ordinal은 EnumSet과 EnumMap등 자바 내부에서 사용할 용도로 만들어진 것

**// Anti Pattern**
public enum Ensemble {
    SOLO, DUET, TRIO, QUARTET, QUINTET,
    SEXTET, SEPTET, OCTET, NONET, DECTET;

    public int numberOfMusicians() {
        return ordinal() + 1;
    }
}
// Best Pattern
// 인스턴스 필드에 정수 데이터를 저장하는 열거 타입 (222쪽)
// field, method, constructor 
public enum Ensemble {
    **SOLO(1[size]),** DUET(2), TRIO(3), QUARTET(4), QUINTET(5),
    SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8),
    NONET(9), DECTET(10), TRIPLE_QUARTET(12);

    private final int numberOfMusicians;

    Ensemble(int size) {
        this.numberOfMusicians = size;
    }

    public int numberOfMusicians() {
        return numberOfMusicians;
    }
}