[Unity/스킬] 최적화 : Object Pooling 기법

Jaeyoung Ko·2023년 5월 10일

Unity

목록 보기
2/3

Unity에서 다양한 최적화 기법들이 존재하는데 이번 포스팅은 오브젝트 풀링(Object Pooling)에 관련하여 이야기 해보려고 한다.

1. Object Pooling 이란?

오브젝트 풀링이란 오브젝트들을 컨테이너 역할의 pool에 만들어 두고, 필요에 따라 객체를 활성화/비활성화하여 사용하는 것을 뜻한다.


2. 왜 Object Pooling 을 이용하는 것이 좋은가

생명주기 함수들을 통해 일반적으로 오브젝트를 이용한다고 하면,

생성과 삭제 (Instantiate 과 Destroy)를 떠올릴 것이다. 하지만 이 방법에는 치명적인 이슈가 존재한다.

풀링을 사용하지 않고 실시간으로 생성과 파괴 과정을 반복한다면, 매 과정을 거칠 때 마다 그에 해당하는 메모리를 할당하고 해제하는 작업을 반복하게 된다. 이 때 특히나 객체를 파괴하며 메모리를 해제할 때 garbage collector가 발생한다. 결국, 이런 과정 아래에서 복잡도가 커진다면 CPU에 큰 오버헤드를 가져오기 때문에 성능에 부담을 주게 된다.

이러한 문제점을 회피하기 위해 사용되는 최적화 기법이 pooling이다. 파괴를 하는 것이 아니라, pool에 존재하는 객체들을 활성화 비활성화해주며 CPU 성능은 좋게 유지하면서 동일한 효과를 구현할 수 있는 것이다.

물론 처음에는 충분한 오브젝트를 가지고 있는 오브젝트 풀을 생성해야 하기 때문에 할당되는 메모리 사용량은 어느정도 크다. 이 메모리 사용량을 trade-off로 CPU 퍼포먼스를 높이는 원리인 것이다.

3. 구현

일반적으로 pool로 사용하는 컨테이너는 List, Stack, Queue 등의 자료구조를 이용하며, 각 자료구조 별로 크게 성능차이가 상이하게 나타나는 것은 아니지만 Stack을 이용하는 것이 가장 좋다고 한다.

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글