ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GetInstanceID 와 GetHashCode 정리할 것.
    Unity, C#/GetInstanceID와 GetHashCode 2019. 2. 26. 17:59

    GetInstanceID 와 GetHashCode에 대해 정리해 보았습니다.

     

     

    Object.GetInstanceID 와 HashCode

     

    객체의 인스턴스 id를 리턴합니다. 객체의 인스턴스 id는 항상 고유해야 합니다. 즉 같은 객체를 생성해도 InstanceID는 다르게 생성됩니다.

    아래 예제는 같은 객체에 대한 InstanceID 와 HashCode를 출력해주는 Code입니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public 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를 완전히 똑같다고 생각하시면 안됩니다. 

     

    아래 예제를 보겠습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public 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는 유일한 값이 아닙니다. 

    댓글

Designed by Tistory.