Enum 클래스
열거형 클래스. Enum 클래스 내의 정의된 엘리먼트들은 public static final 형태로 사용된다.
그래서 같은 의미로 '연관된 상수들의 집합'으로 정의하기도 한다. (java 1.5 도입)
public enum Batting {
STRIKE, BALL, HIT;
private static final Random random = new Random();
public static Batting generate() {
int pick = random.nextInt(Batting.values().length);
return Batting.values()[pick];
}
}
예시 코드를 보면 어떤 야구 게임 내 도메인 모델을 구현한 도메인 객체(엔티티 클래스)에서 스트라이크, 볼, 안타를 표현하는 상태를 STRIKE, BALL, HIT 로 표현하는 enum 클래스를 정의함
이펙티브 자바에 따르면(item 34) 어떤 상태값을 표현할 때 int 상수 대신 열거타입을 사용하는 것을 권장함
enum 타입을 사용하면 컴파일 타임에서의 타입 안전성을 제공합니다. 생성자를 제공하지 않기 때문에 final이면서 인스턴스가 싱글톤임을 보장합니다. 또한 enum에서 제공하는 여러 메서드들을(valueOf(), toString(), ordinal(), compareTo()...) 이용할 수 있음.
이외에도 이펙티브 자바에서 enum 타입과 관련된 여러가지 권장 사항들이 있다. 참고하면 좋음
위 코드는 BattingStatus이라는 enum클래스와 Batting 이라는 도메인 객체로 분리해도 된다. (그렇게 더 잘게 분리하는 것이 더 좋아보인다)
참고
https://www.javainuse.com/java/enum
https://coding-factory.tistory.com/522
https://incheol-jung.gitbook.io/docs/q-and-a/java/enum
https://madplay.github.io/post/effectivejava-chapter6-enums-and-annotations
'Java > topic' 카테고리의 다른 글
모던 자바 인 액션 - Stream을 사용해보자 (0) | 2023.03.05 |
---|---|
모던 자바 인 액션 - 자바8 함수형 인터페이스 정리 (0) | 2023.02.28 |
printf() 지시자 정리 (0) | 2022.10.30 |
Java의 GC(가비지 컬렉션) (0) | 2022.10.30 |
Java의 Call by value(Pass by value), Swap 구현 방식 4가지 (0) | 2022.10.09 |