ObjectPooling 리펙토링

이준영·2025년 12월 4일

이번에 어드레서블 코드를 구현하던 중, enum으로 키 값을 관리하는 방식에 불편함을 느껴서 고쳐보기로 하였다.

이전 코드

이전 코드
  • PoolIndex 열거형으로 Key를 관리하였다.
  • 그래서 해당 코드를 이용하기 위해선 오브젝트 풀링을 이용할 오브젝트의 키 값을 생성해줘야 했다.
사용 예시
  • 이렇게 생성할 오브젝트의 Key와 생성할 오브젝트를 넣어줘야 실행이 되었다.

문제점

  1. 사용할 오브젝트가 늘어날 때마다 열거형을 늘려야 함.
  2. 키 값과 프리펩이 일치하지 않으면 오류 발생.

개선 코드

첫 번째 시도

Instantiate로 오브젝트를 생성할 때에는 매개변수로 게임 오브젝트만 받는다.
ex) Instantiate(go)

그래서 게임 오브젝트 자체를 키를 이용하는 방법을 생각했다.

첫 번째 개선 코드
  • 기존에서 열거형 키 값을 없애고, 게임 오브젝트 자체를 키 값으로 사용한 코드이다.
Test
  • 작동하지 않는다.
Release
  • Release 코드를 읽어보면, 인스턴스가 조회 되지 않았을 때 새로운 키와 큐를 생성하고 있다.
  • 즉 Instantiate된 오브젝트는 이전 오브젝트 같은 오브젝트가 아니기 때문에 생기는 오류인 듯하다.

두 번째 시도

그러면 오리지널 오브젝트를 저장하는 클래스를 만들어서 관리하면 되지 않을까 생각했다.

  1. 새로 생성되는 오브젝트에 컴포넌트를 추가
  2. 컴포넌트에 오리지날 프리펩을 저장
  3. Release 시 컴포넌트에 있는 오리지날 프리펩으로 Dictionary를 조회

이렇게 해보기로 하였다.

PoolItem
  • 오리지널 프리펩을 저장하는 클래스.
두 번째 개선 코드
  • 생성되는 오브젝트에 해당 컴포넌트를 추가하고 오리지널 프리펩을 넣어주었다.
  • 회수할 때에는 오리지널 프리펩으로 조회하여 Queue에 넣어 주었다.
Test
  • 잘 작동된다.

소감

아주 만족스럽게 고쳐진거 같다.

profile
게임 개발자가 되기 위해서 공부하는 중입니다.

0개의 댓글