열거형, 서로 관련된 상수들의 집합을 정의할 때 사용하는 데이터타입
값이 고정된 상수 집합을 다룰 때 가독성을 높이고 오류를 줄이는데 유용
1. enum의 기본 구조
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
- enum은 클래스처럼 보이지만, 고정된 상수 값을 가지는 특별한 데이터 타입이다
- 각 상수는 대문자로 작성하는것이 관례
- enum값은 기본적으로 0부터 시작하는 정수 값(ordinal)으로 관리된다
2. enum 사용방법
1) 기본사용
public class Main {
public static void main(String[] args) {
Day today = Day.MONDAY;
System.out.println(today); // MONDAY
}
}
2) switch 문과 함께 사용
switch문에서 enum은 간결하고 가독성 높게 사용할 수 있다
public class Main {
public static void main(String[] args) {
Day today = Day.FRIDAY;
switch (today) {
case MONDAY:
System.out.println("It's Monday!");
break;
case FRIDAY:
System.out.println("It's Friday!");
break;
default:
System.out.println("Another day...");
}
}
}
3. enum의 메서드
enum 은 기본적으로 다음 메서드를 제공한다
- values() : 열거형의 모든 상수를 배열로 반환
- ordinal() : 상수의 순서를 반환(0부터 시작)
- name() : 상수 이름을 문자열로 반환
for (Day day : Day.values()) {
System.out.println(day.name() + " is at index " + day.ordinal());
}
MONDAY is at index 0
TUESDAY is at index 1
...
SUNDAY is at index 6
4. enum의 커스텀 필드와 메서드
enum은 일반 클래스처럼 필드와 메서드를 가질 수 있다
public enum Day {
MONDAY("Weekday"),
SATURDAY("Weekend"),
SUNDAY("Weekend");
private final String type; // 커스텀 필드
// 생성자
Day(String type) {
this.type = type;
}
// 필드 값을 반환하는 메서드
public String getType() {
return type;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(Day.MONDAY.getType()); // Weekday
}
}
5. enum을 활용한 고급 기능
1) 인터페이스 구현
enum도 인터페이스를 구현할 수 있다
public interface Greeting {
void sayHello();
}
public enum Language implements Greeting {
ENGLISH {
@Override
public void sayHello() {
System.out.println("Hello");
}
},
SPANISH {
@Override
public void sayHello() {
System.out.println("Hola");
}
};
}
2) 추상 메서드 정의
enum 내부에 추상 메서드를 정의하면, 각 상수에서 해당 메서드를 구현해야 한다
public enum Operation {
ADD {
@Override
public int apply(int x, int y) {
return x + y;
}
},
MULTIPLY {
@Override
public int apply(int x, int y) {
return x * y;
}
};
public abstract int apply(int x, int y);
}
6. enum의 특징
1. 불변 객체 : 모든 enum 상수는 변경할 수 없는 객체
2. 싱글톤 패턴 : 각 상수는 JVM 내에서 하나의 인스턴스만 존재
3. final 클래스 : enum은 암묵적으로 final로 선언되므로 상속할 수 없음
7. enum의 장점
- 코드 가족성 향상 : 명시적인 상수 집합으로 코드 이해가 쉽다
- 타입 안정성 : 잘못된 값을 방지하며, 컴파일 타임에 오류를 잡아낼 수 있다
- 유지보수 용이 : 상수 값을 추가하거나 수정하기 편리하다
8. enum과 관련된 주요 메서드
- compareTo() : 열거형 상수 간의 순서를 비교
- toString() : 상수의 이름을 문자열로 반환
- valueOf(String name) : 문자열을 열거형 상수로 변환
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[JPA] N + 1 문제 (0) | 2025.01.06 |
---|---|
[Java] Generic 제너릭 (0) | 2025.01.04 |
[Java] @IdClass (0) | 2024.12.31 |
[Java] @Builder, @ToString, @EqualsAndHashCode, @Singular (0) | 2024.12.23 |
[Java] 프록시 (0) | 2024.12.22 |