본문 바로가기
알아두면 좋은것들

02.29 (TIL)

by 오랑이귀엽다 2024. 3. 5.

오브젝트 풀링(Object Pooling)이란?

 

오브젝트 풀링은 게임 개발에서 성능 최적화 기법 중 하나로, 게임 플레이 동안 반복적으로 생성 및 파괴되는 객체들을 관리하는 방법입니다. 오브젝트 풀링은 필요한 객체들을 게임 시작 시 미리 생성하고, 풀(pool)에 저장해 두었다가 필요할 때 재사용(reuse)하는 방식입니다. 객체가 더 이상 필요 없을 때는 파괴하지 않고 풀에 반환하여 다시 사용할 수 있게 합니다.

구현 방법:

  1. 오브젝트 풀 생성: 특정 타입의 오브젝트를 저장할 수 있는 리스트나 큐를 생성합니다.
  2. 오브젝트 미리 생성 및 저장: 게임 시작 시 또는 필요에 따라 특정 수의 오브젝트를 생성하고, 이를 오브젝트 풀에 저장합니다.
  3. 오브젝트 요청 및 반환 처리: 오브젝트가 필요할 때 풀에서 오브젝트를 꺼내 사용하고, 사용이 끝난 오브젝트는 다시 풀에 반환합니다.
  4. 동적 확장 처리 (선택사항): 모든 오브젝트가 사용 중일 때 추가 오브젝트가 필요하다면, 풀의 크기를 동적으로 확장할 수 있는 로직을 구현합니다.
더보기

using System.Collections.Generic;
using UnityEngine;

public class ObjectPool : MonoBehaviour
{
    public GameObject prefab; // 풀링할 프리팹 지정
    private Queue<GameObject> pool = new Queue<GameObject>(); // 오브젝트 풀

    void Start()
    {
        // 초기 오브젝트 풀링
        for (int i = 0; i < 10; i++)
        {
            GameObject obj = Instantiate(prefab);
            obj.SetActive(false); // 비활성화 상태로 시작
            pool.Enqueue(obj); // 풀에 추가
        }
    }

    // 오브젝트 요청
    public GameObject GetObject()
    {
        if (pool.Count > 0)
        {
            GameObject obj = pool.Dequeue();
            obj.SetActive(true);
            return obj;
        }
        else
        {
            // 풀이 비어있으면 새로운 오브젝트 생성 (선택사항)
            return Instantiate(prefab);
        }
    }

    // 오브젝트 반환
    public void ReturnObject(GameObject obj)
    {
        obj.SetActive(false);
        pool.Enqueue(obj);
    }
}

 

 

Object Pool을 사용하는 이유

 

오브젝트 풀을 사용하는 주된 이유는 성능 최적화입니다. 게임 플레이 동안 객체를 생성하고 파괴하는 작업은 CPU 리소스를 상당량 소모하며, 특히 가비지 컬렉션(GC)을 유발하여 게임의 프레임 드롭이나 렉을 일으킬 수 있습니다. 오브젝트 풀을 사용함으로써 다음과 같은 이점을 얻을 수 있습니다:

  • 가비지 컬렉션(GC) 오버헤드 감소: 빈번한 메모리 할당과 해제를 피함으로써 가비지 컬렉션 발생 빈도를 줄일 수 있습니다.
  • 메모리 사용량 관리: 게임 시작 시 필요한 객체를 모두 생성함으로써 메모리 사용량을 예측하고 관리하기 용이합니다.
  • 성능 향상: 오브젝트의 생성과 파괴에 따른 CPU 부하를 줄여, 게임의 성능을 향상시킬 수 있습니다.

'알아두면 좋은것들' 카테고리의 다른 글

03.05 (TIL)  (1) 2024.03.05
03.04 (TIL)  (0) 2024.03.05
02.28 (TIL)  (2) 2024.02.28
02.27 (TIL)  (0) 2024.02.27
02.26 (TIL)  (0) 2024.02.26