[java] 컴포지트 패턴

컴포지트 패턴은 객체들을 트리 구조로 구성하여 개별 객체나 객체 그룹을 동일한 방법으로 다룰 수 있도록 하는 구조적 디자인 패턴입니다. 이 패턴은 단일 객체와 복합 객체를 동일하게 취급하여 클라이언트가 객체를 명시적으로 구분하지 않고도 처리할 수 있게 해줍니다.

컴포지트 패턴의 구성 요소

컴포지트 패턴은 세 가지 중요한 구성 요소로 이루어집니다.

  1. Component(구성 요소): 단일 객체와 복합 객체에 대한 인터페이스를 정의합니다.
  2. Leaf(잎): 복합 객체 안에 들어가는 단일 객체를 나타내는 클래스입니다. 이 클래스는 더 이상 하위 객체를 가질 수 없습니다.
  3. Composite(복합체): 단일 객체와 복합 객체를 하나의 객체로 표현하는 클래스입니다. 복합 객체 안에 다른 Leaf나 Composite 객체를 가질 수 있습니다.

예제 코드

다음은 컴포지트 패턴을 Java로 구현한 간단한 예제 코드입니다.

interface Component {
    void operation();
}

class Leaf implements Component {
    public void operation() {
        System.out.println("Leaf operation");
    }
}

class Composite implements Component {
    private List<Component> children = new ArrayList<>();

    public void add(Component component) {
        children.add(component);
    }

    public void remove(Component component) {
        children.remove(component);
    }

    public void operation() {
        for (Component component : children) {
            component.operation();
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Component leaf1 = new Leaf();
        Component leaf2 = new Leaf();
        
        Composite composite = new Composite();
        composite.add(leaf1);
        composite.add(leaf2);
        composite.operation();
    }
}

컴포지트 패턴의 장단점

컴포지트 패턴은 객체의 일관된 처리유연한 구조를 제공하므로, 계층적인 구조를 갖는 객체들을 다루는 프로그램을 구현할 때 유용합니다. 그러나 객체 구조가 복잡해지면 코드를 이해하고 유지보수하기가 힘들어질 수 있습니다.

컴포지트 패턴은 트리 구조와 같이 계층적인 구조를 갖는 객체를 다루는 데 적합합니다. 이 패턴은 파일 시스템, 조직도, 메뉴 구조 등에서 유용하게 활용될 수 있습니다.

결론

컴포지트 패턴은 객체들을 계층적인 구조로 표현하여 객체들 간의 관계를 쉽게 다룰 수 있게 해줍니다. 이 패턴은 유연성과 확장성을 가지고 있어, 객체들의 복합 구조를 다루는 프로그램을 개발할 때 유용하게 활용될 수 있습니다.

더 자세한 내용은 GeeksforGeeks를 참고할 수 있습니다.