[JAVA/디자인패턴] Composite Pattern, 컴포지트 패턴
2023. 12. 5. 14:22
반응형
Composite Pattern
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() 시에는 해당 리스트의 모든 도형들의 메서드를 호출한다.
이를 통해서 클라이언트 코드에서는 개별 도형과 복합 도형을 모두 동일한 방식으로 처리할 수 있다.
반응형
'CS > Design pattern' 카테고리의 다른 글
[JAVA/디자인패턴] Builder Pattern, 빌더 패턴 (0) | 2024.01.29 |
---|---|
[JAVA/디자인패턴] MVC Pattern, MVC 패턴 (0) | 2023.12.11 |
[JAVA/디자인패턴] Template Method Pattern, 템플릿 메서드 패턴 (0) | 2023.12.05 |
[JAVA/디자인패턴] Command Pattern, 커맨드 패턴 (0) | 2023.11.29 |
[JAVA/디자인패턴] State Pattern, 상태 패턴 (2) | 2023.11.29 |