Lined Notebook

전략패턴 ★★★

by yjym33

1. 전략 패턴의 개념

전략 패턴은 객체의 동작(전략)을 캡슐화하고 이를 교체 가능한 형태로 제공합니다.
이 패턴을 사용하면 알고리즘을 독립적으로 변경할 수 있으며, 클라이언트 코드에 영향을 주지 않고 새로운 전략을 추가할 수 있습니다.


2. 핵심 구성요소


전략(Strategy): 각각의 알고리즘에 해당하는 인터페이스나 추상 클래스를 정의합니다.


구체적인 전략(Concrete Strategy): 전략을 실제로 구현한 클래스입니다.


컨텍스트(Context): 전략 객체를 사용하는 클라이언트입니다. 컨텍스트는 전략을 선택하고 실행합니다.

 

 

3. 전략 패턴의 장점


유연성: 새로운 전략을 추가하거나 기존 전략을 변경하는 데 용이합니다. 클라이언트 코드에 영향을 주지 않고 새로운 전략을 도입할 수 있습니다.

결합도 감소: 컨텍스트와 전략 객체 간의 결합도가 낮아져, 유지보수가 쉬워집니다.

재사용성: 전략은 독립적으로 사용 가능하므로, 다른 컨텍스트에서 재사용이 가능합니다.

테스트 용이성: 각 전략은 독립적으로 테스트할 수 있으며, 모의 객체(Mock)를 사용하여 테스트하기 용이합니다.

 

 

4. 전략 패턴의 구현


전략 패턴은 다음과 같은 구조를 가집니다.

// 전략 인터페이스
interface PaymentStrategy {
    void pay(int amount);
}

// 구체적인 전략 클래스들
class CreditCardPayment implements PaymentStrategy {
    public void pay(int amount) {
        // 신용카드 결제 로직
    }
}

class PayPalPayment implements PaymentStrategy {
    public void pay(int amount) {
        // PayPal 결제 로직
    }
}

// 컨텍스트 클래스
class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(int amount) {
        // 결제 로직
        paymentStrategy.pay(amount);
    }
}

컨텍스트 클래스인 ShoppingCart는 PaymentStrategy 인터페이스를 통해 다양한 결제 전략을 선택하고 실행할 수 있습니다.

 

 

'Development > CS' 카테고리의 다른 글

MVC패턴, MVP패턴, MVVM패턴 ★★★  (0) 2023.09.26
프록시패턴 ★★★  (0) 2023.09.26
DI와 DIP ★★★  (0) 2023.09.25
팩토리 패턴 ★★★  (0) 2023.09.25
싱글톤 패턴 ★★★  (0) 2023.09.24

블로그의 정보

생각보다 실천을

yjym33

활동하기