본문 바로가기
디자인패턴

행동 패턴

by 이상한나라의개발자 2023. 12. 12.

전략 패턴

 

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

 

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

 

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' 는 선택된 결제 전략에 따라 결제 방법을 동적으로 변경할 수 있습니다