책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.
그릇과 내용물을 동일시하여 재귀적인 구조를 형성
디렉토리(그릇), 파일(내용물)을 디렉토리 엔트리라는이름으로 같은 종류로 동일시
Leaf 내용물, 이 안에 다른 것을 넣을 수 없다, File 클래스
Composite 그릇, Leaf와 Composite을 넣을 수 있다, Directory 클래스
Component Leaf와 Composite을 동일시하기 위한 역할, 공통되는 상위 추상 클래스, Entry
Main
Directory클래스
public class Directory extends Entry { // Entry는 File과 Directory의 공통 추상 클래스
private String name;
private List<Entry> directory = new ArrayList<>();
public Directory(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public int getSize() { // 재귀적 구조로 호출
int size = 0;
for (Entry entry: directory) {
size += entry.getSize();
}
return size;
}
@Override
public void printList(String prefix) { // 재귀적 구조로 호출
System.out.println(prefix + "/" + this);
for (Entry entry: directory) {
entry.printlist(prefix + "/" + name); // 넘기는 값이 name인 점을 다시 보자
}
}
public Entry add(Entry entry) {
directory.add(entry);
return this;
}
}
1. 복수와 단수의 동일시라고 볼 수 있다
- 여러 개를 모아 마치 하나의 것처럼 취급
- 여러 개를 모아 하나로 다루지만 그 안에서 개별적으로 처리 가능
2. 글머리기호, 일반적으로 트리 구조로 된 데이터 구조는 Composite 패턴에 해당한다
- 항목
- 이 안에 또 다른 항목을 추가하여 재귀적 구조 가능
- 항목
- 항목
- 항목
- 항목
Decorator 패턴은 장식틀과 내용물을 동일시하고, Composite 패턴은 그릇과 내용을 Component 역으로 동일시한다. 마찬가지로 Decorator 패턴도 재귀 구조를 활용하는데, Decorator 패턴은 유연하게 기능을 추가하기 위해 활용하고 Composite 패턴은 그릇과 내용물을 동일시하는 부분에 주안점을 둔다.
'문제 및 이론 정리 > 디자인패턴' 카테고리의 다른 글
[디자인패턴] Factory Method - 하위 클래스에서 인스턴스를 만든다 (0) | 2025.03.02 |
---|---|
[디자인패턴] State - 상태를 클래스로 표현한다 (0) | 2025.02.25 |
[디자인패턴] Proxy - 필요해지면 만든다 (0) | 2025.02.22 |
[디자인패턴] Decorator - 장식틀과 내용물을 동일시한다 (0) | 2025.02.21 |
[디자인패턴] Visitor - 데이터 구조를 돌아다니면서 처리한다 (0) | 2025.02.18 |