Java Enums
자바 열거형 (Java Enums): 개념 및 사용법
- *열거형(Enum)**은 자바에서 상수들의 집합을 정의하는 특수한 데이터 타입입니다. 열거형을 사용하면 몇 가지의 상수 값을 그룹화하여 더 가독성이 좋고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 자바에서 열거형은 하나의 클래스로 취급되며, 각 상수는 해당 열거형 클래스의 객체로 간주됩니다.
이 글에서는 자바 열거형의 개념, 선언 및 사용법, 메서드와 기능에 대해 설명하고 예제를 통해 자세히 알아봅니다.
1. 열거형(Enum) 개념
- *열거형(Enum)**은 특정한 값들의 집합을 정의할 때 사용합니다. 각 상수 값은 열거형의 고유한 인스턴스입니다. 열거형을 사용하면 프로그램에서 특정 값이 몇 가지의 제한된 값 중 하나라는 것을 명확히 할 수 있습니다.
자바 열거형의 특징
- 상수 값: 열거형은 상수 값들의 집합을 정의합니다. 모든 열거형 상수는 고정된 값입니다.
- 타입 안전성: 열거형을 사용하면 상수 값에 대해 컴파일 타임에 타입 검사를 할 수 있어 잘못된 값이 사용되는 것을 방지합니다.
- 메서드와 필드: 열거형은 메서드와 필드를 가질 수 있으며, 객체 지향적인 방식으로 사용할 수 있습니다.
- 내부적으로는 클래스: 열거형은 내부적으로 클래스이며,
enum
으로 선언된 상수 값은 각각 그 클래스의 객체입니다.
2. 열거형 선언
자바에서 열거형은 enum
키워드를 사용하여 선언합니다. 열거형 내에서 선언된 상수들은 모두 대문자로 작성하는 것이 관례입니다.
기본적인 열거형 선언
// 열거형 선언
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
열거형 사용 예제
public class Main {
public static void main(String[] args) {
Day today = Day.MONDAY;
// 열거형 값 출력
System.out.println("Today is: " + today); // 출력: Today is: MONDAY
// 열거형 값 비교
if (today == Day.MONDAY) {
System.out.println("Start of the work week!");
}
}
}
결과:
Today is: MONDAY
Start of the work week!
위 예제에서 Day
라는 열거형을 선언하고, today
라는 변수를 열거형 타입으로 선언하여 Day.MONDAY
값을 할당했습니다.
if
문을 통해 열거형 상수 값을 비교할 수도 있습니다.
3. 열거형 메서드
열거형은 몇 가지 기본적인 메서드를 제공합니다. 또한 열거형은 일반 클래스처럼 사용자 정의 메서드와 필드를 가질 수 있습니다.
기본 메서드
values()
: 열거형의 모든 상수를 배열로 반환합니다.valueOf(String name)
: 이름으로 열거형 상수를 반환합니다.ordinal()
: 열거형 상수의 순서를 반환합니다. 0부터 시작합니다.name()
: 열거형 상수의 이름을 반환합니다.
기본 메서드 예제
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class Main {
public static void main(String[] args) {
// values() 메서드 사용
for (Day day : Day.values()) {
System.out.println(day + " ordinal: " + day.ordinal());
}
// valueOf() 메서드 사용
Day dayFromString = Day.valueOf("FRIDAY");
System.out.println("Day from string: " + dayFromString);
}
}
결과:
SUNDAY ordinal: 0
MONDAY ordinal: 1
TUESDAY ordinal: 2
WEDNESDAY ordinal: 3
THURSDAY ordinal: 4
FRIDAY ordinal: 5
SATURDAY ordinal: 6
Day from string: FRIDAY
위 예제에서 values()
메서드를 사용해 Day
열거형의 모든 상수를 출력하고, ordinal()
메서드를 사용해 각 상수의 순서를
출력했습니다. 또한 valueOf()
메서드를 사용하여 문자열을 통해 열거형 상수를 얻을 수 있습니다.
4. 사용자 정의 필드와 메서드
열거형은 필드와 메서드를 가질 수 있습니다. 이를 통해 각 열거형 상수마다 서로 다른 값을 할당하거나 동작을 구현할 수 있습니다.
사용자 정의 필드와 메서드 예제
// 열거형에 필드와 생성자, 메서드 추가
enum Fruit {
APPLE("Red"), BANANA("Yellow"), GRAPE("Purple");
private String color; // 필드
// 생성자
Fruit(String color) {
this.color = color;
}
// 메서드
public String getColor() {
return color;
}
}
public class Main {
public static void main(String[] args) {
// 열거형 상수에 정의된 메서드 호출
for (Fruit fruit : Fruit.values()) {
System.out.println(fruit + " is " + fruit.getColor());
}
}
}
결과:
APPLE is Red
BANANA is Yellow
GRAPE is Purple
위 예제에서 Fruit
열거형에 color
라는 필드를 추가하고, 생성자를 통해 각 열거형 상수마다 다른 색상을 할당했습니다.
getColor()
메서드를 통해 각 상수의 색상을 반환합니다.
5. 열거형과 switch
문
자바에서는 switch
문에서 열거형을 사용할 수 있습니다. 이를 통해 열거형 값을 기반으로 분기 처리를 할 수 있습니다.
switch
문과 열거형 예제
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class Main {
public static void main(String[] args) {
Day today = Day.FRIDAY;
// 열거형과 switch문 사용
switch (today) {
case MONDAY:
System.out.println("Start of the work week.");
break;
case FRIDAY:
System.out.println("End of the work week.");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekend!");
break;
default:
System.out.println("Midweek day.");
break;
}
}
}
결과:
End of the work week.
위 예제에서 switch
문을 사용하여 열거형 Day
의 값을 기반으로 특정 동작을 수행할 수 있습니다.
6. 열거형과 생성자
열거형에는 생성자를 사용할 수 있으며, 각 열거형 상수는 해당 생성자를 호출하여 초기화됩니다. 생성자는 private
으로 선언되어야 하며, 열거형 외부에서 열거형 상수를 추가로 생성할 수
없습니다.
열거형 생성자 예제
enum Season {
WINTER("Cold"), SPRING("Warm"), SUMMER("Hot"), FALL("Cool");
private String description;
// 생성자
private Season(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
public class Main {
public static void main(String[] args) {
for (Season season : Season.values()) {
System.out.println(season + ": " + season.getDescription());
}
}
}
결과:
WINTER: Cold
SPRING: Warm
SUMMER: Hot
FALL: Cool
위 예제에서 Season
열거형은 description
필드를 가지며, 생성자를 통해 각 상수에 고유한 설명을 추가하였습니다.
7. 열거형을 사용하는 이유
1. 코드 가독성
열거형을 사용하면 코드를 더 명확하고 가독성 높게 작성할 수 있습니다. 상수 값을 그룹화하여 의미 있는 이름으로 정의할 수 있습니다.
2. 타입 안전성
열거형은 컴파일 시 타입 검사를 수행하므로, 잘못된 값을 전달할 위험이 줄어듭니다. 상수 대신 열거형을 사용하면 코드를 더 안전하게 작성할 수 있습니다.
3. 유지보수성
열거형을 사용하면 상수 값을 중앙에서 관리할 수 있어 유지보수가 용이해집니다. 상수 값을 변경하거나 추가할 때 열거형을 수정하면 모든 코드에서 일관성을 유지할 수 있습니다.
요약
- *열거형(Enum)**은 상수들의 집합을 정의하는 특수한 데이터
타입으로, 상수 값들을 그룹화하여 코드의 가독성을 높이고 유지보수를 쉽게 할 수 있습니다.
- 열거형은 상수 값 외에도 필드, 메서드, 생성자를 가질 수 있습니다.
- 기본 메서드(
values()
,valueOf()
,ordinal()
등)를 사용해 열거형 상수들을 다룰 수 있으며,switch
문과 함께 사용할 수 있습니다. - 열거형은 타입 안전성과 코드의 유연성을 제공하여 코드의 품질을 향상시키는 중요한 도구입니다.
열거형을 적절하게 사용하면 프로그램의 구조를 더 명확하게 만들 수 있으며, 상수를 다루는 코드의 오류를 줄일 수 있습니다.