35. ordinal 메서드 대신 인스턴스 필드를 사용하라.

무한성장개발자·2025년 9월 25일

package me.whiteship.chapter06.item35.anti_pattern;

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

    public int numberOfMusicians() {
        return ordinal() + 1;
    }
}

ENUM은 순서의 기반대로 하는걸 알아야 되기 때문에 잘 모르고, ALPHABET 순서대로 하고 싶다라고 바꾸면 큰일이 나게 된다.

그래서 안티패턴이다.

필드와 메서드를 통해서 표현하는게 좋다.

package me.whiteship.chapter06.item35.best_practice;

// 인스턴스 필드에 정수 데이터를 저장하는 열거 타입 (222쪽)
public enum Ensemble {
    SOLO(1), 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;
    }
}

Ordinal을 사용하지 마라. 순서를 기대하지마라.

0개의 댓글