본문 바로가기

Design Patterns

Strategy Pattern ③ 정리

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
책에서는 세가지의 디자인 원칙을 내세우면서 궁극적으로 Strategy Pattern으로 가기 위한 로드맵을 제공합니다.

① 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.

② 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.

③ 상속보다는 구성을 활용한다.


① 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.

attack(), move(), stop().. 등의 바뀌는 부분을 분리시켜서 따로 만들어 준것 기억하시죠? 그것들을 행동 별로 나누어서 또 세분화 시켜준 것을 의미합니다.

사용자 삽입 이미지



② 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.

이전에 있던 Attackable과 같은 인터페이스는 Terran을 상속받는 구체적인 유닛 클래스가 구체적으로 구현을 했지만 AttackBehavior 인터페이스를 통해 이를 또 구체화 하는 클래스를 만듬으로서, Terran의 서브 클래스인 유닛들(인터페이스를 구현한)로만 국한 되었던 구체적인 행동들이 다른 유닛에서도 사용할 수 있게 됐습니다.


③ 상속보다는 구성을 활용한다.

'A는 B이다' (상속) 보다 'A에는 B가 있다' (구성) 라고 하는것이 좋은 경우가 있다고 합니다. 이전에 '행동을 위임한다' 라는 이야기를 했었는데요. Terran이라는 추상클래스 내부에는 AttackBehavior, MoveBehavior, RestoreBehavior 의 객체를 속성값으로 가지고 또 그것을 이용하여, 공격하고, 움직이고, 회복시키는 메소드들을 구체화 시킬 클래스에서 구현하여 사용할 수 있게 하죠. 말이 많이 이상합니다만, 다시 말하자면 Terran 클래스에는 틀을 갖추어 놨다고 보면 좋겠습니다.

이렇게 구성을 이용하면 유연성을 향상시킬수 있고, 앞으로 사용하게 될 디자인 패턴에 자주 쓰이게 됩니다. 따라서 구성에 대한 명확한 설명은 차차 진행해 나가면서 하도록 하겠습니다~


Strategy Pattern에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 이 패턴을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.