디자인패턴

행동 패턴

이상한나라의개발자 2023. 12. 12. 17:50

전략 패턴

 

전략 패턴은 특정한 연산을 클래스 내부에서 정의하는 대신 별도의 클래스로 분리하여, 일련의 로직을 정의한 다음 필요에 따라 동적으로 클래스를 바꾸어 가며 사용할 수 있게 하는 디자인 패턴입니다. 이 패턴은 객체의 행동을 동적으로 바꾸고 싶을 때 사용합니다.

 

우리가 흔히 사용하는 레이드 아키텍처를 기준으로 보면 

 

Controller -> Service -> Repository <- DBRepositoryImpl or FileRepositoryImpl or MemeryRepositoryImpl  

 

위와 같이 구성되어 있을겁니다. 이때 Service에서는 Repository 인터페이스에 의존하게 되면 상황에 따라서 Repository 구현체를 교체할 수 있습니다. 이를 전략 패턴이라고 부릅니다.

 

다른 예시를 한번 만들어 보겠습니다. 쇼핑을 하고 결제시 신용카드 또는 핸드폰페이 결제가 있을 수 있습니다.

 

// Strategy
interface PaymentStrategy {
    void pay(int amount);
}

// ConcreteStrategy
class CreditCardStrategy implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("Paid with credit card: " + amount);
    }
}

class PaypalStrategy implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("Paid with PayPal: " + amount);
    }
}

// Context
class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

// 사용 예
public class Main {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        cart.setPaymentStrategy(new CreditCardStrategy());
        cart.checkout(100);

        cart.setPaymentStrategy(new PaypalStrategy());
        cart.checkout(150);
    }
}

 

 

이 예제에서 'ShoppingCart' 는 선택된 결제 전략에 따라 결제 방법을 동적으로 변경할 수 있습니다