less than 1 minute read

  • ordinal() : 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환한다.

이 메소드를 열거 타입 상수와 연결된 정수값이 필요할 때 사용하고 싶겠지만…

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

위와 같이 ordinal()을 사용해 함수를 작성한다면,

  • 상수 선언 위치를 바꾸는 순간 numberOfMusicians 메서드가 오작동할 것이다.
  • 이미 사용중인 정수와 값이 같은 상수는 추가할 수 없다.
  • 중간에 사용하지 않는 값이 있더라도 비워둘 수 없기에 더미 값을 추가해야 한다.
  • 코드가 깔끔하지 않아지고, 쓰이지 않는 값이 많아질수록 실용성이 떨어진다.

열거 타입 상수에 연결된 값은 ordinal()으로 가져오지 말고, 인스턴스 필드를 두어 저장하자.

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; }
}

Leave a comment