컴포지트(Composite) 패턴: 구조패턴
객체들의 관계를 트리 구조로 구성하여 사용자로 하여금 복합 객체와 단일 객체를 구분없이 다룰 수 있도록 하는 패턴
- Component
- Leaf 클래스와 전체에 해당하는 Composite 클래스에 공통 인터페이스를 정의 - Leaf
- 부분 클래스
- Composite 객체의 부품으로 설정 - Composite
- 전체 클래스
- 복수 개의 Leaf, 심지어 복수 개의 Composite 객체를 부분으로 가질 수 있음
정의에 나와있는 대로 객체들의 관계를 위의 내용을 토대로 하여 트리 구조로 만드는 것이 컴포지트 패턴!
대표적으로 폴더구조를 생각하면 이해하기 쉬울 것이다.
장점:
- 객체들이 모두 같은 타입으로 취급되기 때문에 새로운 클래스 추가가 용이하다.
- 단일객체, 집합객체 구분하지 않고 코드 작성이 가능하다.
단점:
- 설계를 일반화 시켜 객체간의 구분, 제약이 힘들다.
FileSystem
public interface FileSystem {
public int getSize();
public void remove();
}
File
public class File implements FileSystem{
private String name;
private int size;
public File(String name, int size){
this.size = size;
this.name = name;
}
@Override
public int getSize() {
System.out.println("파일 사이즈 : " + this.size);
return this.size;
}
@Override
public void remove() {
System.out.println("삭제합니다");
}
}
Folder
import java.util.ArrayList;
public class Folder implements FileSystem{
private String name;
private ArrayList<FileSystem> fileList;
public Folder(String name){
fileList = new ArrayList<>();
this.name = name;
}
public void add(FileSystem fileSystem){
this.fileList.add(fileSystem);
}
@Override
public int getSize() {
// 파일 리스트 돌면서 사이즈 get
return 0;
}
@Override
public void remove() {
// 파일 리스트 돌면서 삭제
}
}
파일 리스트안에 또 폴더가 있을 수 있다. 그 폴더안에는 자신만의 파일 리스트를 가질 수도 있고.
이런 식으로 트리구조를 만들 수 있다는 것!
Reference
'OOP > Design Pattern' 카테고리의 다른 글
10. 퍼사드(Facade) 패턴 (0) | 2023.02.20 |
---|---|
09. 데코레이터(Decorator) 패턴 (0) | 2023.02.14 |
07. 어댑터(Adapter) 패턴 (0) | 2023.02.14 |
06. 싱글톤(Singleton)패턴 (0) | 2023.02.13 |
05. 프로토타입(Prototype) 패턴 (0) | 2023.02.13 |