Files
2nd/10_Wiki/Topics/AI/Object Pooling (오브젝트 풀링).md
T

2.4 KiB

id, category, confidence_score, tags, last_reinforced
id category confidence_score tags last_reinforced
P-REINFORCE-AUTO-OPOOL-001 10_Wiki/💡 Topics/AI 0.98
auto-reinforced
game-dev
performance
optimization
memory-management
2026-04-20

Object Pooling (오브젝트 풀링)

📌 한 줄 통찰 (The Karpathy Summary)

"빌려 쓰고 다시 채우는 자원 관리: 가비지 컬렉터(GC)의 습격으로부터 프레임워크를 보호하기 위해, 객체를 파괴하지 않고 재사용 창고에 보관하는 최적화의 기본형."

📖 구조화된 지식 (Synthesized Content)

오브젝트 풀링(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 2021+ 이후 엔진 자체적으로 UnityEngine.Pool API를 제공함에 따라, 개발자가 직접 바퀴를 재발명하지 않고 표준화된 풀링 인터페이스를 사용하는 정책이 권고됨.

🔗 지식 연결 (Graph)