본문 바로가기

Coding Note

[Design pattern] Composite

Composite pattern : 계층구조에서 그룹과 그 말단을 동일한 인터페이스로 동일하게 처리할 수 있게 구조화하는 기법이다. 계층구조에서 말단의 컴포넌트와 그 그룹의 인터페이스가 서로 다르다면, 이들이 이루는 집단을 관리할 때 이들 타입에 따른 처리를 모두 고려하여야 하지만, 동일한 인터페이스로 구성하기 때문에 그런 수고가 줄어들게된다.


프로그램 구조에서 '트리'는 상당히 많은부분에서 응용된다. 트리는 브랜치(branch)와 리프(leaf)를 처리해야 하는데, 두 가지 타입에 대한 처리를 분리해야한다면 프로그램 구조가 복잡해 질 수 있다. 이런 부분에서 Composite pattern은 다른 두 구성을 하나로 묶어줄 수 있기때문에 프로그램 구조를 보다 명확하게 나타낼 수 있다.


동일한 인터페이스를 서로다른 타입의 객체가 구현하고있기 때문에 클라이언트에서는 하나의 인터페이스만으로도 두가지 타입의 객체를 동일하게 처리할 수 있게된다. 물론 다른 기능에 대해서는 추가적으로 구현해야겠지만, 같은 인터페이스를 공유하지 않는것보다는 확실히 효과적이다. 그리고,, Composite pattern을 자세히 보면, OOP에서 인터페이스의 존재목적에 충실한 패턴임을 알 수 있다.


프로그램에서 계층구조가 적용되는 부분이 상당히 많은 만큼, 이러한 인터페이스의 활용은 유용한편이다.

대부분의 OS에서 파일구조가 계층적이고, UI의 컴포넌트들이 이루는 구조또한 계층적이다(레이아웃 패널에 속한 여러 컴포넌트들을 생각해보면 트리구조임을 쉽게 알 수 있다). 네트워크의 형태또한 계층적일 수 있으며 여러 형태의 문서들또한 계층을 이루어 관리한다. (XML, HTML, etc...)



Button클래스와 ComponentContainer클래스가 Composite한 상태이다. 


Composite pattern에 대한 예제는 따로 필요없을것같다.


한줄요약 : Composite한 상황에서 Unity하게 처리하고싶다면 Composite pattern으로.

'Coding Note' 카테고리의 다른 글

[Design pattern] Facade  (0) 2013.03.04
[Design pattern] Decorator  (0) 2013.03.03
[Design pattern] Bridge  (0) 2013.02.20
[Design pattern] Adapter  (0) 2013.02.20
[Design pattern] Iterator  (0) 2013.02.04