디자인 패턴 - 스트래티지 패턴(Design pattern - Stratege pattern)

정의 : 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘군을 정의하고 각각을 캡슐화하는 것.

 객체와 그 객체의 행동을 따로 분리해서 생각해보자. 각 객체는 자신의 행동을 직접 정의하고 있는 게 아니라 행동에 해당하는 다른 객체를 구성(인스턴스 변수로 다른 객체를 저장하는 방식)으로서 가지고 있다.
 예를 들어 Behavior라는 인터페이스가 있다고 하자. 이 Behavior를 상속받아 정의한 클래스가 있다면 주체가 되는 객체는 자신의 행동을 직접 정의할 필요 없이 Behavior 인터페이스만 가지고 행동할 수 있으며, 동적으로 객체의 행동을 정하거나 교체할 수도 있다.

예시 :
 Bird 클래스를 상속받는 Sparow, Crow, Penguin을 만들어보자.
Sparow.Fly(), Crow.Fly(), Penguin.Fly()를 따로 구현하게 된다면 코드 중복이 발생하며, 확장이나 변경 등에도 유연하지 않다.
 이를 방지하기 위해 FlyBehavior 인터페이스를 만들고, 이를 구현한 FlyByWings, FlyByNoWing을 만든다.
 Bird는 Fly() 대신 this.FlyBehavior.Fly()를 호출하도록 한다.

스트래티지 패턴은 즉, 객체의 행동 중 바뀌어야 하는 것들을 분리한 인터페이스를 구성으로서 가지고 있게 한 것이다.

댓글

이 블로그의 인기 게시물

디자인 패턴 - 더티 플래그(Dirty flag)

디자인 패턴 - 서비스 중개자 패턴(Service locator pattern)

인공지능 - 유한 상태 기계(Finite state machine)