--- id: [[P-Reinforce|P-Reinforce]]-AUTO-OPOOL-001 category: Dev confidence_score: 0.98 tags: [auto-reinforced, game-dev, performance, [[Optimization|Optimization]], [[memory|memory]]-[[Management|Management]]] last_reinforced: 2026-04-20 --- # [[Object Pooling (오브젝트 풀링)|Object [[Pooling]] (오브젝트 풀링)]] ## 📌 한 줄 통찰 (The Karpathy Summary) > "빌려 쓰고 다시 채우는 자원 관리: 가비지 컬렉터(GC)의 습격으로부터 프레임워크를 보호하기 위해, 객체를 파괴하지 않고 재사용 창고에 보관하는 최적화의 기본형." ## 📖 구조화된 지식 (Synthesized Content) 오브젝트 풀링([[Object Pooling|Object Pooling]])은 빈번하게 생성되고 파괴되는 객체(총알, 파티클, 적 유닛 등)를 메모리 할당/해제 과정 없이 미리 생성해 둔 목록에서 꺼내 쓰는 기법입니다. 1. **동작 매커니즘**: * **In-use List / Pool List**: 현재 화면에 표시되는 객체와 대기 중인 객체를 분리 관리. * **Get/Release**: 필요할 때 풀에서 꺼내 활성화(Reset & Reactivate)하고, 필요 없어지면 파괴하는 대신 다시 풀로 반환(Deactivate). 2. **이점**: * **GC Spike 방지**: C#이나 Java 같은 환경에서 빈번한 메모리 해제로 인한 '프레임 드랍' 예방. * **할당 오버헤드 감소**: 런타임 중의 힙(Heap) 메모리 파편화 방지. 3. **설계 시 고려사항**: * **Pre-warming**: 로딩 중에 필요한 객체를 미리 생성하여 런타임 지연 방지. * **Over-allocation**: 풀이 부족할 때 동적으로 확장할 것인지, 아니면 생성을 포기할 것인지에 대한 전략 필요. ## ⚠️ 모순 및 업데이트 (Contradictions & RL Update) - **과거 데이터와의 충돌**: 과거에는 메모리가 부족하여 무조건 풀링을 썼으나, 현대의 개선된 GC(Incremental GC 등) 환경에서는 작고 수명이 짧은 객체는 오히려 풀링 관리 비용이 더 클 수 있으므로 '프로파일링 후 도입'이 원칙임. - **정책 변화(RL Update)**: [[Unity|Unity]] 2021+ 이후 엔진 자체적으로 `UnityEngine.Pool` API를 제공함에 따라, 개발자가 직접 바퀴를 재발명하지 않고 표준화된 풀링 인터페이스를 사용하는 정책이 권고됨. ## 🔗 지식 연결 (Graph) - **Related**: Graphics & Performance, Memory &[[_system|system]]s, [[Game-Feel-and-Juiciness|Game-Feel-and-Juiciness]], Design Patterns - **Modern Tech/Tools**: Unity ObjectPool API, Entitas (ECS Framework). ---