오브젝트 풀링
오브젝트 풀링(Object Pooling)은 재사용 가능한 오브젝트를 미리 생성해두고 필요한 순간에 꺼내 사용하는 디자인 패턴이다. 이 패턴은 오브젝트의 빈번한 생성과 제거를 방지하여 메모리와 CPU 자원을 절약하는 데 도움이 된다. 게임 개발에서는 자주 등장하는 적 캐릭터나 총알 같은 오브젝트에 이 패턴을 많이 활용한다.
오브젝트 풀링을 쓰는 이유
게임에서는 오브젝트를 생성하고 제거하는 작업이 자주 일어난다. 이 과정에서 CPU는 메모리 할당과 해제를 반복하게 되어 성능에 영향을 준다. 오브젝트 풀링을 사용하면 자주 사용하는 오브젝트를 미리 생성해 두고 필요할 때마다 가져다 쓰기 때문에 성능 저하를 줄이고, 특히 모바일 게임과 같은 환경에서 프레임 드랍을 방지하는 데 효과적이다.
오브젝트 풀링의 원리
오브젝트 풀링의 원리는 간단하다. 초기화 단계에서 오브젝트를 미리 생성하여 풀(Pool)이라는 리스트나 큐에 저장해 둔다. 그리고 오브젝트가 필요할 때마다 풀에서 꺼내어 활성화하고, 다시 불필요해지면 풀로 반환하여 재사용 가능하도록 비활성화한다. 이를 통해 오브젝트의 재활용이 이루어지며, 동적 메모리 할당이 줄어들어 성능을 최적화할 수 있다.
오브젝트 풀링 구현
public class ObjectPool : MonoBehaviour
{
public GameObject prefab; // 생성할 오브젝트의 프리팹
public int poolSize = 10; // 풀 크기
private Queue<GameObject> pool = new Queue<GameObject>();
void Start()
{
// 초기화: 풀 크기만큼 오브젝트 생성
for (int i = 0; i < poolSize; 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
{
// 풀이 비어있으면 새 오브젝트 생성
GameObject obj = Instantiate(prefab);
obj.SetActive(true);
return obj;
}
}
public void ReturnObject(GameObject obj)
{
obj.SetActive(false);
pool.Enqueue(obj); // 오브젝트를 풀에 반환
}
}
위 코드에서 GetObject는 풀에서 오브젝트를 꺼내 활성화하여 반환하고, ReturnObject는 오브젝트를 비활성화한 후 다시 풀에 저장한다. 이로 인해 오브젝트가 반복적으로 생성, 삭제되는 일이 줄어들어 성능이 최적화된다.
마무리
오브젝트 풀링은 자원을 아끼고 게임 성능을 높이는 데 매우 유용한 패턴이다. 특히 많은 오브젝트가 빈번히 생성과 소멸을 반복하는 환경에서 성능을 안정적으로 유지하는 데 큰 도움이 된다.
'Unity > 정보' 카테고리의 다른 글
[Unity 유니티] 유니티에서 Json으로 데이터 관리하기 - AES 암호화 / 복호화 (3) (0) | 2024.10.29 |
---|---|
[Unity 유니티] 유니티에서 Json으로 데이터 관리하기 - 불러오기 / 읽기 (2) (0) | 2024.10.29 |
[Unity 유니티] 유니티에서 Json으로 데이터 관리하기 - 저장 (1) (0) | 2024.10.29 |
[Unity 유니티] 하드 코딩(Hard Coding)을 지양해야 되는 이유 (0) | 2024.10.28 |
[Unity 유니티] 싱글톤 패턴 (Singleton) (1) | 2024.10.28 |