■ 오브젝트 풀링 정리
○ 주요 개념
- 메모리 할당 최소화 : 오브젝트를 매번 생성하고 파괴하면 메모리 할당과 해제가 빈번하게 발생하여 성능이 저하 됨. 오브젝트 풀링은 이러한 문제를 해결하기 위해 미리 필요한 수의 오브젝트를 생성해둠
- 재사용(Reusing) : 한 번 생성된 오브젝트는 풀 안에서 재사용됨. 새 오브젝트를 만들지 않고, 사용이 끝난 오브젝트를 다시 활용하므로 성능을 크게 향상시킴
- 풀 관리 : 풀에서 오브젝트를 필요로 할 때는 사용 가능한 오브젝트를 꺼내 사용하고, 사용이 끝나면 다시 풀에 반환함. 이 과정을 통해 효율적인 메모리 관리를 유지할 수 있음
○ 장점
- 성능 향상 : 매번 오브젝트를 새로 생성하는 것보다 빠르며, 특히 자주 반복적으로 생성되는 오브젝트에 효과적
- 메모리 안정성 : 메모리 누수와 과도한 가비지 컬렉션을 방지함
- 부하 감소 : CPU 부하를 줄여 애플리케이션의 성능을 최적화함
○ 단점
- 초기 메모리 사용량 : 처음에 많은 오브젝트를 생성해야 하므로 초기 메모리 사용량이 높을 수 있음
- 복잡한 관리 : 풀링된 오브젝트가 너무 많아지면 이를 효율적으로 관리하기 어려울 수 있음
○ 오브젝트 풀 자료구조
- 유니티의 오브젝트 풀링에서 사용하는 자료구조는 특정한 요구 사항에 맞춰 선택할 수 있으며, 특정 자료구조로 고정되어 있지는 않음
- 리스트(List) : 간단하고 직관적인 자료구조로, 오브젝트를 순차적으로 관리하기에 좋음. 삽입과 제거가 빠르지 않지만, 적은 수의 오브젝트를 관리할 때는 적합함
- 큐(Queue) : 선입선출(FIFO) 방식으로 오브젝트를 재사용할 때 유용함. 오브젝트가 필요할 때 앞에서 꺼내고, 사용이 끝난 오브젝트는 다시 뒤로 넣는 방식
- 스택(Stack) : 후입선출(LIFO) 방식으로 사용됨. 가장 최근에 사용한 오브젝트를 다시 사용하고 싶은 경우 적합
- 딕셔너리(Dictionary) or 해시맵(HashMap) : 특정 키를 기준으로 오브젝트에 접근해야 할 때 유용함. 오브젝트 풀링에서 오브젝트의 종류나 상태에 따라 구분해야 할 때 유용할 수 있음
○ 일반적으로 사용하는 형태