개발하는 두더지

[Effective Java 규칙31] enum ordinal 대신 객체 필드를 사용하라 본문

Java,Android

[Effective Java 규칙31] enum ordinal 대신 객체 필드를 사용하라

덜지 2018. 10. 12. 10:21

[Effective Java 규칙31] enum ordinal 대신 객체 필드를 사용하라 

Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.


Enum에는 enum 상수에 포함되는 정수를 구할 수 있는 메서드가 있다.

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

바로 oridinal() 이라는 메서드인데 더이상 enum이 변경되지않고 간단하게 사용할때는 문제는 딱히 없어보인다.

하지만 enum 상수 사이에 값을 추가하거나 이미 사용한 정수에 대응되는 새로운 enum 상수값을 사용할 수가 없는 단점이 있다. 

그래서 enum 상수에 해당되는 값을 ordinal() 을 사용하지말고 객체필드에 따로 저장해야 한다.


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

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


Comments