-
GetInstanceID 와 GetHashCode 정리할 것.Unity, C#/GetInstanceID와 GetHashCode 2019. 2. 26. 17:59
GetInstanceID 와 GetHashCode에 대해 정리해 보았습니다.
Object.GetInstanceID 와 HashCode
객체의 인스턴스 id를 리턴합니다. 객체의 인스턴스 id는 항상 고유해야 합니다. 즉 같은 객체를 생성해도 InstanceID는 다르게 생성됩니다.
아래 예제는 같은 객체에 대한 InstanceID 와 HashCode를 출력해주는 Code입니다.1234567891011121314151617181920212223242526272829public class HashCodeVSInstanceID : MonoBehaviour{private void Awake(){// 랜덤 인스턴스 ID를 갖는 10 개의 게임 객체를 생성합니다.for (int i = 0; i < 3; i++){GameObject g = new GameObject("abc" + i.ToString("D3"));}}void Start (){Object[] allObjects = Object.FindObjectsOfType<GameObject>();foreach (GameObject go in allObjects){Debug.Log(go + " is an active object (instanceID) " + go.GetInstanceID());}Debug.Log("----------------------------------------------------------------");foreach (GameObject go in allObjects){Debug.Log(go + " is an active object (HashCode) " + go.GetHashCode());}}}cs
결과값입니다.보시는대로 InstanceID 와 HashCode 는 같은 값을 출력합니다.
그러면 InstanceID 처럼 HashCode 도 유일한 값인가 하고 생각하게 되는데 그렇지는 않습니다.
생성된 객체에 한해서만 유일한 값이라고 보시면 될 듯 합니다.
다시말해서 InstanceID와 HashCode를 완전히 똑같다고 생각하시면 안됩니다.
아래 예제를 보겠습니다.
123456789101112public class HashCodeVSInstanceID : MonoBehaviour{void Start (){string A = "aaa";string B = "aaa";Debug.Log(A.GetHashCode());Debug.Log(B.GetHashCode());}}cs
결과값입니다.
보시는대로 A와 B의 HashCode는 같은 값을 출력합니다. 즉 A와 B 는 유일한 HashCode를 가지고 있지 않습니다.결론
객체를 생성(인스턴스화, new 라고 생각하면 될 듯 합니다.) 하면 그 객체의 InstanceID 와 HashCode() 는 똑같고, 유일한값을 가집니다.하지만 객체를 생성 하지 않은 변수나 문자열의 HashCode는 유일한 값이 아닙니다.