728x90
복합체 패턴(Composite Pattern)이란?
- 복합 객체와 단일 객체를 동일한 컴포넌트로 취급
- 클라이언트에게 둘을 구분하지 않고 동일한 인터페이스를 사용하도록 하는 구조 패턴
- 그릇과 내용물을 동일시해 재귀적인 구조를 만들기 위한 디자인 패턴
언제 사용하는 가?
- 트리 계층 구조를 정의해야 할 때 유용
- 리눅스의 파일 시스템 구조를 떠올려보면 쉽게 이해할 수 있다.
- 폴더 안에 파일이나 폴더가 들어있을 수 있다. 이러한 객체를 composite 객체라 부른다. 파일은 단일 객체라 leaf 객체라 부른다.
복합체 패턴은 composite 객체와 leaf 객체를 동일 취급해
복잡해 질수도 있는 복합객체를 재귀동작을 통해 하위 객체에게 작업을 위임
클래스 다이어그램
예시 코드
클래스 구성
interface Component{
void operation();
}
class Leaf implements Component {
@override
public void operation() {
System.out.println(this + "호출");
}
}
class Composite implements Component {
List<Component> components = new ArrayList<>();
public void add(Component c) {
components.add(c); //리스트 추가
}
public void remove(Componet c) {
components.remove(c); //리스트 삭제
}
@Override
public void operation() {
System.out.println(this + "호출");
//내부 리스트를 순회화여, 단일 leaf이면 값을 출력,
//서브 복합객체이면, 다시 그 내부를 순환하는 재귀 함수 동작
for(Component component: components) {
component.operation();// 자기 자신을 호출
}
}
public List<Component> getChild() {
return components;
}
}
Client 클래스
class Client {
public static void main(String[] args) {
//1. 최상위 복합체 생성
Composite composite1 = new Composite();
//2. 최상위 복합체에 저장할 Leaf와 또다른 서브 복합체 생성
Leaf leaf1 = new Leaf();
Composite composite2 = new Composite();
//3. 등록
composite1.add(leaf1);
composite1.add(composite2);
//4. leaf 생성
Leaf leaf2 = new Leaf();
Leaf leaf3 = new Leaf();
Leaf leaf4 = new Leaf();
//5. 서브 복합체에 개체들을 등록
composite2.add(leaf2);
composite2.add(leaf3);
composite2.add(leaf4);
//6. 최상위 복합체의 모든 자식들을 출력
compoiste1.operation();
}
}
출력값
composite1
leaf
composite2
leaf2
leaf3
leaf4
출처: https://inpa.tistory.com/entry/GOF-💠-복합체Composite-패턴-완벽-마스터하기
728x90
'디자인패턴' 카테고리의 다른 글
Iterator 패턴이란? (0) | 2024.06.03 |
---|---|
Apdaptor 패턴이란? (0) | 2024.05.26 |
State Pattern (상태패턴) 이란? (0) | 2024.04.25 |
데코레이터 (Decorator) 패턴이란? (0) | 2024.02.20 |
JAVA에서의 Observer 패턴 (0) | 2024.02.09 |