코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java_Loop Through an Enum

자바에서 Enum 반복문 사용 (Java Loop Through an Enum)

자바에서 **Enum(열거형)**은 상수 집합을 정의하는 데 사용됩니다. Enum은 일정한 범위의 값들을 정의할 때 매우 유용하며, 각 값은 고유한 열거형 상수로 취급됩니다. 자바에서는 for-each 반복문을 사용하여 **Enum**의 모든 상수를 순회할 수 있습니다. 또한, Enum.values() 메서드를 사용하여 Enum의 모든 요소를 배열로 가져와 반복문을 통해 처리할 수 있습니다.

1. 기본 Enum 정의

먼저, 간단한 Enum을 정의해보겠습니다. 아래의 예제에서는 요일을 나타내는 **Day**라는 Enum을 정의합니다.

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

Enum에는 요일을 나타내는 7개의 상수(MONDAY부터 SUNDAY까지)가 정의되어 있습니다.

2. for-each 반복문을 사용한 Enum 순회

자바의 for-each 반복문을 사용하여 Enum의 모든 상수를 순회할 수 있습니다. 이를 위해 Enum.values() 메서드를 사용하면 Enum의 모든 상수를 배열로 반환받을 수 있습니다.

2.1 for-each를 사용한 Enum 순회 예제

public class Main {
    public static void main(String[] args) {
        // for-each 반복문을 사용하여 Enum의 모든 상수 순회
        for (Day day : Day.values()) {
            System.out.println(day);
        }
    }
}

설명:

  • *Day.values()*는 Day Enum의 모든 상수를 배열로 반환합니다.
  • for-each 반복문을 사용해 배열의 각 요소를 순차적으로 출력합니다.

출력:

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

3. Enum의 속성을 함께 사용하는 경우

Enum은 단순히 상수 값을 갖는 것이 아니라, 속성을 함께 정의할 수 있습니다. 예를 들어, 요일에 대한 휴일 여부요일 번호와 같은 속성을 추가할 수 있습니다.

3.1 속성을 가진 Enum 정의

public enum Day {
    MONDAY(1, false),
    TUESDAY(2, false),
    WEDNESDAY(3, false),
    THURSDAY(4, false),
    FRIDAY(5, false),
    SATURDAY(6, true),
    SUNDAY(7, true);

    // 필드 정의
    private final int dayNumber;
    private final boolean isHoliday;

    // 생성자
    Day(int dayNumber, boolean isHoliday) {
        this.dayNumber = dayNumber;
        this.isHoliday = isHoliday;
    }

    // Getter 메서드
    public int getDayNumber() {
        return dayNumber;
    }

    public boolean isHoliday() {
        return isHoliday;
    }
}

설명:

  • Enum 상수는 요일 번호휴일 여부를 속성으로 가집니다.
  • dayNumber: 각 요일의 번호를 나타냅니다.
  • isHoliday: 그 요일이 휴일인지를 나타내는 boolean 값입니다.
  • 생성자를 통해 상수에 해당하는 속성 값을 설정할 수 있습니다.

3.2 속성을 가진 Enum 순회 예제

이제 for-each 반복문을 사용해 각 요일의 속성을 출력할 수 있습니다.

public class Main {
    public static void main(String[] args) {
        // for-each 반복문을 사용하여 Enum 상수와 속성 출력
        for (Day day : Day.values()) {
            System.out.println(day + " (요일 번호: " + day.getDayNumber() + ", 휴일 여부: " + day.isHoliday() + ")");
        }
    }
}

설명:

  • Enum 상수의 속성에 접근하기 위해 Getter 메서드를 호출합니다.
  • getDayNumber(): 요일 번호를 반환합니다.
  • isHoliday(): 해당 요일이 휴일인지 여부를 반환합니다.

출력:

MONDAY (요일 번호: 1, 휴일 여부: false)
TUESDAY (요일 번호: 2, 휴일 여부: false)
WEDNESDAY (요일 번호: 3, 휴일 여부: false)
THURSDAY (요일 번호: 4, 휴일 여부: false)
FRIDAY (요일 번호: 5, 휴일 여부: false)
SATURDAY (요일 번호: 6, 휴일 여부: true)
SUNDAY (요일 번호: 7, 휴일 여부: true)

4. EnumSet을 사용한 Enum 순회

  • *EnumSet*은 Enum을 효율적으로 처리할 수 있는 특수한 Set입니다. EnumSet은 모든 Enum 상수의 집합을 처리할 때 매우 유용하며, 반복문을 사용해 쉽게 순회할 수 있습니다.

4.1 EnumSet을 사용한 예제

import java.util.EnumSet;

public class Main {
    public static void main(String[] args) {
        // EnumSet을 사용해 특정 Enum 상수 집합 순회
        EnumSet<Day> weekend = EnumSet.of(Day.SATURDAY, Day.SUNDAY);

        // for-each 반복문을 사용해 weekend 순회
        for (Day day : weekend) {
            System.out.println(day + " is a weekend.");
        }
    }
}

설명:

  • *EnumSet.of()*를 사용하여 SATURDAYSUNDAY만 포함된 **EnumSet*을 생성합니다.
  • EnumSet은 내부적으로 매우 효율적이며, 특정 Enum 상수 집합만을 처리할 수 있습니다.

출력:

SATURDAY is a weekend.
SUNDAY is a weekend.

5. EnumMap을 사용한 Enum 처리

  • *EnumMap*은 Enum을 키로 사용하여 데이터를 저장하는 특수한 맵입니다. EnumMap을 사용하면 Enum을 기반으로 데이터를 관리할 수 있으며, 이를 통해 순회할 수 있습니다.

5.1 EnumMap을 사용한 예제

import java.util.EnumMap;

public class Main {
    public static void main(String[] args) {
        // EnumMap 선언 및 초기화
        EnumMap<Day, String> dayDescriptions = new EnumMap<>(Day.class);
        dayDescriptions.put(Day.MONDAY, "Start of the week");
        dayDescriptions.put(Day.FRIDAY, "End of the work week");
        dayDescriptions.put(Day.SATURDAY, "Weekend!");
        dayDescriptions.put(Day.SUNDAY, "Rest day");

        // EnumMap 순회
        for (Day day : dayDescriptions.keySet()) {
            System.out.println(day + ": " + dayDescriptions.get(day));
        }
    }
}

설명:

  • *EnumMap*은 Enum을 키로 사용하여 데이터를 저장할 수 있는 매우 효율적인 자료구조입니다.
  • EnumMap을 사용하여 Enum에 대한 설명을 추가하고, 이를 순회합니다.

출력:

MONDAY: Start of the week
FRIDAY: End of the work week
SATURDAY: Weekend!
SUNDAY: Rest day

요약

  • 자바에서 Enum을 순회하려면 for-each 반복문을 사용하고, **Enum.values()*를 통해 모든 상수를 배열로 가져올 수 있습니다.
  • Enum속성을 가질 수 있으며, 속성을 순회하면서 출력할 수 있습니다.
  • *EnumSet*과 **EnumMap*은 Enum을 효율적으로 관리할 수 있는 특수한 자료구조입니다.
  • 자바의 Enum은 단순 상수 정의를 넘어 속성이나 관련 데이터를 관리하는 데도 사용할 수 있습니다.

각 방법을 상황에 맞게 사용하여 Enum의 상수들을 효율적으로 순회할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com