[Design Pattern] Strategy pattern -1

배인진
배인진
Nov 3 · 3 min read

Strategy pattern은 객체 간 통신하는 방법에 대해 분류한 Behavioral pattern 중 하나입니다. 이 패턴은 알고리즘을 Strategy(전략) 객체로 분리하여 캡슐화하고, case별 알고리즘을 별도의 class에 배치합니다. 그리고 Client는 필요한 구상 Strategy 객체를 선택하여 Context 객체에 전달하며, Context 객체는 선택된 Strategy 객체에 필요한 데이터를 제공하여 연산을 수행하게 합니다.

  1. 개요

(1) 정의

  • Strategy pattern은 조건 연산자를 통해 동일한 알고리즘의 여러 변형을 만들어내는 경우에 대해, 알고리즘을 Strategy 객체로 추상화하여 다양한 동작을 별도의 클래스 계층 구조로 분리하는 패턴입니다.
  • Strategy pattern을 통해 알고리즘과 관련된 dependency (구현에 필요한 데이터)에서 분리되고, Client는 구상 Strategy 객체 중 하나에 실행을 위임합니다.

(2) UML

Strategy pattern UML class Diagram

위의 UML Class Diagram을 보면 Strategy class들은 상속 계층 구조로 구현되며, interface가 모든 구현에서 동일한 것을 알 수 있습니다. 그리고 Context 객체에는 Strategy 객체가 포함되어 있어 Client가 Context 객체와 상호작용하게 될 것입니다.

역할별로 하나씩 정리해보겠습니다.

  • Context : Strategy 객체를 사용하여 operation을 수행합니다. 이 클래스는 Client와 상호 작용하며, Client는 이 객체의 operation을 호출할 것입니다.
  • Strategy : 알고리즘 구현을 위한 interface 입니다. Context가 알고리즘을 사용하는 데 필요한 메서드를 정의합니다.
  • Concrete Strategy : 실제 알고리즘을 구현한 구상객체 입니다. Strategy interface를 구현한 구상 Strategy 객체는 여러 개일 수 있습니다. 각각은 특정 문제를 해결하거나 Context의 operation을 수행하는 다른 알고리즘을 구현합니다.

2. 구현

— 작성 중

3. 결론

  • if, switch 와 같은 조건문으로 다른 알고리즘 혹은 메서드를 선택하는 경우에 대해 Strategy pattern을 적용하여 런타임에 알고리즘을 교체할 수 있습니다.
  • 각 알고리즘에 대해 개별적인 구상 Strategy 객체를 구현하여 캡슐화합니다. 구상 Strategy 객체는 별도의 알고리즘을 구현한 것으로, 서로에 대해 알 필요가 없습니다.
  • Context 를 변경하지 않고 새로운 Strategy객체를 실행할 수 있습니다.
  • Client는 구상 Strategy 객체를 생성해야 하므로 어떤 객체를 선택해야 하는지 모든 Strategy 구현에 대해 알아야 합니다. 이는 새로운 Strategy 객체를 구현해 알고리즘을 추가하게 되면, Client 코드도 변경해야함을 의미합니다.
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade