** 이 블로그에서 작성하는 디자인 패턴의 포스팅은 GoF의 디자인패턴 서적을 참고하여 기술하고 있습니다.
갈수록 많은 디자인 패턴이 발견됨에 따라 상황에 맞는 디자인 패턴을 찾아내거나, 그룹화 하여 같은 그룹에 속하는 패턴끼리 비교가 용이하도록 분류해야 할 필요성이 생기게 되었다. 따라서 디자인 패턴을 조직화 함으로써, 패턴을 조직화하여 패턴을 더 빨리 배울 수 있고 새로운 패턴을 발견하고자 노력할 수 있게 된다.
패턴의 분리 기준은 목적과 범위다. 우선 목적의 기준에서 패턴은 생성, 구조, 행위 중의 한 가지 목적을 갖는다. 생성 패턴은 객체의 생성 과정에 관여하는 것이고 구조 패턴은 클래스나 객체의 합성에 관한 패턴들이다. 행위 패턴은 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의한다.
두번째로 범위의 기준에서는 패턴을 주로 클래스에 적용하는지 아니면 객체에 적용하는지를 구분하는 것이다. 클래스 패턴은 클래스틀과 서브클래스들 간의 관련성을 다루는 패턴이다. 여기서 말하는 관련성이란 주로 상속이며 컴파일 시점에 정적으로 결정된다. 객체 패턴은 객체 관련성을 다루는 것으로 런타임 시에 동적으로 변경할 수 있다. 대부분의 패턴들은 어느 정도 상속을 이용한다. 클래스 패턴으로 정의한 패턴만이 클래스 관련성을 이용하는데, 위의 표에서 보는 바와 같이 일부만이 클래스 패턴이고 대부분의 패턴은 객체의 영역에 속한다.
이를 표로 도식화하면 아래와 같은 표로 정리할 수 있다.
- 생성-클래스 패턴
객체를 생성하는 책임의 일부를 서브 클래스가 담당한다. - 생성-객체 패턴
객체를 생성하는 책임을 다른 객체에게 위임한다. - 구조-클래스 패턴
상속을 이용해서 클래스를 합성한다. - 구조-객체 패턴
객체를 합성하는 방법을 정의하고 있다. - 행위-클래스 패턴
상속을 이용해서 알고리즘과 제어 흐름을 기술한다. - 행위-객체 패턴
하나의 작업을 수행하기 위해 객체 집합이 어떻게 협력하는지를 기술한다.
일부 패턴들은 함께 사용해야 하는 경우도 있다. 예시로 Composite 패턴은 Iterator 패턴과 Visitor 패턴과 함께 사용해야 하는 경우가 대부분이다. Prototype 패턴은 Abstract Factory 패턴의 대안으로 사용될 수 있다. 한편 패턴들 간의 의도는 다르지만, 결과적으로는 유사한 설계의 구조를 가지는 패턴도 있다. Composite 패턴과 Decorator 패턴의 경우, 의도는 다르지만 매우 유사한 구조를 가지고 있다.
목적과 범위, 클래스와 객체을 기준으로 하는 것이 아닌, 다른 방법으로 패턴을 조직하는 방법도 있다. 위의 그림과 같이 패턴들 간의 참조 관계에 따라 관리하는 것이다.
** 관계도를 멍하니 보고 있자니 화살표로만 표시되어 있어, 어떻게 관계가 정의되는 건지 헷갈렸다. (이건 패턴이 어떤 역할을 하는지 어떻게 구현되어 있는지를 잘 모르기 때문이긴 할 것 같다..)
그래서 관계도를 참고할 때 각 관계간의 정의를 조금 더 쉽게 볼수 있도록 관계의 정의에 대한 내용을 검색했고 위와 같은 내용을 발견했다. 위의 그림은 디자인 패턴 관계도의 관계 정의이다. 관계도에 있는 내용을 가지고 이야기 해보면 이해가 빠를듯 하다.
- Facade 패턴은 Singleton 패턴을 통해 구현 된 single instance를 이용한다.
- Singleton 패턴은 Abstract Factory 패턴과 Facade 패턴에 사용된다.
** 사실 아직은 각 패턴들의 내용을 잘 모르기 때문에 정확하게 관계에 대한 정의를 내리긴 어렵다. 각 패턴들을 학습하고 나서 업데이트를 하도록 해봐야 겠다.
디자인 패턴을 분류할 수 있는 방법은 다양하다. 따라서 패턴을 다양한 각도로 생각해보면서 패턴이 무엇을 하고, 다른 패턴들과 어떻게 비교할 것이며, 언제 어떻게 적용할 것인가에 대한 고민을 하면서 디자인 패턴을 학습해 나가는게 중요할 것 같다.
'Development > 디자인패턴' 카테고리의 다른 글
디자인 패턴을 이용하는 방법 (2) (0) | 2022.04.18 |
---|---|
디자인 패턴을 이용하는 방법 (1) (0) | 2022.04.14 |
디자인 패턴의 종류 (0) | 2022.04.13 |
디자인 패턴이란 무엇인가? (0) | 2022.04.12 |
디자인 패턴 - Introduction (4) | 2022.04.12 |