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()
*를 사용하여SATURDAY
와SUNDAY
만 포함된 **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
의 상수들을 효율적으로 순회할 수 있습니다.