목차:

전략(Strategy) 패턴

전략 패턴은 다양한 알고리즘들을 각각 별개의 클래스로 캡슐화하고, 이들을 언제든지 서로 교체할 수 있게 만드는 디자인 패턴입니다. 이를 통해 클라이언트의 코드 변경 없이 알고리즘을 유연하게 변경할 수 있습니다.

전략 패턴 구성 요소

image.png

  1. 콘텍스트(Context)

    전략을 사용하는 주체입니다. 클라이언트의 요청을 받아 작업을 수행해야 하지만, 실제 작업 로직을 담고 있지는 않습니다. 대신 전략 인터페이스 타입의 객체에 대한 참조를 유지하며, 실제 작업 수행은 이 참조 객체에 위임합니다.

  2. 전략 인터페이스 (Strategy Interface)

    모든 구상 전략들이 반드시 구현해야 할 공통된 메서드를 정의하는 인터페이스입니다. 이 인터페이스는 콘텍스트가 다양한 구상 전략들을 일관된 방식으로 호출할 수 있도록 하는 연결 규격 역할을 합니다.

  3. 구상 전략 (Concrete Strategies)

    실제 알고리즘을 구현한 개별 클래스들입니다. 각 구상 전략 클래스는 전략 인터페이스를 구현하며, 인터페이스에 정의된 메서드 안에 자신만의 고유한 작업 로직을 담고 있습니다. 이 클래스들이 바로 교체 가능한 전략의 실체입니다.

전략 패턴 예시

쇼핑몰의 다양한 할인 정책에서 하나의 서비스 클래스(DiscountService)가 모든 할인 정책을 처리한다.

다양한 정책들: