본문 바로가기

JAVA

[Java] Enum

 

 


 

 

개요

enum은 기존 방식의 한계를 보완하고자 만들어졌다. 기존 방식과 enum은 얼마나 다른지 확인해보자.

 

 


 

 

enum 탄생 배경

Java의 enum은 서로 관련 있는 상수들의 집합을 정의할 때 사용하는 특수한 데이터 타입이다. enum을 사용 하기 전에는 String을 이용하였다. 하지만 이 기존 방식은 타입 안전성 부족 등 여러 단점이 있다. 이러한 한계를 보완하기 위해 enum을 사용하게 되었다.

 

 


 

 

문자열 방식 vs enum 방식 비교

옛날 방식 : 문자열 방식

public int Day(String day) {
    if(day.equals(MONDAY)) System.out.println("월요일");
    else if (day.equals(TUESDAY)) System.out.println("화요일");
    //...
    else System.out.println("잘못된 요일입니다.");
}

단점 : 

  • 매개 변수를 넘겨줄 때, 오타가 발생하기 쉽다. (ex. monnday → 월요일 출력을 기대했지만, "잘못된 요일"이라고 출력)
  • 타입 안전성 부족 (String이라면 어떤 값이든 들어갈 수 있다. 컴파일 오류로 잡히지 않아 디버깅이 어렵다.)

 

enum 방식

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY
}

 

if (Day.MONDAY) System.out.println("월요일");
else if (Day.TUESDAY) System.out.println("화요일");
// ...

 

장점:

  • enum은 static이므로, 어디서든 그냥 사용할 수 있다.
  • 값을 enum의 Type으로 제한해주어 타입 안전성을 제공한다. (enum 값 외에는 들어갈 수 없다. 컴파일러가 잡아준다.)
  • 관련 메서드나 필드를 함께 정의할 수 있다.

이처럼 enum은 단순한 숫자 집합을 넘어서, 객체지향적인 표현이 가능한 구조이다.

 

 


 

Java enum의 주요 특징

타입 안전성(Type Safety)

enum은 정의된 값 외에는 사용할 수 없기 때문에, 잘못된 값이 들어가는 것을 원천적으로 막는다.

 

내장 메서드

  • values() : 모든 enum 값을 배열로 반환한다.
  • valueOf(String name) : 이름에 해당하는 enum 반환한다.
  • name() : 열거형 상수의 이름 반환한다.
  • ordinal() : 선언된 순서(0부터 시작) 반환한다.

 

switch 문과 함께 사용 가능

switch(day) {
    case MONDAY:
        System.out.println("월요일입니다");
        break;
}

 

 

타입 안전 열거형 패턴이 적용된 클래스

타입 안전 열거형 패턴을 발전시켜 enum이 탄생한 것이다.

public class Day {
    public static final Day MONDAY = new Day();
    public static final Day TURESDAY = new Day();
    // ...
    
    private Week() {}
}
  • private 생성자를 사용해서 외부에서 `Day` 클래스를 생성하지 못하도록 하였다.
  • `Day` 클래스 내부에서만 `Day` 인스턴스를 생성할 수 있다.
  • 따라서 `Day` 클래스 내부에 정의한 상수만 사용해야 한다. 그렇지 않으면 컴파일 오류가 발생한다.

 


 

 

enum 활용 예제

필드와 생성자 사용 예시

public enum Grade {
    BASIC(0), SILVER(1000), GOLD(5000);

    private final int point;

    Grade(int point) {
        this.point = point;
    }

    public int getPoint() {
        return point;
    }
}
  • 생성자를 통해 값을 고유의 값을 할당해줄 수 있다.

 


 

 

정리 : enum의 이점

Java의 enum은 단순히 상수를 나열하는 기능을 넘어, 안정성, 가독성, 확장성, 객체지향적 설계 등 다양한 장점을 제공합니다.
기존의 상수 정의 방식보다 훨씬 강력하고 실용적인 도구로, 자바 개발에서 자주 활용되는 요소 중 하나입니다.
enum을 적극적으로 활용하면 더 깔끔하고 견고한 코드를 작성할 수 있습니다.

 

'JAVA' 카테고리의 다른 글

[Java] Optional  (0) 2025.05.04
[Java] 동등성과 동일성  (0) 2025.05.04
[Java] Lv_4 도서관 프로젝트  (0) 2025.05.02
[Java] Lv_3 도서관 프로젝트  (0) 2025.05.02
[Java] Lv_2 도서관 프로젝트  (0) 2025.05.01