Composite Pattern (컴포지트 패턴)
왜 "Composite"인가?
"Composite"은 "합성"이라는 뜻을 가지며, 이 디자인 패턴은 복합 객체(Composite object)와 단일 객체(Single object)를 함께 사용할 수 있게 하기 때문에 이런 이름이 붙었습니다.
컴포지트 패턴이란?
컴포지트 패턴은 객체를 트리 구조로 구성하여 복합 객체와 단일 객체를 동일하게 다룰 수 있게 해주는 디자인 패턴입니다. 이를 통해 클라이언트는 개별 객체와 복합 객체를 일관된 방식으로 처리할 수 있습니다.
컴포지트 패턴 쉽게 이해하기
아이스크림 매장을 상상해 보세요. 누가바, 돼지바, 보석바와 같은 개별 아이스크림 객체가 있습니다. 만약 이들을 하나의 '아이스크림 세트'로 묶어 판매하고 싶다면, 이 세트 역시 하나의 아이스크림 객체처럼 다룰 수 있어야 합니다. 컴포지트 패턴을 사용하면 누가바, 돼지바, 보석바를 포함하는 '아이스크림 세트' 객체를 생성하여 모든 아이스크림을 일관된 방식으로 다룰 수 있게 됩니다.
컴포지트 패턴의 사용 경우
컴포지트 패턴은 다음과 같은 상황에서 유용합니다:
- 객체들의 계층 구조를 간결하게 유지하고 싶을 때
- 계층 구조의 객체들을 일관된 인터페이스로 다루고 싶을 때
- 객체 구조 내에서 객체들을 쉽게 추가하거나 삭제하고 싶을 때
컴포지트 패턴의 장단점
장점
- 복잡한 트리 구조의 객체 계층을 효과적으로 관리하고, 이를 통해 유지보수와 확장성이 향상됩니다.
- 단일 객체와 복합 객체를 동일한 인터페이스로 다루기 때문에 코드의 일관성이 유지되며, 클라이언트 코드를 단순화할 수 있습니다.
- 객체들을 트리 구조로 관리하기 때문에, 구성 요소를 동적으로 추가하거나 제거하는 것이 용이합니다.
- 재사용성과 유연성이 높아집니다.
단점
- 컴포지트 패턴을 사용하면 시스템 내 객체 수가 증가하여, 메모리 사용량이 늘고 실행 속도가 느려질 수 있습니다.
- 모든 컴포넌트가 동일한 인터페이스를 공유하므로, 일부 특정 기능이 필요하지 않은 객체에서도 이 기능을 구현해야 할 수 있습니다. 이는 때때로 예외 처리를 필요로 합니다.