Object Pool 최적화 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

오브젝트 풀 패턴이란

Object Pool 클라이언트의 요청에 따라 Pool에 있는 Object를 빼서 쓰기도 하고 다시 PoolObject를 보관

  • Pool 초기화된 오브젝트 목록을 메모리에 저장
  • Client 특정 종류의 Object InstanceObject Pool에 요청
  • 사용 가능한 Object Insatance일 경우, Object Pool에서 해당 Object를 제거하고 Client에게 제공
    • Pool 내에서 Object Instance가 부족할 경우, 새로운 Instance 동적 생성
  • 사용 만료된 Object InstanceObject Pool로 복귀
    • Pool에 공간이 없는 경우 Instance 파괴(Destroy)
  • Pool 메모리 사용량 비워지거나 채워질 수는 있으나 넘치지 않음(용량을 초과하는 Object는 파괴됨)
    image

1. 장·단점

  • 장점
    • 예측할 수 있는 메모리 사용 특정 종류의 객체 인스턴스를 특정 양만큼 유지하도록 메모리 할당 가능
    • 성능 향상 이미 메모리에 초기화된 객체가 있기에 새로운 객체의 초기화에 드는 로딩 비용 절감
  • 단점
    • 이미 관리되는 메모리에 대한 레이어링

      c#과 같은 최신 프로그래밍 언어에서는 메모리 할당을 최적으로 관리하기에 오브젝트 풀 패턴이 불필요

      • 일부는 사실이나, 다른 일부는 거짓
    • 예측 불가능한 객체 상태
      • 잘못 처리한 경우, (초기화 되지 않은) 현재 상태의 객체가 풀에 반환
      • 객체가 손상 or 파괴될 수 있는 (상태를 가진) 경우 문제 발생

2. 사용시기

  • 사용 목적 객체의 재사용
    • Object Pool은 해당 크기만큼 메모리의 공간을 지속적으로 차지
    • Object Instance가 사용만료된 직후 자동으로 Pool에 되돌아오는 구조
  • 빈도에 따른 결정
    • 최종 보스 빈도 상 메모리 낭비
    • 총알/파티클/적 캐릭터 게임 플레이 중 자주 생성되고 파괴되는 경우, 반복적인 CPU 호출(오브젝트 생성 or 파괴) 부담 완화

오브젝트 풀 구현 예제 UML

image

대안

프로토타입prototype 패턴

  • 복제 메커니즘 사용
  • 프로토타입이라는 참조 객체에서 얕은 복사를 진행하여 Object Instance 생성