경량패턴

숲에 들어갈 나무들

Untitled

Untitled

게임 내에서 같은 메시와 텍스쳐를 여러 번 메모리에 올릴 이유가 전혀 없기 때문에 TreeModel 객체는 하나만 존재하게 된다. 이제 각 나무 인스턴스는 공유 객체인 TreeModel을 참조하기만 한다. Tree 클래스에는 인스턴스 별로 다른 상태값만 남겨둔다.

경량 패턴은 객체 데이터를 두 종류로 나눈다.

경량 패턴은 한 개의 고유 상태를 다른 객체에서 공유하게 만들어 메모리 사용량을 줄이고 있다.

경량 패턴은 생성된 객체를 공유하는 것으로 C++의 포인터 개념이다.

프로젝트뷰의 메시를 공유하는 것이나 스크립트를 AddComponent 하는 것은 컴포넌트 패턴이다. 다만 유니티가 결과적으로 같은 메시면 공유하여 사용하므로 드로우 콜이 작아진다.

공유 기능을 유지하고 싶다면, 인스턴스를 요청받았을 때 이전에 같은 걸 만들어 놓은 게 있는지 확인해보고, 있다면 그걸 반환하면 된다.

이러려면 객체를 생성 할 때 기존 객체가 있는지를 먼저 확인할 수 있도록 생성 코드를 인터페이스 밑으로 숨겨둬야 한다. 이런 식으로 생성자를 숨기는 방식은 앞에 살펴본 팩토리 메서드 패턴의 한 예이기도 하다.

이전에 만들어놓은 경량 패턴 객체를 반환하려면, 이미 생성해놓은 객체를 찾을 수 있도록 풀pool을 관리해야 한다. 이름에서 알 수 있듯이 오브젝트 풀 패턴이 이런 데 유용하다.

코드링크