반응형
으아ㅏㅏ
[책 규칙]
노란색 - 자세히 알아보고싶은 부분
초록색 - 핵심 개념 (블로그 정리시는 검은색으로!)
빨간색 - 무슨말인지 모르겠는 부분
[아이템 35] ordinal 메서드 대신 인스턴스 필드를 사용하라
ordinal 메서드?
- 전체 중에 해당 열거 객체가 몇번째 인지 알려준다! 순서는 0번부터 시작!
- 모든 열거 타입이 이를 제공한다!
열거 타입 상수와 연결된 정숫값이 필요하면 ordinal 메서드를 이용하려 한다! STOP!
// ordinal을 잘못 사용한 예
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET,
SEXTET, SETPTET, OCTET, NONET, DECTET;
public int numberOfMusicians() { return ordinal() + 1; }
}
왜 이렇게 쓰면 안될까??
- 상수 선언 순서를 바꾸는 순간 위 numberOfMusicians()는 제대로 동작하지 않는다!
- 이미 사용 중인 정수와 값이 같은 상수는 추가할 수 없다.
- 값을 중간에 비워둘 수 없다!
- dummy 상수를 맘ㄶ이 추가해야 하는 상황이 생길 수 잇으며 이는 코드를 지저분하게 만든다!
해결 방법은?
- 열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고 인스턴스 필드에 저장하자!
public enum Ensemble {
SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5),
SEXTET(6), SETPTET(7), OCTET(8), NONET(9), DECTET(10);
private final int numberOfMusicians;
Ensemble(int size) { this.numberOfMusicians = size }
public int numberOfMusicians() { return numberOfMusicians }
}
Enum의 AIP 문서를 보면 ordinal에 대해 이렇게 쓰여있다. 요약하자면 아래와 같은 용도가 아니면 가급적 ordinal 메서드는 절대 사용하지 말자!
대부분 프로그래머는 이 메서드를 쓸 일이 없다. 이 메서드는 EnumSet과 EnumMap 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다.
오늘은 간단히 정리해보았다!
읽어줘서 감사하다!
반응형
'public void static main > Book' 카테고리의 다른 글
[Effective Java] 아이템 45 (0) | 2023.02.07 |
---|---|
[Effective Java] 아이템 41 (0) | 2023.01.31 |
[Effective Java] 아이템 33 (이거 보지마세여! 다시 정리할꺼에요!) (0) | 2023.01.25 |
[Effective Java] 아이템 32 (1) | 2023.01.25 |
[Effective Java] 아이템 23 (0) | 2023.01.24 |
댓글