내일배움캠프

내일배움캠프: GetInstanceID

pracumj 2024. 12. 9. 22:17

오늘은 Unity에서 PoolManager를 만드는 중 키 값을 enum이나 string 대신 사용할 더 좋은 방법이 없을까 고민하다가 GetInstanceID라는 메서드를 발견했다.

이 메서드는 Prefab의 고유한 Instance ID를 반환해주며, 이를 활용하면 Dictionary의 키 값을 string 대신 int로 설정할 수 있어서 문자열 비교를 배제할 수 있게 됐다.

enum이나 string이 불편했던 이유

기존에 enum을 사용하면 새로운 풀을 추가할 때마다 enum 값을 추가해야 하는 번거로움이 있었다.
string을 사용하는 경우에도 문자열 비교로 인해 성능 저하가 생길 수 있고, 오타로 인한 에러가 발생할 가능성도 있었다.

 

GetInstanceID 사용

GetInstanceID를 사용하면 이러한 번거로움을 피할 수 있다. Prefab 자체의 Instance ID를 키 값으로 사용하니, 새로운 풀을 추가할 때 따로 키 값을 관리하지 않아도 된다. 코드도 간결해지고, int 기반 키 검색은 string 비교보다 더 효율적이다.

 

 

GetInstanceID 사용 시 주의할 점

GetInstanceID는 Prefab의 저장 경로나 인스턴스화된 객체에 따라 반환 값이 달라질 수 있다. 따라서 동일한 Prefab에서 항상 같은 Instance ID를 얻도록 관리해야 한다.

 

예시 코드 

    private Dictionary<int, Queue<Component>> poolDictionary = new Dictionary<int, Queue<Component>>();
    int poolKey = prefab.GetInstanceID();