[디자인 패턴] 컴포지트 패턴
컴포지트(composite) 패턴은 말 그대로 합성 구조를 다루는 패턴이다.
개별 요소들을 컴포넌트(component). 컴포넌트가 합쳐진 걸 컴포지트라고 한다.
연속된 중첩구조를 표현하기 좋아서 그래픽, 레이아웃 같은걸 표현할 때 자주 사용하는데..
이에 대한 대표적인 적용사례 중 하나가 안드로이드다. 안드로이드에선 화면에 표시될 수 있는 요소는 전부 View다. 그런데 이 뷰들을 여러개 포함할 수 있는 타입으로 ViewGroup가 있는데, 이것도 View를 상속받는 타입이다.
신비로운 재귀적 종속구조를 가진다.

이미지는 퍼왔다.
글줄만 봐서는 이해가 잘 안될테니 가장 훌륭한 교보재인 코드를 보자.
텍스트만 출력하는 간단한 구조의 컴포넌트를 구성해보겠다.
컴포넌트의 인터페이스를 정의한다.

print로 출력을 행할 것이다.
이번엔 중간 노드인 Node를 구현해보겠다.
자신의 인터페이스인 INode 타입 컬렉션을 포함하기 때문에, Node엔 또 Node가 재귀적으로 여러개 들어갈 수 있다.
이게 컴포지트다.

print 함수는 또 컬렉션들의 print를 호출한다.
근데 이래서야 끝이 없지 않겠는가. 뭔가 진짜 출력하는 놈도 있어야지.
그래서 끄트머리 노드도 만들었다.
이게 컴포넌트다.

단순히 텍스트만 저장하고, 출력한다.
이제 이걸 대충 써보자.

그럼 뭐 대강 이렇게 된다.
원하는 만큼 중첩해서 끼워넣을 수 있다.
예제 코드
https://github.com/myyrakle/DesignPatterns/tree/master/Composite
참조
헤드퍼스트 디자인 패턴
https://m.blog.naver.com/PostView.nhn?blogId=sks6624&logNo=150173843964&proxyReferer=&proxyReferer=https%3A%2F%2Fwww.google.com%2F
https://gmlwjd9405.github.io/2018/08/10/composite-pattern.html