열거

열거형 에서 Java

12개의 연습 문제

열거형 소개

_열거형_은 변수가 미리 정의된 상수들의 집합 중 하나의 값을 가질 수 있게 해 주는 특별한 데이터 타입이에요. 변수는 그 열거형에 미리 정의된 값 중 하나와 같아야 해요. 흔한 예로는 나침반 방향(NORTH, SOUTH, EAST, WEST 값)과 요일이 있어요.

상수이기 때문에 열거형 필드의 이름은 대문자로 써요.

열거형 정의하기

Java 프로그래밍 언어에서는 enum 키워드로 열거형을 정의해요. 예를 들어 요일 열거형은 이렇게 정의해요.

public enum DayOfWeek {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
}

고정된 상수 집합을 표현해야 할 때는 언제든 열거형을 사용해요. 태양계의 행성처럼 자연스럽게 열거형이 되는 것들도 여기에 포함되고, 컴파일 시점에 가능한 모든 값을 알고 있는 데이터 집합, 예를 들어 메뉴 선택지나 명령줄 플래그 같은 것도 포함돼요.

열거형 사용하기

다음은 위에서 정의한 DayOfWeek 열거형을 사용하는 방법을 보여 주는 코드예요.

public class Shop {
    public String getOpeningHours(DayOfWeek dayOfWeek) {
        switch (dayOfWeek) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                return "9am - 5pm";
            case SATURDAY:
                return "10am - 4pm"
            case SUNDAY:
                return "Closed.";
        }
    }
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"

메서드와 필드 추가하기

Java의 열거형은 다른 언어의 열거형보다 훨씬 강력해요. enum 선언은 _클래스_를 정의하는데, 이 클래스를 _열거형_이라고 해요. 열거형 클래스 본문에는 메서드와 다른 필드를 포함할 수 있어요.

public enum Rating {
    GREAT(5),
    GOOD(4),
    OK(3),
    BAD(2),
    TERRIBLE(1);

    private final int numberOfStars;

    Rating(int numberOfStars) {
        this.numberOfStars = numberOfStars;
    }

    public int getNumberOfStars() {
        return this.numberOfStars;
    }
}

Rating 열거형의 멤버에서 getNumberOfStars 메서드를 호출하면 이렇게 돼요.

Rating.GOOD.getNumberOfStars();
// => 4

내장 메서드

컴파일러는 열거형을 만들 때 몇 가지 특별한 메서드를 자동으로 추가해요.

예를 들어 열거형에는 선언된 순서대로 열거형의 모든 값을 담은 배열을 반환하는 정적 values 메서드가 있어요.

for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
    System.out.println(dayOfWeek.toString());
}

위 코드는 다음을 출력해요.

SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY

컴파일러는 이름을 기준으로 열거형 멤버를 반환하는 정적 valueOf 메서드도 추가해요.

DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

열거형 배우기