전략 패턴
전략 패턴은 특정한 연산을 클래스 내부에서 정의하는 대신 별도의 클래스로 분리하여, 일련의 로직을 정의한 다음 필요에 따라 동적으로 클래스를 바꾸어 가며 사용할 수 있게 하는 디자인 패턴입니다. 이 패턴은 객체의 행동을 동적으로 바꾸고 싶을 때 사용합니다.
우리가 흔히 사용하는 레이드 아키텍처를 기준으로 보면
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' 는 선택된 결제 전략에 따라 결제 방법을 동적으로 변경할 수 있습니다
'디자인패턴' 카테고리의 다른 글
디자인패턴 : 전략 패턴 (0) | 2024.05.09 |
---|---|
자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - Supplier<T> 인터페이스가 팩토리를 표현하는 완벽한 예이다 (0) | 2024.04.17 |
생성 패턴 (0) | 2023.12.12 |
구조 패턴 (0) | 2023.12.12 |