[JAVA/디자인패턴] Composite Pattern, 컴포지트 패턴

2023. 12. 5. 14:22
반응형

 

 

Composite Pattern

https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8F%AC%EC%A7%80%ED%8A%B8_%ED%8C%A8%ED%84%B4

 

 

Composite Pattern은 객체들을 트리 구조로 구성하여 단일 객체처럼 다룰 수 있도록 하는 디자인 패턴이다.

이 패턴은 개별 객체와 복합 객체를 동일한 방식으로 처리하여, 클라이언트 코드에서 객체를 일관된 방법으로 다룰 수 있습니다.

 

 

 


예제 : 도형과 도형 그룹

 

Component

public interface Shape {
    void draw();
}

 

모든 도형의 공통 인터페이스를 나타낸다. 이를 Component로서 사용한다.

 

 

Leaf

public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("원 그리기");
    }
}
public class Rectangle implements Shape{
    @Override
    public void draw() {
        System.out.println("사각형 그리기");
    }
}

 

개별 도형을 나타낸다. 이를 Leaf로 칭한다.

 

Composite

//CompositeShape
public class Group implements Shape{
    private List<Shape> shapes = new ArrayList<>();

    public void addShape(Shape shape) {
        shapes.add(shape);
    }

    public void removeShape(Shape shape) {
        shapes.remove(shape);
    }

    @Override
    public void draw() {
        System.out.println("도형 그룹 한 번에 그리기");
        for (Shape shape : shapes) {
            shape.draw();
        }
    }
}

 

Composite에 해당하는 클래스이다.

Component인 Shape처럼 사용 가능하면서, 여러가지 도형(Leaf)들을 혼합하여 복합 도형 그룹을 구성하였다.

멤버변수로는 Shape들의 List를 저장하여 관리해두며, draw() 시에는 해당 리스트의 모든 도형들의 메서드를 호출한다.

 

이를 통해서 클라이언트 코드에서는 개별 도형과 복합 도형을 모두 동일한 방식으로 처리할 수 있다. 

반응형

BELATED ARTICLES

more