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

신명철·2022년 3월 6일
0

Effective Java

목록 보기
33/80

열거 타입의 상수의 순서를 반환하는 Ordinal 메서드는 많은 부작용을 낳는다.

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

만약 중간에 새로운 상수를 추가하거나 상수가 제거되면 ordinal로 반환되는 정숫값이 달라진다. 불필요한 더미 데이터를 넣거나 하는 방식 등으로 보완할 수 있겠지만 이는 불안정하고 실용성이 많이 떨어진다.

해결책은 간단하다. 열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고 인스턴스 필드에 저장하자.

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; }
}
profile
내 머릿속 지우개

0개의 댓글