본문 바로가기
Java/topic

열거타입 enum을 사용하기 적절한 순간

by Ellery 2023. 3. 5.

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

https://techblog.woowahan.com/2527/