오브젝트 풀링이란 오브젝트의 풀(Pool 웅덩이)을 만들어둬서 오브젝트가 필요할 때마다 그 안에서 꺼내 쓰고 다시 넣는 걸 의미한다. 필요한 오브젝트가 있을 때마다 새로 만들고, 필요없어지면 파괴하면 어떻게 될까? 오브젝트를 생성하고 파괴하는 동작은 CPU에 과부하를 준다. 유니티의 경우엔 오브젝트 파괴->메모리를 해제하면 가비지 컬렉터가 동작하는데 가비지 컬렉터 자체가 CPU에 많은 부담을 준다.
그렇다면 우리는 굳이 오브젝트가 필요하고/필요없어질 때마다 실시간으로 생성/파괴를 할 필요가 없다. 위에서 언급한 대로 미리 만들어두고, 필요할 때 활성화시키고 필요없어질 때 비활성화시키면 된다. 생성, 파괴 동작이 빈번하게 일어나지 않는다. 이것이 바로 오브젝트 풀링이다.
<형태1>
| using UnityEngine; using System.Collections.Generic; using UnityEngine.Events; public class ObjectPool : MonoBehaviour { private static ObjectPool _instance; private Stack<T> objectStack = new Stack<T>(); void Awake() { _instance = this; } public T Get() { T element; if (m_Stack.Count == 0) { element = new T(); countAll++; } else { element = objectStack.Pop(); } return element; } public void Release(T element) { if (objectStack.Count > 0 && ReferenceEquals(objectStack.Peek(), element)) Debug.LogError("이미 오브젝트 풀에 들어있어요."); objectStack.Push(element); } } |
'프로그래밍' 카테고리의 다른 글
| 개인 작업 -2- (0) | 2025.03.29 |
|---|---|
| 스팀 얼리액세스(앞서 해보기) 출시심사 중 겪은 반려(미승인) 사례 (5) | 2025.01.17 |
| [SVN] Azure SVN 서버 오류 (Unable to connect) 해결방법 (3) | 2024.11.01 |
| 동적할당이란 무엇인가? (3) | 2022.08.16 |