[Swift] Strategy Pattern

온오·2024년 5월 29일
post-thumbnail

전략패턴

전략 패턴은 여러 알고리즘을 각각 객체로 캡슐화하고, 동일한 목적을 하는 알고리즘들을 하나의 인터페이스로 묶는 알고리즘의 집합을 사용하는 행위패턴입니다.

알고리즘들이 클라이언트 객체에서 교체되면서 사용할 수 있게 됩니다.

따라서, 알고리즘이 클라이언트 객체에 독립적으로 구성되기 때문에 느슨한 연결을 만들 수 있게 되는겁니다.

느슨하게 연결된다는 것은 클라이언트 객체가 알고리즘이 변하게 될 때, 영향을 받지 않는 다는 것을 의미합니다!
만약, A 알고리즘이 수정되어야 한다면, 캡슐화된 해당 알고리즘만 수정하게 되고, 내부적으로 어떻게 수정되고 어떻게 구현되어 있는지 클라이언트 객체는 알지 못합니다.


구성

Strategy (Compositor)

  • 지원되는 모든 알고리즘에 사용되는 공통적인 인터페이스를 정의합니다.
  • Context는 Strategy 인터페이스를 사용하여 Concrete Strategy에 정의된 알고리즘을 호출합니다.

Concrete Strategy

  • Strategy 인터페이스를 사용하여 알고리즘을 구현합니다.

Context (Composition)

  • Concrete Strategy 객체로 구성됩니다.
  • Strategy 객체에 대한 참조를 유지합니다.
  • Strategy가 데이터에 접근 할 수 있는 인터페이스를 정의합니다.

언제 사용하나요?

  • 어떤 상황에서 사용할 알고리즘이 여러 개 존재할 수 있을 때 사용합니다. (알고리즘을 런타임에서 교체할 수 있기 때문에 효과적으로 대응 가능)

적용해보기


먼저 Strategy 인터페이스 역할을 할 프로토콜을 하나 정의합니다.


그리고 Strategy프로토콜을 채택하는 알고리즘들을 만들어줍니다.


그런 뒤에 만든 알고리즘들을 교체해가며 사용할 Context를 구현해줍니다.

이렇게 런타임마다 Strategy객체를 변경하면서 알고리즘을 바꿔 사용할 수 있습니다.

0개의 댓글