Composite Pattern

YeJI Kang·2021년 6월 13일
0

Head First Design Pattern

목록 보기
11/14

컴포지트 패턴(Composite Pattern) 디자인

컴포지트 패턴(Composite Pattern)은 객체들을 트리 구조로 구성할 때 쓰는 디자인 패턴입니다.

우선, 객체는 트리 구조와 동일하게 1. Leaf 노드와 2. Leaf 노드가 아닌 Composite 노드가 있습니다. 이 두 객체는 상위 개념인 Component 클래스를 상속받고 재귀적인 구조를 구성합니다. 상위 클래스인 Component 클래스는 이 두 객체에서 구현해야하는 모든 함수를 포함하고 있습니다.

Composite 클래스는 자식이 있는 구성요소의 행동을 정의하고 자식 구성요소를 저장하는 역할을 합니다. Leaf 클래스는 그 안에 들어있는 원소에 대한 행동을 정의합니다.

컴포지트 패턴(Composite Pattern) 예제

아래 다이어그램은 컴포지트 패턴의 예제입니다.

MenuItemLeaf 노드의 역할을 하고, MenuComposite 역할을 수행합니다. 모든 구성요소는 MenuComponent 인터페이스를 구현해야만 합니다. 하지만 하위 두 클래스의 역할이 다르기 때문에 각 역할에 맞게 메소드는 구현하고 나머지 메소드는 상위 클래스의 기본 메소드를 사용합니다.

reference code

컴포지트 패턴(Composite Pattern) 정의

컴포지트 패턴(Composite Pattern)을 이용하면 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있습니다. 이 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체(composite)를 똑같은 방법으로 다룰 수 있습니다.

컴포지트 패턴을 이용하면 객체의 구성과 개별 객체를 노드로 가지는 트리 형태로 객체를 구축할 수 있습니다. 이런 복합 구조(composite structure)를 사용하면 복합 객체와 개별 객체에 대해 똑같은 작업을 적용할 수 있습니다.

컴포지트 패턴에서는 단일 책임 원칙을 위반하면서 투명성을 확보하기 위한 패턴이라고 할 수 있습니다. 상위 클래스에 자식들을 관리하기 위한 모든 기능을 넣음으로써 Composite 객체와 Node 객체를 똑같은 방식으로 처리할 수 있도록 할 수 있습니다.

Component 클래스에는 두 종류의 기능이 모두 있어 안정성은 조금 떨어지게 되지만, 컴포지트 패턴을 사용하지 않고 서로 다른 인터페이스로 분리를 할 경우, instanceOf 함수와 같이 투명성이 떨어지는 코드를 사용해야 합니다.

profile
재밌는 것만 하고 싶어 ʕ•ﻌ•ʔ

0개의 댓글