유니티

유니티 - Queue의 NullReferenceException

bugmin 2024. 6. 23. 22:06

지옥 같은 NullReferenceException 이다.

 

이전에도 이것 때문에 글을 작성했는데 다시 작성을 하게 됐다.

 

만일 리스트와 큐를 선언한다하자

 

public으로 선언하면 알다시피 

 

인스팩터 창에서 넣어줄 수가 있어 별도의 초기화를 하지 않아도 된다.

 

이렇게  인스팩터창에서 리스트에 값을 넣어주고

 

아래와 같이 리스트의 값들을 큐에 넣어주는 작업을 해보자

 

void Start()
{
    for(int i = 0; i < pList.Count; i++)
    {
    	pQueue.Enqueue(pList[i].GetComponent<Card>());
    }
}

 

리스트는 GameObject라 Card 컴포넌트를 가져와 Card 타입의 큐에 넣어주고 있는 모습이다.

이렇게 하면 리스트에 있는 Card 데이터를 다 큐에 담아준 것으로 보인다.

 

하지만 이렇게 하면 NullReferenceException를 마주하게 된다...

 

대체 뭘까...?

 

알아야할 것은 큐는 인스팩터창에 나오지를 않는다.

 

그렇기 때문에 리스트 쓰듯이 큐를 초기화 하지 않고 작성하면 NullReferenceException를 뿜어내는 것이다...

 

큐 초기화

 

Queue<int> intQueue = new Queue<int>();

 

이렇게 필드상에서 바로 초기화를 해주자

(Awake, Start 메서드에서 초기화할 수도 있지만 그렇게 했을 때도 Null 에러가 뜨는 경우가 생겼었다)

 

인스팩터 창에 나오지 않는 자료구조들은 반드시 필드에서 초기화를 하는 습관을 들이자!!!!!!