1. 기본 사용법
enum은 여러 상수 값을 정의하는 데 사용됩니다.
public enum Day {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
사용 예제
public class EnumExample {
public static void main(String[] args) {
Day today = Day.MONDAY;
System.out.println("Today is: " + today);
// Enum을 switch 문에서 사용
switch (today) {
case MONDAY -> System.out.println("It's Monday!");
case FRIDAY -> System.out.println("TGIF!");
case SUNDAY -> System.out.println("Rest day!");
default -> System.out.println("Just another day.");
}
}
}
출력:
Today is: MONDAY
It's Monday!
2. enum에 필드와 메서드 추가하기
enum은 단순 상수뿐만 아니라 필드와 메서드를 가질 수 있습니다.
예제: enum에 필드와 생성자 추가
public enum Planet {
MERCURY(3.3e+23, 2.4397e6),
VENUS(4.87e+24, 6.0518e6),
EARTH(5.97e+24, 6.3781e6);
private final double mass; // 질량 (kg)
private final double radius; // 반지름 (m)
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double getMass() {
return mass;
}
public double getRadius() {
return radius;
}
public double surfaceGravity() {
final double G = 6.67300E-11; // 중력 상수
return G * mass / (radius * radius);
}
}
사용 예제
public class EnumWithFields {
public static void main(String[] args) {
Planet planet = Planet.EARTH;
System.out.println("Planet: " + planet);
System.out.println("Mass: " + planet.getMass());
System.out.println("Radius: " + planet.getRadius());
System.out.println("Surface Gravity: " + planet.surfaceGravity());
}
}
출력:
Planet: EARTH
Mass: 5.97E24
Radius: 6378100.0
Surface Gravity: 9.80044987571984
3. enum의 추가 메서드
enum에는 미리 정의된 메서드들이 포함되어 있습니다.
주요 메서드
- values(): 모든 열거 상수를 배열로 반환.
- valueOf(String name): 해당 이름의 열거 상수를 반환.
- ordinal(): 열거 상수의 선언 순서를 반환 (0부터 시작).
예제
public class EnumMethods {
public static void main(String[] args) {
// 모든 열거 상수 출력
for (Day day : Day.values()) {
System.out.println(day);
}
// 문자열에서 열거 상수로 변환
Day day = Day.valueOf("MONDAY");
System.out.println("Day: " + day);
// 열거 상수의 순서
System.out.println("Ordinal: " + day.ordinal());
}
}
출력:
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
Day: MONDAY
Ordinal: 0
4. 고급 사용법
1) 추상 메서드 정의
enum 내에서 추상 메서드를 정의하고, 각 상수가 이를 구현할 수 있습니다.
public enum Operation {
PLUS {
@Override
public double apply(double x, double y) {
return x + y;
}
},
MINUS {
@Override
public double apply(double x, double y) {
return x - y;
}
};
public abstract double apply(double x, double y);
}
사용 예제
public class EnumWithAbstractMethods {
public static void main(String[] args) {
double x = 10;
double y = 5;
System.out.println("10 + 5 = " + Operation.PLUS.apply(x, y));
System.out.println("10 - 5 = " + Operation.MINUS.apply(x, y));
}
}
출력:
10 + 5 = 15.0
10 - 5 = 5.0
2) 인터페이스 구현
enum이 인터페이스를 구현할 수도 있습니다.
interface Payment {
void pay();
}
public enum PaymentType implements Payment {
CREDIT_CARD {
@Override
public void pay() {
System.out.println("Paid with Credit Card");
}
},
CASH {
@Override
public void pay() {
System.out.println("Paid with Cash");
}
}
}
사용 예제
public class EnumWithInterface {
public static void main(String[] args) {
PaymentType payment = PaymentType.CREDIT_CARD;
payment.pay(); // "Paid with Credit Card"
}
}
5. 실무에서의 활용 예시
1) 상태 관리
enum은 상태나 단계를 표현할 때 자주 사용됩니다.
public enum OrderStatus {
NEW,
PROCESSING,
COMPLETED,
CANCELED;
}
2) 설정 값 관리
enum으로 고정된 설정 값을 관리합니다.
public enum Config {
DATABASE_URL("jdbc:mysql://localhost:3306/mydb"),
API_KEY("abcdef123456");
private final String value;
Config(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
장점
- 가독성: 상수를 그룹화하고 이름으로 의미를 전달.
- 타입 안정성: 잘못된 값 사용 방지.
- 추가 기능: 필드와 메서드를 통해 더 많은 정보를 포함 가능.
- 코드 유지보수: 중앙에서 열거 상수 관리.
요약
- enum은 고정된 상수 집합을 정의하는 데 사용됩니다.
- 필드와 메서드를 추가하거나, 인터페이스 구현, 추상 메서드 정의로 기능 확장이 가능합니다.
- 실무에서는 상태 관리, 설정 값 관리, 비즈니스 로직 표현 등에 널리 사용됩니다.
반응형
'서버&백엔드 > 🔥 JAVA' 카테고리의 다른 글
JAVA | TDD API 테스트 & 리팩토링 (2) | 2024.12.20 |
---|---|
Java | TDD시 사용되는 Assert (0) | 2024.12.19 |
의존성 역전 원칙 (DIP) (0) | 2024.12.19 |
JAVA | TDD예제를 통한 어댑터 패턴 설명 (0) | 2024.12.19 |
JAVA | POJO로 개발한다는 무슨말일까? (0) | 2024.12.18 |