Java

Enum

변위니 2025. 1. 6. 10:13

자바에서 관련된 상수의 집합을 정의하는 클래스

 

상수 값을 그룹화하고 타입을 안전하게 보장한다.

요일, 월 등 고정된 값 집합을 표현하거나 상태 머신에서 특정한 상태를 나타낼 때 사용하며 코드의 가독성과 유지보수성을 높일 수 있다.

내부 메서드를 사용하면 상수의 특성에 따라 각각 다른 동작을 수행할 수 있고, 각 상수의 동작을 구현하거나 해당 상수의 속성을 반환할 수 있다.

 

 

 

전략 패턴

행위를 캡슐화하여 동적으로 변경할 수 있도록 설계하는 방식이다.

각각의 클래스(전략)로 캡슐화하여, 특정 클래스의 행위를 유연하게 바꿀 수 있다. 코드의 재사용성과 확장성을 높이는 데 유용

 

구조
  • Context : 전략을 사용하는 클래스로 외부에서 전략을 주입받아 실행한다. 
  • Strategy : 공통 인터페이스 또는 추상 클래스로, 여러 전략 클래스가 동일한 방식으로 호출될 수 있도록 메서드를 정의한다.
  • ConcreteStrategy : 전략을 구현한 구체 클래스
 
 
 
 
 
 
 
 

enum과 전략 패턴

전략 패턴을 사용하여 각 상수마다 별도의 전략을 정의하고 이것을 enum 내부의 메드에서 사용하여 다양한 동작을 수행할 수 있다.

전략 패턴을 사용함으로써 각 상수의 동작을 쉽게 확장하고 유연하게 변경할 수 있다. 다른 인터페이스를 구현하거나 다른 클래스와 상호작용하는 경우 해당 인터페이스나 클래스를 전략 패턴에 포함하여 각 상수의 동작을 정의할 수 있다.

// Strategy 인터페이스 정의
public interface Operation {
	double apply(double a, double b);
}

// Enum 전략 정의
public enum Calculate implements Operation {
	ADD {
    	@Override
        public double apply(double a, double b) {
            return a + b;
        }
    }, 
    SUBSTRACT {
    	@Override
        public double apply(double a, double b) {
            return a - b;
        }
    }, 
    MULTIPLY {
    	@Override
        public double apply(double a, double b) {
            return a * b;
        }
    }, 
    DIVIDE {
    @Override
        public double apply(double a, double b) {
            if (b == 0) throw new ArithmeticException("Division by zero");
            return a / b;
        }
    };
}

// Context 사용
public class CalculatorExample {
    public static void main(String[] args) {
        double a = 10, b = 5;

        // ADD 연산 수행
        double result = Calculator.ADD.apply(a, b);
        System.out.println("Result: " + result);

        // SUBTRACT 연산 수행
        result = Calculator.SUBTRACT.apply(a, b);
        System.out.println("Result: " + result);
    }
}



각 enum 상수는 연산의 이름과 전략 로직을 모두 포함한다. 새로운 연산 추가 시 enum에 상수를 추가하고 apply 를 구현하면 된다.

 

전략을 enum 내부에 정의하여 별도의 클래스 없이 전략을 관리할 수 있고, 관련 로직을 enum 안에 두어 코드 가독성이 높다.

새로운 전략을 추가할 때 기존 코드의 변경 없이 새로운 enum 상수를 추가하면 되어 확장이 용이하다.  

 

하지만 enum 내부에 너무 많은 전략이 포함되면 코드가 복잡해질 수 있다.

enum이 너무 많은 역할을 갖지 않도록 하자.

'Java' 카테고리의 다른 글

Process와 Thread  (2) 2025.01.07
String 객체 선언하기  (0) 2025.01.06
동등성과 동일성  (0) 2025.01.06
Primitive 타입과 Reference 타입  (0) 2025.01.06
오버로딩과 오버라이딩  (0) 2025.01.06