본문 바로가기

Java

[Java] Enum

Enum이란?

자바의 enum은 서로 연관된 상수들을 하나의 타입으로 묶을 수 있는 클래스를 말한다.

 

Enum 선언

typedef enum 열거형이름 {
    값1, 값2, 값3 ...
}

// 예시
enum Direction {
    EAST, WEST, SOUTH, NORTH
}

 

Enum 참조

열거타입 변수 = 열거타입.열거상수;

// 예시
Direction dir1 = Direction.EAST;
Direction dir2 = Direction.SOUTH;

 

Enum의 주요 메서드

name() 상수 이름(문자열) 반환 dir1.name() → "EAST"
ordinal() 열거 상수의 순서 (0부터 시작) dir2.ordinal() → 2
valueOf(String name) 문자열을 enum 상수로 변환 Direction.valueOf("WEST") → Direction.WEST
values() 모든 상수를 배열로 반환 Direction[] dirs = Direction.values();

 

Enum 사용 예시

enum Direction {
    EAST, WEST, SOUTH, NORTH
}

public static void main(String[] args) {
    Direction dir = Direction.EAST;

    switch (dir) {
        case EAST:
            System.out.println("동쪽입니다.");
            break;
        case WEST:
            System.out.println("서쪽입니다.");
            break;
        case SOUTH:
            System.out.println("남쪽입니다.");
            break;
        case NORTH:
            System.out.println("북쪽입니다.");
            break;
    }
}

 

switch-case문에서 enum 상수를 사용할 수 있다. 이유는 enum 상수는 컴파일 시점에 고정된 상수이기 때문이다.

 

Enum의 장점

  • 가독성 향상: 의미 있는 이름으로 값 표현 가능 (EAST, WEST 등)
  • 타입 안정성: 잘못된 값 대입 시 컴파일 에러 발생
  • switch문 사용 가능: enum 상수는 컴파일 시점 상수라 case에 사용 가능
  • 확장성: 필드, 생성자, 메서드 정의 가능 → 속성 추가에 유리

 

Enum에 속성 부여

public enum Direction {
    EAST("동쪽"),
    WEST("서쪽"),
    SOUTH("남쪽"),
    NORTH("북쪽");

    private final String label;

    Direction(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

 

위와 같이 enum 상수에 속성을 부여해 두면, 각 상수마다 고유의 값을 저장할 수 있다. 이 속성은 getLabel() 메서드를 통해 참조할 수 있다.

public class DirectionExample {
    public static void main(String[] args) {
        Direction dir = Direction.EAST;
        
        System.out.println("선택한 방향: " + dir.getLabel()); //출력: "선택한 방향: 동쪽"
    }
}

'Java' 카테고리의 다른 글

[Java] 컬렉션 / 제네릭  (0) 2025.04.30
[Java] 명명 규칙  (0) 2025.04.23
[Java] Optional  (0) 2025.04.18
[Java] 예외와 예외 처리  (1) 2025.04.17
[Java] JVM 메모리  (0) 2025.04.17