CS/개념정리
Composite Pattern
bell22
2023. 3. 1. 21:53
조금 예전에 공부했던 디자인 패턴인데, 다시 복습하면서 정리해보았다
디자인 패턴도 찾아보며 개발했던 열정 어디갔니 🥹
Composite 뜻
OOP에서 컴포지트는 하나 이상의 유사한 객체를 구성으로 설계된 객체로 모두 유사한 기능을 가짐
객체 그룹을 조작하는 것 처럼 단일 객체를 조작할 수 있음
Composite Pattern
클라이언트가 복합 객체/단일 객체를 동일하게 취급하는 것을 목적으로 함
트리 구조로 작성, 전체-부분 관계 표현
- 트리구조를 다룰 때, 개발자는 리프노드와 브랜치 구별해야함
- 복잡하게 만들지 않기 → 인터페이스 활용해서 작성한다던가
- Client 클래스는 Leaf와 Composite 클래스에 직접 참조 하지 마세욥 🙅♀️🙅♀️
- 인터페이스인 Component만 참조하기
- Leaf는 Component 인터페이스 구현
- Composite 는 Component 객체 자식들을 유지하고, operation() 같은 요청을 통해 자식들에게 전달
정리하자면
- Leaf: Component 인터페이스 구현, 구체 클래스
- Component: 모든 component를 위한 추상화 개념, 인터페이스
- Composite: Component 인터페이스 구현, 구현되는 leaf/composite 들을 가지고 관리하는 메소드 구현.
- 인터페이스에 작성된 메소드는 자식에게 위임하는 처리를 해줌
그럼 이렇게 구현 가능
Client는 → Coposite1에만 요청을 보내면 다 알아서 주루룩 되는 형태
Component 인터페이스를 구현한 객체들은 자신의 모든 자식 요소에게 전달
그럼 이걸 뭐에다가 쓰냐면
public class ImportCommand : CompositeCommand
{
public ImportInvoicesCommand()
{
AddChild(new PlayVideoCommand());
AddChild(new InsertToDatabaseCommand());
AddChild(new RequestToCameraCommand());
}
}
이런 식으로 클라이언트에서 수행할 작업들을 등록을 해 놓고
public void ImportInvoices()
{
var command = new ImportInvoicesCommand();
command.Execute();
}
Execute() 함수만 호출해주면, 위에서 AddChild로 등록해준 작업들이 실행되도록 활용할 수 있다
비슷한 작업인데 여러 건 진행할 때 사용하면 좋은 듯 하다.