728x90
전략 패턴의 개념
전략 패턴(Strategy Pattern)은 객체지향 디자인 패턴 중 하나로, 객체를을 정의하고 각각을 캡슐화하여 상호교환이 가능하게 하는 패턴입니다. 이 패턴은 알고리즘을 사용하는 클라이언트와 알고리즘의 구현을 분리하여 유연성을 높이고, 확장성을 향상시킵니다.
예를 들어, 간단한 주문 시스템을 구현한다고 가정해봅시다. 주문을 할 때 결제 방법은 신용카드 결제, 페이팔 결제, 현금 결제 등 다양할 수 있습니다. 이때 전략 패턴을 사용하여 결제 방법을 구현할 수 있습니다.
- 디자인 패턴 중 하나로, 객체가 할 수 있는 행위들 각각의 전략으로 만들어 놓고 사용하며. 동적으로 전략 수정이 가능한 패턴
- 동일 계열의 알고리즘을 정의하고
- 각 알고리즘을 캡슐화 하며
- 이들을 상호 교환이 가능하도록 구현한다.
코드
// 전략을 나타내는 인터페이스를 정의합니다.
interface PaymentStrategy {
pay(amount: number): void;
}
// 그런 다음 각각의 결제 방법에 해당하는 클래스를 만듭니다.
class CreditCardPayment implements PaymentStrategy {
pay(amount: number): void {
console.log(`Paid $${amount} via credit card.`);
}
}
class PayPalPayment implements PaymentStrategy {
pay(amount: number): void {
console.log(`Paid $${amount} via PayPal.`);
}
}
class CashPayment implements PaymentStrategy {
pay(amount: number): void {
console.log(`Paid $${amount} in cash.`);
}
}
// 주문 클래스를 생성하고 결제 방법을 설정할 수 있도록 합니다.
class Order {
private paymentStrategy: PaymentStrategy;
constructor(paymentStrategy: PaymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
// 결제 방법 변경
setPaymentStrategy(paymentStrategy: PaymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
// 결제 실행
processPayment(amount: number) {
this.paymentStrategy.pay(amount);
}
}
const order = new Order(new CreditCardPayment());
order.processPayment(100);
order.setPaymentStrategy(new PayPalPayment());
order.processPayment(50);
order.setPaymentStrategy(new CashPayment());
order.processPayment(30);
// run
// Paid $100 via credit card.
// Paid $50 via PayPal.
// Paid $30 in cash.
이렇게 하면 전략 패턴을 사용하여 주문 시스템을 유연하게 확장하고, 각 결제 방법을 쉽게 변경할 수 있습니다.
728x90
'디자인패턴' 카테고리의 다른 글
디자인패턴 - 프록시 패턴 (0) | 2024.02.18 |
---|---|
디자인패턴 - 어댑터 패턴 (0) | 2024.02.18 |
디자인패턴 - 퍼사드패턴 (0) | 2024.02.17 |
디자인패턴 - 팩토리 메서드 패턴, 추상 팩토리 패턴 (0) | 2024.02.16 |
디자인패턴 - 싱글톤(Singleton) 패턴 (1) | 2024.02.15 |
댓글