열거형(enum)은 Java에서 고정된 상수 집합을 정의할 때 사용하는 특수한 데이터 타입이다. 주로 관련된 상수들을 그룹화하여 의미 있는 이름으로 관리하고, 이러한 상수들이 제한된 값들 중 하나임을 보장하기 위해 사용된다. 또한 코드의 가독성과 안전성을 높일 수 있다.
🔡 열거형(enum)의 기본구조
- enum 키워드를 사용하여 정의한다.
- 열거형 내부에는 상수 값들이 정의되며, 이 값들은 자동으로 정수로 매핑된다(0부터 시작).
- 하지만 실제로는 객체로 취급되므로 다양한 메서드와 필드를 가질 수 있다
- 열거형 내에서 여러 생성자를 정의할 수 있다
- 열거형의 생성자는 오버로딩(매개변수의 타입이나 수를 다르게 하는 방식으로 동일한 이름의 생성자를 여러 개 정의하는 것)이 가능하다.
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
위 예제에서 Day라는 열거형(enum)을 정의했으며, 이는 일주일의 요일을 나타낸다. 열거형 내의 각 값(SUNDAY, MONDAY,...)은 Day 타입의 상수이다.
🏗️열거형(enum) 생성자 오버로딩 예시
public enum CoffeeSize {
SMALL(100), // 생성자 호출: CoffeeSize(int ml)
MEDIUM(200), // 생성자 호출: CoffeeSize(int ml)
LARGE(300, true); // 생성자 호출: CoffeeSize(int ml, boolean hasExtraShot)
private final int ml;
private final boolean hasExtraShot;
// 기본 생성자: hasExtraShot은 false로 설정
CoffeeSize(int ml) {
this.ml = ml;
this.hasExtraShot = false;
}
// 오버로딩된 생성자: hasExtraShot을 지정할 수 있음
CoffeeSize(int ml, boolean hasExtraShot) {
this.ml = ml;
this.hasExtraShot = hasExtraShot;
}
public int getMl() {
return ml;
}
public boolean hasExtraShot() {
return hasExtraShot;
}
}
public class Main {
public static void main(String[] args) {
CoffeeSize size = CoffeeSize.LARGE;
System.out.println("Selected size: " + size);
System.out.println("Volume: " + size.getMl() + "ml");
System.out.println("Has extra shot: " + size.hasExtraShot());
}
}
- 생성자 오버로딩:
- CoffeeSize 열거형에는 두 개의 생성자가 정의되어 있다.
- 하나는 int 매개변수만 받으며, 다른 하나는 int와 boolean 매개변수를 받습는다.
- SMALL과 MEDIUM은 첫 번째 생성자를 사용하고, LARGE는 두 번째 생성자를 사용하여 hasExtraShot 필드를 true로 초기화합니다.
- 열거형 상수의 초기화:
- 열거형 상수 LARGE는 300ml와 true 값을 사용해 초기화됩니다
⚒️열거형(enum)의 메서드와 필드
public enum Day {
SUNDAY("Weekend"), MONDAY("Weekday"), TUESDAY("Weekday"), WEDNESDAY("Weekday"),
THURSDAY("Weekday"), FRIDAY("Weekday"), SATURDAY("Weekend");
private String type;
// 열거형 생성자
Day(String type) {
this.type = type;
}
public String getType() {
return type;
}
}
public class EnumExample {
public static void main(String[] args) {
// values를 사용한 for-loop 출력문
for (Day day : Day.values()) {
System.out.println(day + " is a " + day.getType());
}
// valueOf 를 사용하여 특정일 계산
String dayName = "WEDNESDAY";
Day day = Day.valueOf(dayName);
System.out.println(dayName + " is a " + day.getType());
}
}
//출력값
SUNDAY is a Weekend
MONDAY is a Weekday
TUESDAY is a Weekday
WEDNESDAY is a Weekday
THURSDAY is a Weekday
FRIDAY is a Weekday
SATURDAY is a Weekend
WEDNESDAY is a Weekday
- values(): 열거형의 모든 상수 값을 배열로 반환한다.
- valueOf(String name): 열거형 상수의 이름으로 해당 상수를 반환한다.
✏️열거형(enum) 활용 예제
public class EnumExample {
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public static void main(String[] args) {
Day today = Day.MONDAY;
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("It's the weekend!");
break;
default:
System.out.println("Midweek day.");
break;
}
}
}
위 예제에서는 Day 열거형을 사용하여 현재 요일에 따라 메시지를 출력한다. 열거형은 인터페이스와 같이 Java의 객체 지향성을 활용할 수 있는 중요한 방법 중 하나이다. 앞으로 더 활용할 수 있게 연습을 하면 좋을 거 같다.
'Java' 카테고리의 다른 글
[Java]인터페이스 (0) | 2024.08.12 |
---|---|
[Java]모던자바 Stream (0) | 2024.08.09 |
[Java]실행시간 계산법 (0) | 2024.08.05 |
[Java]비교방법 equals()와 ==의 차이 (0) | 2024.08.02 |
[Java]HashMap 사용법 (0) | 2024.07.31 |