Composite Pattern
2020. 7. 3. 14:53ㆍ디자인 패턴
반응형
Composite Pattern
Composite Pattern이란 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴입니다. 즉, 전체-부분의 관계를 갖는 객체들 사이의 관계를 정의할 때 유용합니다. 또한 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수 있습니다.
- Component: 모든 표현할 요소들의 추상적인 인터페이스
- Leaf: Component로 지정된 인터페이스를 구현한 객체
- Composite: Component 요소를 자식으로 가지고 Component 요소를 관리하기 위한 메소드들을 구현한 객체
Composite Pattern의 예시
예를 들어 간단한 파일 시스템을 구현해보겠습니다. 먼저 필요한 것은 파일입니다. - File.java*
class File { private String name; }
그리고 파일들을 가질 수 있는 디렉토리가 필요합니다.
Directory.java
class Directory {
private String name;
private List<File> children;
public void add(File file) {
}
디렉토리 객체는 자신의 이름과 파일들을 가질 수 있습니다. add() 메소드를 이용해 파일을 추가할 수도 있습니다. 하지만 이 구조로는 디렉토리 안에 디렉토리를 포함시킬 수 없습니다. 이를 해결하기 위해 아래와 같이 변경해 줍니다.
Node.java
interface Node {
String getName();
}
File.java
class File implements Node {
private String name;
@Override
public String getName(){ return name;}
}
Directory.java
class Directory implements Node {
private String name;
private List<Node> children;
@Override
public String getName(){ return name; }
public void add(Node node) { children.add(node); }
}
위와 같이 단일 객체(File)이든 객체들의 집합(Directory)이든 같은 방법(Node)로 취급 하는 방법이 Composite Pattern입니다. 다시 말해, 개별적인 객체들과 객체들의 집합간의 처리 방법의 차이가 없을 경우에 사용하면 됩니다.
반응형
'디자인 패턴' 카테고리의 다른 글
Strategy Pattern (0) | 2024.01.10 |
---|---|
Factory Pattern (0) | 2020.05.06 |
Chain Of Responsibility (0) | 2020.05.02 |
Observer Pattern (0) | 2020.05.02 |
Template Method Pattern (0) | 2020.05.01 |