Ch.1 디자인 패턴 소개와 전략 패턴

누군가 이미 여러분의 문제를 해결해 놓았습니다

About

오리를 시뮬레이션 하는 가상의 프로그램인 SimUDuck을 예시로 전략 패턴을 적용해본다.

The Code

행동과 알고리즘군

오리의 행동들을 일련의 행동으로 생각하는 대신, 알고리즘군(family of algorithms)으로 생각해보자.

  • SimUDuck 디자인에서 알고리즘은 오리가 꽥꽥거리고 나는 행동에 국한되지만, 실제 세계에서는 지역에 따라 달라지는 세금 계산 방식을 구현한다던지에도 적용할 수 있다.

  • 클래스들이 어떤 관계를 갖고 있는지 (A는 B이다 / A에는 B가 있다 / A가 B를 구현한다 / ...) 관심을 기울여 보자.

두 클래스를 합치는 방법 - 합성 (Composition)

책에서는 composition이 "구성"으로 번역되어 있지만 "합성"이라는 말이 더 익숙하기도 하고 의미에 잘 맞는다고 생각하여 "합성"으로 적겠습니다.

  • 각 오리는 FlyBehavior, QuackBehavior가 있으며 각각 나는 행동과 꽥꽥거리는 행동을 위임 받는, "A에는 B가 있다" 관계이다. 이런 식으로 두 클래스를 합치는 것을 합성(composition)을 이용한다고 한다.

전략 패턴 (Strategy Pattern)

알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다.

디자인 패턴의 장점

  • 서로 알고 있는 패턴은 패턴 이름과 그 패턴에 담겨 있는 모든 내용, 특성, 제약조건 등을 함께 이야기할 수 있다.

  • 패턴을 사용하면 간단한 단어로 많은 이야기를 할 수 있다.

  • 패턴 수준에서 이야기하면 '디자인'에 더 오랫동안 집중할 수 있다.

  • 전문 용어를 사용하여 오해의 소지를 줄여 개발팀의 능력을 극대화할 수 있다.

  • 전문 용어는 신입 개발자에게 훌륭한 자극제가 된다.

My Thoughts

살면서 처음 읽어보는 Head First 시리즈 책인데, 아주 마음에 든다. 아직 첫 챕터지만 대화형으로 진행하고 "백문이 불여일견"이라고 글보다는 그림이 많은 게 너무 편안하다... 가독성이 정말 좋은 책인 것 같다.

디자인패턴 책은 GoF의 디자인패턴 책만 갖고 있었는데, 아주 재밌게 읽을 수 있을 것 같다.

코드는 모두 자바로 되어있는 듯 하지만, 타입스크립트로 직접 코드를 바꿔서 적어볼까 한다.

REF

레퍼런스는 이쪽이다. (Thank you for sharing your work!)

Last updated