티스토리 뷰

* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다.

* (영어) ordinal: 서수(first, second...) <-> cardinal: 기수(1, 2, 3...)

31. ordinal 대신 객체 필드를 사용하라

상당수의 enum 상수는 자연스럽게 int값 하나에 대응된다. 모든 enum에는 ordinal이라는 메서드가 있는데, enum 자료형 안에서 enum 상수의 위치를 나타내는 정수값을 반환한다.

- 유지보수 관점에서 매우 끔찍한 결과를 불러올 수 있다. 가급적 절대 사용하면 안된다.

- 상수의 순서를 변경하거나, 중간에 끼워넣기라도 하게 되면 순서를 기반으로 작성된 메서드에 모두 문제가 발생한다.

 

정 위치값이 필요하다면 ordinal을 사용하는 대신 상수 객체 필드에 별도로 정의해서 사용하는 것이 바람직하다.

public enum Ensemble {
    SOLO(1), DUET(2), TRIO(3), QUARTET(4),
    QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8);

    private final int numberOfMusicians;

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

    public int numberOfMusicians() {
        return numberOfMusicians;
    }
}

 

(결론)

ordinal 메서드는 그냥 없는 것으로 생각하자. 써서 좋을게 없다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함