본문 바로가기
SW

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 5장 행동패턴에 대한 논의

by 라꾸스떼(YR) 2020. 5. 15.
반응형

행동 패턴에 대한 논의]
<다양성의 캡슐화>
많은 행동 패턴의 주된 목적이 바로 다양성을 캡슐화하려는 것이다. 행동 패턴에서는 일반적으로 양상을 캡슐화한 객체를 나타내는 추상 클래스를 정의하고, 이 클래스의 이름이 곧 패턴의 이름이 된다.
-Strategy 객체는 알고리즘을 캡슐화
-State 객체는 상태에 의존적인 행동을 캡슐화
-Meditator 객체는 객체 사이의 프로토콜을 캡슐화
-Iterator 객체는 집합 객체의 구성요소에 접근하거나 원소들을 순회하는 방법을 캡슐화
대부분 패턴에서는 두 가지 종류의 객체를 정의한다. 이 다양성을 보인 특성을 캡슐화한 객체와 이렇게 정의한 새로운 객체를 이용하는 기존의 객체이다. 모든 패턴이 클래스간의 정적 의사소통 방법을 정의하는 것은 아니다.
<인자가 되는 객체>
몇몇 패턴에서는 항상 객체를 인자로 사용하는 예를 볼 수 있다.
<의사소통을 캡슐화할 것인가, 분산시킬 것인가?>
감시자 패턴은 Observer 클래스와 Subject 클래스를 도입함으로써 객체 간의 상호교류를 분산시킨 패턴이고, 중재자 패턴은 다른 객체 사이의 교류를 Mediator 객체 내에 캡슐화한 것이다.
감시자 패턴에서는 하나의 객체가 모든 조건을 처리하지 않는다. 중재자 패턴은 객체 간의 교류 방법을 분산하기 보다는 집중화한다. 즉, Mediator 클래스에 모든 처리 조건을 담당하도록 한다.
재사용이 가능한 객체로 만들기 쉬운가에 대한 부분만 보면, 감시자 패턴이 중재자 패턴보다는 조금 더 괜찮다.
객체 간에 어떤 흐름이 있는지 파악하는 데는 중재자 패턴이 감시자 패턴보다 더 낫다.
C++ 개발자들은 중재자 패턴을 많이 사용한다.
<메시지 송신자와 수신자 사이의 결합도 없애기>
명령, 감시자, 중재자, 책임 연쇄 패턴은 메시지를 보내는 송신자와 메시지를 받는 수신자 사이의 결합도를 없애려는 패턴이다.
-명령 패턴은 Command 객체를 이용해서 결합도를 없애준다. Command 객체는 요청을 만들어 내는 간단한 인터페이스만 제공한다.
-감시자 패턴은 송신자 객체와 수신자 객체 간의 결합도를 없애기 위해서 주체에서 일어난 변경을 알려주는 인터페이스를 정의한다.
-중재자 패턴은 Mediator 객체를 다른 객체에 간접적으로 참조하게 하여 객체 간의 종속성을 줄인다.
-책임 연쇄 패턴은 메시지를 받아 처리할 수 있는 연결 고리를 따라서 계속 처리 요청을 보냄으로써 메시지를 보낸 객체와 받는 객체 간의 종속성을 없앤다.
<결론>
몇 가지 예를 제외하면 행동 패턴들끼리는 서로 보완적이며 서로의 기능을 강화시켜 준다. 행동 패턴은 또 다른 유형의 패턴과도 잘 통합될 수 있다. 클래스 또는 객체 수준에서 하는 조합이 아닌, 패턴 수준에서 하는 조합이 되어야 높은 활용성을 동반한 한결같은 시너지를 낼 수 있다.

반응형

댓글