Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Enum은 인터페이스를 구현할 수 있을까?

네, Java의 Enum(열거형)은 인터페이스를 구현할 수 있습니다. 이 기능은 특정 객체나 클래스의 고유한 속성과 밀접하게 연관된 비즈니스 로직을 구현해야 할 때 특히 유용합니다.

EnumJava 1.5 버전에서 도입된 특수한 데이터 타입입니다. Enum의 상수들은 기본적으로 static(정적)이며 final(불변)로 선언되기 때문에, 관례상 Enum 타입 필드의 이름은 모두 대문자로 작성하는 것이 좋습니다.

Enum이 인터페이스를 구현하는 방법

아래 예제는 Enum이 인터페이스를 구현하여 각 상수마다 서로 다른 연산 동작을 정의하는 방식을 보여줍니다. 이는 전략 패턴(Strategy Pattern)을 Enum으로 간결하게 표현한 것이라고 볼 수 있습니다.

예제 코드

interface EnumInterface {
    int calculate(int first, int second);
}

enum EnumClassOperator implements EnumInterface { // Enum이 인터페이스를 구현
    ADD {
        @Override
        public int calculate(int first, int second) {
            return first + second;
        }
    },
    SUBTRACT {
        @Override
        public int calculate(int first, int second) {
            return first - second;
        }
    };
}

class Operation {
    private int first, second;
    private EnumClassOperator operator;

    public Operation(int first, int second, EnumClassOperator operator) {
        this.first = first;
        this.second = second;
        this.operator = operator;
    }

    public int calculate() {
        return operator.calculate(first, second);
    }
}

// 메인 클래스
public class EnumTest {
    public static void main(String[] args) {
        Operation add = new Operation(20, 10, EnumClassOperator.ADD);
        Operation subtract = new Operation(20, 10, EnumClassOperator.SUBTRACT);
        System.out.println("Addition: " + add.calculate());
        System.out.println("Subtraction: " + subtract.calculate());
    }
}

실행 결과

Addition: 30
Subtraction: 10

코드 설명

위 코드의 동작 방식을 단계별로 살펴보면 다음과 같습니다.

1. 인터페이스 정의: EnumInterface는 두 개의 정수를 받아 연산 결과를 반환하는 calculate() 메서드를 선언합니다.

2. Enum에서 인터페이스 구현: EnumClassOperatorimplements 키워드를 사용해 인터페이스를 구현하며, 각 상수(ADD, SUBTRACT)는 익명 클래스처럼 자신만의 calculate() 메서드를 오버라이딩합니다.

3. 활용: Operation 클래스는 연산 대상 값과 함께 Enum 상수를 전달받아, 해당 상수가 가진 연산 로직을 실행합니다.

정리

이처럼 Enum에 인터페이스를 구현하면 상수마다 고유한 동작을 부여할 수 있어, if-else 문이나 switch 문 없이도 다양한 행위를 깔끔하게 처리할 수 있습니다. 조건 분기를 줄이고 코드의 가독성과 유지보수성을 높이고 싶다면, Enum + 인터페이스 조합을 적극적으로 활용해 보시기 바랍니다.