Hello

[디자인 패턴] - Composite

by 볼빵빵오춘기

Composite 패턴

"부분-전체(Part-Whole)" 계층 구조를 구성할 때, 단일 객체와 복합 객체를 동일하게 취급할 수 있게 해주는 디자인 패턴이다.

 

예시 코드

Component root = new Folder("root");
root.add(new File("hello.txt"));
Folder subFolder = new Folder("sub");
subFolder.add(new File("world.txt"));
root.add(subFolder);
root.print(); // 폴더-파일 구조를 계층적으로 출력

 

Composite 패턴의 장점

단일 객체와 복합 객체를 동일하게 처리

클라이언트는 객체가 단순한지 복합적인지 신경 쓰지 않고 사용 가능하다.

 

재귀적 구조 표현에 적합

트리 구조처럼 자기 자신을 포함할 수 있는 구조 표현 가능하다.

 

유지보수 용이 & 확장성 뛰어남

새로운 구성요소 추가 시 기존 코드 변경 없이 확장 가능하다.

 

일관된 인터페이스 제공

클라이언트 코드가 단순해진다.(다형성 활용)

 

Composite 패턴의 단점

설계가 복잡해질 수 있음

단순한 구조에 사용하면 오히려 복잡도 증가

 

객체 간 관계 이해 어려움

트리 구조가 깊어지면 디버깅/테스트가 어려워짐

 

강한 타입 제어 어려움

복합 객체와 단일 객체가 동일하게 처리되므로, 특정 타입 제어가 애매할 수 있음

 

Composite 패턴은 언제 사용하나?

트리 구조 표현이 필요한 경우

폴더-파일 구조, 조직도, UI 구성요소 트리 등

 

클라이언트가 복합 객체와 단일 객체를 구분하지 않고 다뤄야 할 때

 

재귀적으로 구조를 구성해야 할 때

GUI 구성, HTML DOM, 메뉴 시스템

 

정리하자면

Composite 패턴은 트리 구조의 객체를 동일한 방식으로 처리하기 위해 사용하는 패턴이다.

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기