디자인패턴
행동 패턴
이상한나라의개발자
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' 는 선택된 결제 전략에 따라 결제 방법을 동적으로 변경할 수 있습니다