오브젝트 풀링(Object Pooling)
소프트웨어 개발에서 사용되는 디자인 패턴 중 하나.
게임 개발에 널리 사용되는 테크닉으로, 게임의 성능을 개선하기 위해 사용.
오브젝트 풀링의 작동 방식
오브젝트 생성 및 초기화
미리 정의된 수의 오브젝트(객체 또는 컴포넌트)를 생성하고 초기화.
이 오브젝트들은 처음에 사용되지 않고 비활성 상태로 유지.
오브젝트 재사용
프로그램이 오브젝트를 필요로 할 때마다 오브젝트 풀에서 오브젝트를 가져와 사용.
오브젝트는 재사용되므로 새로운 오브젝트를 계속해서 생성하는 비용을 절약할 수 있음.
오브젝트 반환: 오브젝트 사용이 끝나면 오브젝트를 풀로 반환.
오브젝트는 다시 비활성 상태로 되돌아가며 재사용을 기다림.
장단점
오브젝트 풀링은 생성과 소멸이라는 비용이 큰 작업을 최소화함으로써 성능을 향상시키는 데 중요한 역할을 함.
빈번하게 생성하고 파괴되는 객체들을 풀에 저장해 놓고 재사용함으로써 메모리 할당과 가비지 컬렉션에 따른 성능 저하를 방지.
적절히 사용하면 큰 성능 개선을 가져올 수 있지만, 불필요한 메모리 사용을 증가시킬 수 있으므로 사용 시에는 신중해야 함.
오브젝트 풀 클래스
using System.Collections.Generic; using UnityEngine; public class ObjectPool : MonoBehaviour { public GameObject prefab; // 사용할 프리팹 public int poolSize = 10; // 풀의 크기 private List<GameObject> objectPool; private void Start() { // 초기화 및 풀에 오브젝트 추가 objectPool = new List<GameObject>(); for (int i = 0; i < poolSize; i++) { GameObject obj = Instantiate(prefab); obj.SetActive(false); objectPool.Add(obj); } } // 오브젝트 가져오기 public GameObject GetObject() { foreach (GameObject obj in objectPool) { if (!obj.activeInHierarchy) { obj.SetActive(true); return obj; } } return null; // 모든 오브젝트가 사용 중일 때는 null 반환 } // 오브젝트 반환 public void ReturnObject(GameObject obj) { if (objectPool.Contains(obj)) { obj.SetActive(false); } } }
지급 받은 강의 듣기(진행중)
09:00 ~ 10:00 : 알고리즘 코드카타
10:00 ~ 10:30 : 팀 회의
10:30 ~ 14:00 :
12시-1시: 점심식사
14:00 ~ 18:00
6시-7시: 저녁식사
19:00 ~ 20:00 : 집중 코딩 시간 부족한 부분 해결해보기
20:00 ~ 21:00: TIL 작성, 마무리 회고 진행
21:00 : 내일은 위한 휴식!