오늘은 오브젝트 풀링에 대해서 더 공부해보는 시간을 가졌다.
오브젝트 풀링(Object Pooling)이란 다양한 최적화 기법 중 하나로, 오브젝트의 Pool, 즉 웅덩이를 만들어놓은 후 필요할 때마다 객체를 꺼내서 사용하는 것을 말한다. 게임 내에서는 상당히 많고 다양한 여러 오브젝트들을 보여주었다가 사라지게 하는 등 효과들이 있는데, 이 때마다 오브젝트들을 실시간으로 생성하고 파괴하는 것을 반복한다면 메모리를 할당하고 해제하는 일이 계속 반복되는 것이다. 할당과 해제는 CPU가 담당하고, 유니티에서는 메모리를 해체하며 가비지 컬렉터가 발생하기 때문에 많은 오브젝트들이 파괴될 때마다 CPU에 부담이 가게 된다.
또한 오브젝트 풀의 크기를 정하는 것은 사용하려는 부분의 특성과 오브젝트 특성에 따라 달라질 수 있다. 최대 사용량을 예상할 수 있다면 그 수치에 맞게 풀 크기를 설정하는 것이 효율적이며, 최대 사용량을 예측하기 어려운 경우에는 풀 크기를 고정하지 않고 유연하게 확장 가능한 구조가 유리하다. 필요한 오브젝트를 생성할 때 자동으로 오브젝트 풀에 추가해주고, 이후 재사용하는 방식 등을 쓸 수 있다.
다만 오브젝트 풀링 방식은 메모리를 할당해두어서 메모리를 어느 정도 희생하며 실시간 유저가 느낄 수 있는 FPS 등의 성능 상 이점을 보는 것이다. 실시간으로 작동하는 게임에서의 프레임 차이는 유저들에게도 민감한 사항이기 때문에 그래도 오브젝트 풀링 방식이 선호된다.