Game Dev패턴과 구조

오브젝트 풀과 수명 관리

투사체, 이펙트, 오디오처럼 자주 생성·파괴되는 대상을 object pool로 다룰 때 무엇이 핵심인지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

text
spawn 요청
  -> 풀에서 비어 있는 객체 확보
  -> 상태 초기화
  -> 사용 종료 시 반환

설명

  • 오브젝트 풀은 "자주 만들고 곧바로 버리는 것"을 매번 새로 할당하지 않고 재사용하는 구조입니다. 총알, 파티클, 데미지 숫자, 짧은 UI 토스트처럼 수명이 짧고 개수가 많을수록 효과가 큽니다.
  • 중요한 포인트는 재사용 그 자체보다 reset 규칙입니다. 위치, 속도, 색상, 애니메이션 시간, 이벤트 구독 같은 상태가 제대로 초기화되지 않으면 풀링은 성능보다 버그를 먼저 가져옵니다.
  • 모든 것을 풀링해야 하는 것은 아닙니다. 아주 드물게 생성되는 보스, 씬 전체에서 하나만 존재하는 HUD, 복잡한 초기화가 거의 없는 객체는 일반 생성이 더 단순할 수 있습니다.
  • 풀 크기 전략도 설계 문제입니다. 너무 작으면 런타임에 부족하고, 너무 크면 메모리를 오래 점유합니다. 그래서 "없으면 버릴 것인가, 늘릴 것인가, 가장 오래된 것을 회수할 것인가" 정책이 카드의 핵심입니다.
  • 오브젝트 풀은 최적화 패턴이지만 동시에 수명 관리 패턴입니다. 생성 시점만이 아니라, 반환 조건과 재초기화 책임까지 함께 설계해야 제대로 작동합니다.

짧은 예제

text
총알은 풀에서 꺼내 쓴다
충돌하거나 화면 밖으로 나가면 반환한다
반환 전 속도, trail, 타격 대상 캐시를 정리한다

빠른 정리

항목핵심 포인트
잘 맞는 대상투사체, 이펙트, 짧은 UI, 반복 오디오
핵심 설계acquire, reset, release 규칙
장점할당/해제 비용과 파편화 부담 감소
단점상태 초기화 누락 시 디버깅이 어렵다
정책 질문부족 시 버릴지, 늘릴지, 회수할지

주의할 점

풀링 버그의 대부분은 "객체를 다시 쓰기 전에 상태를 완전히 지웠다고 착각"하는 데서 생깁니다. position만 초기화하고 이벤트 구독, trail, target reference를 남겨두면 재사용 순간에 아주 이상한 현상이 터집니다.

참고 링크

1 sources