Object Pool 최적화 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki
오브젝트 풀 패턴이란
Object Pool 클라이언트의 요청에 따라 Pool
에 있는 Object
를 빼서 쓰기도 하고 다시 Pool
에 Object를 보관
- Pool 초기화된 오브젝트 목록을 메모리에 저장
- Client 특정 종류의
Object Instance
를Object Pool
에 요청 - 사용 가능한
Object Insatance
일 경우,Object Pool
에서 해당Object
를 제거하고 Client에게 제공Pool
내에서Object Instance
가 부족할 경우, 새로운Instance
동적 생성
- 사용 만료된
Object Instance
는Object Pool
로 복귀Pool
에 공간이 없는 경우Instance
파괴(Destroy)
- Pool 메모리 사용량 비워지거나 채워질 수는 있으나 넘치지 않음(용량을 초과하는
Object
는 파괴됨)
1. 장·단점
- 장점
- 예측할 수 있는 메모리 사용 특정 종류의 객체 인스턴스를 특정 양만큼 유지하도록 메모리 할당 가능
- 성능 향상 이미 메모리에 초기화된 객체가 있기에 새로운 객체의 초기화에 드는 로딩 비용 절감
- 단점
- 이미 관리되는 메모리에 대한 레이어링
c#과 같은 최신 프로그래밍 언어에서는 메모리 할당을 최적으로 관리하기에 오브젝트 풀 패턴이 불필요
- 일부는 사실이나, 다른 일부는 거짓
- 예측 불가능한 객체 상태
- 잘못 처리한 경우, (초기화 되지 않은) 현재 상태의 객체가 풀에 반환
- 객체가 손상 or 파괴될 수 있는 (상태를 가진) 경우 문제 발생
- 이미 관리되는 메모리에 대한 레이어링
2. 사용시기
- 사용 목적 객체의 재사용
Object Pool
은 해당 크기만큼 메모리의 공간을 지속적으로 차지Object Instance
가 사용만료된 직후 자동으로Pool
에 되돌아오는 구조
- 빈도에 따른 결정
최종 보스
빈도 상 메모리 낭비총알/파티클/적 캐릭터
게임 플레이 중 자주 생성되고 파괴되는 경우, 반복적인 CPU 호출(오브젝트 생성 or 파괴) 부담 완화
오브젝트 풀 구현 예제 UML
대안
프로토타입prototype 패턴
- 복제 메커니즘 사용
- 프로토타입이라는 참조 객체에서 얕은 복사를 진행하여
Object Instance
생성