준비하는 대학생

[JAVA] enum (열거형) 본문

Programming/JAVA

[JAVA] enum (열거형)

Bangii 2023. 4. 15. 21:42

Enum이란?

Enum은 열거형이라고도 불리며, 여러 개의 상수 값을 갖는 특별한 데이터 타입입니다. Enum을 사용하면 코드의 가독성을 높이고, 값의 범위를 제한하여 오류를 줄일 수 있습니다.

예를 들어, 사계절을 나타내는 Season이라는 Enum을 생성한다고 가정해 봅시다. 일반적인 상수 정의를 사용하는 경우 다음과 같이 작성할 수 있습니다.

public static final int SPRING = 0;
public static final int SUMMER = 1;
public static final int FALL = 2;
public static final int WINTER = 3;

그러나 이 방법은 여러 가지 문제점이 있습니다. 예를 들어, 정수 타입이기 때문에 0~3 이외의 값도 할당될 수 있는 위험이 있습니다. 이런 문제를 해결하기 위해 Enum을 사용해보겠습니다.

Enum 사용하기

Enum을 사용하려면 먼저 Enum 타입을 정의해야 합니다. Enum 타입은 'enum' 키워드를 사용하여 선언하며, 각 상수 값을 콤마로 구분합니다. 예를 들어, Season Enum은 다음과 같이 작성할 수 있습니다.

 
public enum Season {
    SPRING, SUMMER, FALL, WINTER
}

enum을 사용하면, Season 변수에는 오직 SPRING, SUMMER, FALL, WINTER 중 하나의 값만 할당될 수 있습니다. 이를 통해 값의 범위를 제한하고, 코드의 안전성을 높일 수 있습니다

Season currentSeason = Season.SPRING;

enum 상수는 대문자로 작성하는 것이 일반적인 관례입니다. 또한 Enum은 메서드와 필드도 가질 수 있으며, 생성자를 통해 초기화할 수도 있습니다.

public enum Season {
    SPRING("봄"),
    SUMMER("여름"),
    FALL("가을"),
    WINTER("겨울");

    private String koreanName;

    Season(String koreanName) {
        this.koreanName = koreanName;
    }

    public String getKoreanName() {
        return koreanName;
    }
}

정리: Enum과 스위치문

Enum과 스위치문을 함께 사용하면 코드의 가독성과 유지 보수성을 크게 높일 수 있습니다. 예를 들어, 계절에 따른 날씨를 설명하는 메서드를 작성한다고 가정해봅시다.

public static String getWeatherDescription(Season season) {
    switch (season) {
        case SPRING:
            return "따뜻한 햇살과 부스스한 꽃향기 가득한 계절";
        case SUMMER:
            return "폭염에 무더운 날씨, 여름철 시원한 물놀이 시즌";
        case FALL:
            return "서늘한 바람과 함께 아름다운 단풍이 펼쳐지는 계절";
        case WINTER:
            return "추운 날씨에 눈이 내리며 겨울 왕국이 펼쳐지는 계절";
        default:
            throw new IllegalArgumentException("잘못된 계절이 전달되었습니다.");
    }
}

Enum과 스위치문을 사용하면, 코드를 이해하기 쉽고 수정하기도 간편합니다. 또한 컴파일러가 잘못된 값이 할당되지 않도록 도와줍니다.

Enum의 메서드

Enum은 기본적으로 몇 가지 메서드를 제공합니다. 다음은 몇 가지 유용한 Enum 메서드입니다.

1. values(): Enum의 모든 상수 값을 반환합니다. 이 메서드를 사용하면 Enum 상수를 반복하거나 특정 조건에 따라 필터링할 수 있습니다.

for (Season season : Season.values()) {
    System.out.println(season);
}

2. valueOf(String name): 주어진 문자열과 일치하는 Enum 상수를 반환합니다. 이 메서드를 사용하면 문자열을 Enum 상수로 변환할 수 있습니다.

String input = "SUMMER";
Season season = Season.valueOf(input);
System.out.println(season); // 출력: SUMMER

주의: valueOf() 메서드는 대소문자를 구분합니다. 만약 일치하는 상수가 없는 경우 IllegalArgumentException을 던집니다.

3. ordinal(): Enum 상수의 순서를 반환합니다. Enum 상수는 0부터 시작하는 인덱스를 가지며, 이 인덱스는 ordinal() 메서드를 통해 조회할 수 있습니다.

System.out.println(Season.SPRING.ordinal()); // 출력: 0
System.out.println(Season.SUMMER.ordinal()); // 출력: 1

이상으로 Java의 Enum에 대해 살펴보았습니다. Enum을 활용하면 코드의 안전성과 가독성을 높이는 데 큰 도움이 됩니다. 

요약

이 포스트에서는 Java의 Enum에 대해 알아보았습니다. Enum은 다음과 같은 이점을 제공합니다.

  1. 코드의 가독성과 안전성을 높입니다.
  2. 상수 값을 제한하여 범위를 명확히 할 수 있습니다.
  3. Enum과 스위치문을 함께 사용하여 간결하고 명확한 코드를 작성할 수 있습니다.
  4. Enum은 필드, 메서드, 생성자를 가질 수 있어 더 복잡한 상수 관리가 가능합니다.
  5. 기본적으로 제공되는 메서드로 인해 Enum 상수를 쉽게 조작할 수 있습니다.

감사합니다.

'Programming > JAVA' 카테고리의 다른 글

[JAVA] 람다 표현식  (0) 2023.04.17
Comments