오브젝트 풀은 언제 손해인가
Esc

    오브젝트 풀은 언제 손해인가

    2026년 9월 9일 수정–Unity최적화GC

    총알을 초당 30발 쏘면 1분에 1800개를 만들고 1800개를 버립니다. 버린 것은 그 자리에서 사라지지 않고 쌓여 있다가, 어느 순간 한꺼번에 정리되면서 화면이 한 번 멈춥니다. 오브젝트 풀은 그 만들고 버리는 일을 안 하는 방법입니다.

    다만 결론부터 쓰면, 생성 비용이 싼 객체를 풀링하면 오히려 느려집니다. 풀은 공짜가 아니라서 가져오고 돌려주는 비용이 매번 붙고, 미리 채워두는 만큼 초기 비용도 먼저 냅니다.

    풀이 바꾸는 것

    풀링은 “빨라지는 기술”이 아니라 객체를 버리지 않는 기술입니다.

    매번 생성과 풀 사용의 흐름 비교 버리지 않으니 GC 가 수거할 것도 없습니다.

    버려진 객체는 그 자리에서 사라지지 않고 GC 가 돌 때까지 메모리에 남습니다. 그래서 “매번 생성”의 대가는 생성 비용이 아니라 나중에 몰아서 오는 정지입니다.

    메모리가 쌓이는 모양 개념도 실측 그래프가 아니라 패턴을 그린 것입니다.

    말로는 잘 안 와닿아서 움직이는 걸로 만들어 뒀습니다. 방식을 바꿔가며 보세요. “매번 생성”에서만 만든 객체 수가 계속 오르고 GC 막대가 차오릅니다.

    직접 굴려보기

    말보다 숫자가 빠릅니다. 재사용 횟수와 객체 하나의 생성 비용을 바꿔보면 풀링이 손해가 되는 구간이 어디인지 바로 보입니다. 재사용 10회 + 가벼움으로 두면 풀이 집니다.

    재사용이 열 번 이하이고 객체가 가벼우면 풀이 지는 구간이 나옵니다. 이때는 풀을 걷어내는 게 최적화입니다.

    할당을 걷어낸 쪽은 확실히 이득

    풀링과 별개로, 매 프레임 새 리스트를 만드는 건 거의 항상 손해입니다.

    판단 순서

    무엇부터 볼지 헷갈리면 이 순서로 봅니다.

    측정하지 않은 최적화는 최적화가 아닙니다. 풀링도 예외가 아닙니다.