[java] 컴포지트 패턴
컴포지트 패턴은 객체들을 트리 구조로 구성하여 개별 객체나 객체 그룹을 동일한 방법으로 다룰 수 있도록 하는 구조적 디자인 패턴입니다. 이 패턴은 단일 객체와 복합 객체를 동일하게 취급하여 클라이언트가 객체를 명시적으로 구분하지 않고도 처리할 수 있게 해줍니다.
컴포지트 패턴의 구성 요소
컴포지트 패턴은 세 가지 중요한 구성 요소로 이루어집니다.
- Component(구성 요소): 단일 객체와 복합 객체에 대한 인터페이스를 정의합니다.
- Leaf(잎): 복합 객체 안에 들어가는 단일 객체를 나타내는 클래스입니다. 이 클래스는 더 이상 하위 객체를 가질 수 없습니다.
- 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를 참고할 수 있습니다.