전략 패턴(strategy pattern)
특정한 알고리즘을 정의하고 이를 캡슐화하여 서로 교환 가능하도록 만드는 패턴
알고리즘이 독립적으로 클라이언트에게 변경 가능하도록 하며,
즉, 실행 중에 알고리즘을 선택할 수 있게한다.
// 결제 전략 인터페이스
interface PaymentStrategy {
void pay(int amount);
}
// 구체적인 전략 클래스
class CreditCardPayment implements PaymentStrategy {
@Override
public void pay(int amount) {
System.out.println(amount + " paid using Credit Card.");
}
}
class PayPalPayment implements PaymentStrategy {
@Override
public void pay(int amount) {
System.out.println(amount + " paid using PayPal.");
}
}
// 컨텍스트
class ShoppingCart {
private PaymentStrategy paymentStrategy //결제 동작 정의
public void setPaymentStrategy(PaymentStrategy paymentStrategy) { //동적으로 결제 전략을 설정
this.paymentStrategy = paymentStrategy;
}
public void checkout(int amount) { //실제 결제를 수행
paymentStrategy.pay(amount);
}
}
// 클라이언트 코드
public class StrategyPatternExample {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
// Credit Card로 결제
cart.setPaymentStrategy(new CreditCardPayment());
cart.checkout(200);
// PayPal로 결제
cart.setPaymentStrategy(new PayPalPayment());
cart.checkout(150);
}
}
전략 패턴을 사용하면 ShoppingCart는 어떤 결제 전략을 사용하는지 알 필요가 없으며, 새로운 결제 전략을 추가하거나 변경해도 ShoppingCart 클래스를 수정할 필요가 없습니다. 이로써 코드의 유연성과 재사용성이 향상되는 것을 확인할 수 있습니다.
참고
면접을 위한 cs 전공지식 노트