Unity로 로그라이크, 소울라이크, 뱀서라이크 장르의 게임들을 만들다보면 게임 전반에 걸쳐 플레이어의 사정거리, 공격력, 방어력과 같은 기본 속성들을 업그레이드할 필요가 있다.
위와 같은 경우에서는 데커레이터 패턴이 매우 효과적으로 작동한다. 데커레이터 패턴은 기존 객체를 변경하지 않고 새로운 기능을 추가하는 패턴이다.
데커레이터 패턴과 상속의 차이를 생각해보자.
데커레이터 패턴은 새로운 서브 클래싱의 대안이 된다.
상속은 서브 클래싱의 대명사지만, 아쉽게도 런타임에 상속이 확장되는 것을 허용하지 않는다. 하지만 데커레이터는 런타임에 확장 및 축소를 시킬 수 있다. 즉, 상속의 한계를 극복한다.
업그레이드할 데커레이터가 많다고 생각해보자.
데커레이터가 많다면 그만큼 가독성이 떨어진다.
객체 주변에 다양한 계층의 데커레이터가 있다면 초기화 체인과 데커레이터 간의 관계를 추적하는 것이 점점 어려워진다.
클래스 폭발이 발생할 가능성이 높다.
새로운 속성이 추가될 경우나 다른 이유 등으로 데커레이터 클래스가 증가할 수도 있다. 클래스가 많아지므로 코드의 가독성도 떨어지고, 클래스 관리도 어려워진다.