728x90
Java Enum에서 인터페이스(interface) 구현하기
Java의 enum은 단순한 상수 집합이 아니라, 클래스처럼 동작할 수 있으며 인터페이스도 구현 가능합니다.
이를 활용하면 Enum이 특정 동작(행위)을 포함하도록 만들 수 있습니다.
1️⃣ Enum에서 인터페이스 구현하기
Java의 enum은 클래스의 특별한 형태이므로 인터페이스를 구현(implements) 할 수 있습니다.
✅ 기본 예제
// 인터페이스 정의
interface Operation {
int apply(int a, int b);
}
// Enum에서 인터페이스 구현
enum Calculator implements Operation {
ADD {
@Override
public int apply(int a, int b) {
return a + b;
}
},
SUBTRACT {
@Override
public int apply(int a, int b) {
return a - b;
}
},
MULTIPLY {
@Override
public int apply(int a, int b) {
return a * b;
}
},
DIVIDE {
@Override
public int apply(int a, int b) {
return (b != 0) ? a / b : 0; // 0으로 나누는 경우 예외 처리
}
};
}
// 실행 테스트
public class Main {
public static void main(String[] args) {
int num1 = 10, num2 = 5;
System.out.println("Addition: " + Calculator.ADD.apply(num1, num2));
System.out.println("Subtraction: " + Calculator.SUBTRACT.apply(num1, num2));
System.out.println("Multiplication: " + Calculator.MULTIPLY.apply(num1, num2));
System.out.println("Division: " + Calculator.DIVIDE.apply(num1, num2));
}
}
📌 실행 결과
Addition: 15
Subtraction: 5
Multiplication: 50
Division: 2
2️⃣ Enum의 공통 인터페이스 구현
인터페이스를 enum이 구현하면, 각 상수에서 해당 메서드를 다르게 오버라이딩할 수 있습니다.
✅ 예제: 메시지 타입에 따른 동작 정의
// 인터페이스 정의
interface Message {
String getMessage();
}
// Enum에서 인터페이스 구현
enum MessageType implements Message {
INFO {
@Override
public String getMessage() {
return "This is an informational message.";
}
},
WARNING {
@Override
public String getMessage() {
return "This is a warning message!";
}
},
ERROR {
@Override
public String getMessage() {
return "This is an error message!";
}
};
}
// 실행 테스트
public class Main {
public static void main(String[] args) {
for (MessageType type : MessageType.values()) {
System.out.println(type + ": " + type.getMessage());
}
}
}
📌 실행 결과
INFO: This is an informational message.
WARNING: This is a warning message!
ERROR: This is an error message!
3️⃣ Enum에서 공통된 메서드 구현 후 오버라이딩
각 enum 상수에서 공통적으로 사용할 기본 구현을 default로 제공한 후, 필요한 경우 오버라이딩할 수도 있습니다.
✅ 예제: 기본 동작 + 오버라이딩
// 인터페이스 정의
interface Payment {
default void process() {
System.out.println("Processing payment...");
}
}
// Enum에서 인터페이스 구현
enum PaymentMethod implements Payment {
CREDIT_CARD {
@Override
public void process() {
System.out.println("Processing credit card payment...");
}
},
PAYPAL {
@Override
public void process() {
System.out.println("Processing PayPal payment...");
}
},
CASH; // 기본 동작 유지
}
// 실행 테스트
public class Main {
public static void main(String[] args) {
for (PaymentMethod method : PaymentMethod.values()) {
System.out.print(method + ": ");
method.process();
}
}
}
📌 실행 결과
CREDIT_CARD: Processing credit card payment...
PAYPAL: Processing PayPal payment...
CASH: Processing payment...
🔹 CASH의 경우 process()를 오버라이딩하지 않았으므로 기본 동작을 사용합니다.
4️⃣ Enum에서 인터페이스 다중 구현
Java에서는 다중 상속이 불가능하지만, 인터페이스는 다중 구현이 가능합니다.
Enum에서도 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
✅ 예제: 다중 인터페이스 구현
// 첫 번째 인터페이스
interface Movable {
void move();
}
// 두 번째 인터페이스
interface Attackable {
void attack();
}
// Enum에서 두 개의 인터페이스 구현
enum CharacterType implements Movable, Attackable {
WARRIOR {
@Override
public void move() {
System.out.println("Warrior moves forward!");
}
@Override
public void attack() {
System.out.println("Warrior swings a sword!");
}
},
ARCHER {
@Override
public void move() {
System.out.println("Archer moves swiftly!");
}
@Override
public void attack() {
System.out.println("Archer shoots an arrow!");
}
};
}
// 실행 테스트
public class Main {
public static void main(String[] args) {
for (CharacterType character : CharacterType.values()) {
System.out.println(character + " Actions:");
character.move();
character.attack();
System.out.println();
}
}
}
📌 실행 결과
WARRIOR Actions:
Warrior moves forward!
Warrior swings a sword!
ARCHER Actions:
Archer moves swiftly!
Archer shoots an arrow!
🔹 CharacterType이 Movable과 Attackable을 동시에 구현하여 두 가지 동작을 수행할 수 있습니다.
🔥 정리
| 특징 | enum | interface | enum + interface |
| 역할 | 상수 집합 | 동작(행위) 정의 | Enum이 특정 동작을 포함하도록 만들기 |
| 메서드 구현 | 가능 | 불가능 (default 메서드는 가능) | Enum에서 오버라이딩 가능 |
| 다중 구현 | ❌ (불가능) | ✅ (가능) | ✅ (여러 인터페이스 구현 가능) |
| 예제 | enum Color { RED, GREEN } | interface Flyable { void fly(); } | enum Bird implements Flyable { SPARROW, EAGLE } |
✅ Enum은 인터페이스를 구현할 수 있으며, 각 Enum 상수에서 다르게 동작하도록 메서드를 오버라이딩할 수 있음
✅ 인터페이스를 활용하면 Enum의 기능을 확장할 수 있어 더욱 유연한 설계가 가능
✅ Enum + 인터페이스 조합을 활용하면 유지보수성이 높고 가독성이 좋은 코드를 작성할 수 있음
728x90
'개발 > 자바' 카테고리의 다른 글
| 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점 (0) | 2025.02.20 |
|---|---|
| Java Enum을 활용한 전략 패턴(Strategy Pattern) 구현 (0) | 2025.02.20 |
| 쇼핑몰 주문 정보를 추상 클래스를 이용한 구현 예제 (0) | 2025.02.19 |
| OCP(Open-Closed Principle), SRP(Single Responsibility Principle) (0) | 2025.02.19 |
| 전략 패턴(Strategy Pattern)과 방문자 패턴(Visitor Pattern) (0) | 2025.02.19 |