컴포지션 패턴이란?
단일객체와 복합객체를 동일하게 다룰 수 있게해주는 디자인 패턴
컴포지션 패턴의 구조는
Component - 컴포넌트
Leaf - 단일객체 (Component 상속)
Composite - 복합객체 (Component 상속)
이런 구조로 이루어져 있다.
이 개념을 처음 봤을 때는 복합객체? 단일객체? 이게 무슨 소린지 한번에 감이
안잡힐 수 있다. 본인도 확실하게 개념을 잡고 싶어서 글을 찾아 보던 중 좋은 예시를
찾게됐는데 이를 토대로 설명하고자 한다.
우리는 전국의 모든 메뉴들이 사용할 수 있는 메뉴 컴포넌트를 제작한다고 가정하자.
그럼 메뉴판과 메뉴가 하는 기능이 각각 다를 것이다. 그럼 우선 메뉴와 메뉴판이 하는 기능을
메뉴 컴포넌트에 공통 기능으로 제작 후 메뉴와 메뉴판이 각각 메뉴컴포넌트를 상속받는다.
그럼 메뉴 라는 단일객체는 메뉴의 이름, 가격 등 메뉴 단일로 하는 기능들이 있을 것이고
메뉴판이라는 복합객체는 모든 메뉴판이 할 수 있는 복합적인 기능 즉, 메뉴 추가, 메뉴 삭제
이런 기능들이 포함될 것이다.
그래서 이 단일객체(메뉴) 와 복합객체(메뉴판)가 메뉴 컴포넌트를 상속받았기 때문에
메뉴 컴포넌트를 사용하는 빈 껍데기 오브젝트는 메뉴판의 기능을 독립적으로 모두 가질 수 있는 것이다.
컴포지션 패턴을 사용하는 이유?
이렇게 컴포지션 패턴을 사용하게 되면 메뉴라는 기능을 여러개 만들고 메뉴판 기능을 여러개 만들
필요 없이 단일객체(메뉴), 복합객체(메뉴판)을 하나의 구조로 처리한다.
그래서 빈 오브젝트에 메뉴 컴포넌트만 추가하면 기능을 사용할 수 있기 때문에 메뉴 컴포넌트는 독립적이라는
특징을 가지며 그만큼 기능의 추가와 삭제가 용이하여 재사용성이 높다.
하지만 원래부터 단순한 구조인데 컴포지션 패턴을 사용한다면 오히려 설계의 복잡성을 증가할 수 있고
복합객체나 단일객체가 동적으로 변하는 기능들이면 컴포지션 패턴을 사용하는데 어려움이 있다.
'TIL > Unity' 카테고리의 다른 글
[Unity] 프로퍼티를 왜 사용할까? (0) | 2024.02.01 |
---|---|
[Unity] async 와 await (0) | 2023.12.14 |
[Unity] 주의해야 할 기능 Find (0) | 2023.11.29 |
[Unity] Scriptable Object 의 개념 (0) | 2023.11.28 |
[Unity] 로컬 좌표와 월드 좌표 (0) | 2023.11.24 |