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입니다. 다시 말해, 개별적인 객체들과 객체들의 집합간의 처리 방법의 차이가 없을 경우에 사용하면 됩니다.

728x90

'디자인 패턴' 카테고리의 다른 글

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