본문 바로가기
Language/Java

Java의 Enum 클래스와 그 장점(feat. 예시 코드)

by 시니성 2023. 9. 12.

Java에서, Enum은 "enumerated type"의 약자로, 주어진 집합 내에서만 값을 가질 수 있는 데이터 타입을 의미합니다. 일반적으로 Enum은 상수의 집합을 표현하는 데 사용됩니다. 하지만 Java에서의 Enum은 단순한 상수 묶음을 넘어서며, 다양한 특징과 장점을 갖추고 있습니다.

Enum의 주요 특징:

  1. 객체 지향적: Java의 Enum은 실질적으로 클래스입니다. 따라서 메서드, 생성자, 인스턴스 변수를 포함할 수 있습니다.
  2. 타입 안전: Enum은 미리 정의된 한정된 값들만을 가질 수 있기 때문에, 잘못된 값의 할당을 방지합니다.
  3. 싱글턴: Enum 상수는 해당 Enum 타입의 싱글턴 인스턴스입니다. 즉, 같은 타입의 다른 객체로 생성될 수 없습니다.

Enum의 장점:

  1. 코드의 명확성: 상수 이름을 통해 코드의 명확성이 향상됩니다. 예를 들어, Status.ACTIVE1이나 true보다 훨씬 더 가독성 있게 읽힙니다.
  2. 타입 안정성: Enum은 컴파일 타임에 상수 값을 알 수 있습니다. 따라서 실수로 잘못된 값을 할당하는 것을 방지합니다.
  3. 기능 추가: Enum은 메서드나 변수를 포함할 수 있어, 연관된 기능을 같이 제공할 수 있습니다.

BoardCategory Enum 클래스 예제:

public enum BoardCategory {
    // 각 게시글 카테고리를 Enum 상수로 정의
    NEWS("뉴스"),
    TIPS("팁"),
    QNA("질문/답변"),
    REVIEW("리뷰");

    // 각 카테고리의 표시 이름
    private final String displayName;

    // Enum 생성자
    BoardCategory(String displayName) {
        this.displayName = displayName;
    }

    // displayName을 반환하는 메서드
    public String getDisplayName() {
        return displayName;
    }
}

Enum 활용 예제:

public class Board {
    // 게시글에는 카테고리 정보가 포함되어 있습니다.
    private BoardCategory category;
    private String title;

    public Board(BoardCategory category, String title) {
        this.category = category;
        this.title = title;
    }

    @Override
    public String toString() {
        return "Category: " + category.getDisplayName() + ", Title: " + title;
    }

    public static void main(String[] args) {
        // Enum을 활용한 게시글 객체 생성 예제
        //Java의 Enum 상수는 고유한 객체 인스턴스로서 정적(static)으로 생성됩니다. 
        //따라서 별도의 객체 인스턴스를 생성할 필요가 없이 바로 사용할 수 있습니다.
        //그래서 BoardCategory.NEWS와 같이 클래스 이름을 이용하여 직접 접근할 수 있습니다.
        Board newsBoard = new Board(BoardCategory.NEWS, "Java 20 Released!");
        System.out.println(newsBoard);
    }
}

이 예제에서 BoardCategory는 게시글의 카테고리를 나타내는 Enum 클래스입니다. 각 카테고리는 displayName을 포함하며, 이는 getDisplayName() 메서드를 통해 얻을 수 있습니다. Board 클래스에서는 BoardCategory Enum을 활용하여 게시글의 카테고리를 설정하고 출력하는 예제를 제공합니다.


Enum은 한정된 값 집합을 안전하게, 그리고 명확하게 표현할 수 있는 매우 강력한 도구입니다. 이를 통해 코드의 안정성과 가독성을 높일 수 있습니다.