Unity Null 레퍼런스 예외 처리 가이드
Null 레퍼런스 예외란?
NullReferenceException
은 객체를 참조하지 않는 레퍼런스 변수를 사용할 때 발생합니다. C# 및 JavaScript의 레퍼런스 변수는 개념적으로 C와 C++의 포인터와 유사합니다. 기본 레퍼런스 타입은 null
이며, 객체를 참조하지 않음을 나타냅니다.
결정적으로, 만약 null
인 변수를 통해 객체에 접근하려고 하면 프로그램이 예외를 발생시킵니다. 흔히 다음과 같은 오류 메시지로 나타납니다.
NullReferenceException: Object reference not set to an instance of an object
오류 발생 예제
예를 들어, 다음 코드 스니펫에서는 "wibble"이라는 게임 오브젝트를 찾으려 합니다. 하지만 해당 오브젝트가 존재하지 않으면 Find()
함수는 null
을 반환합니다.
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
void Start () {
GameObject go = GameObject.Find("wibble");
Debug.Log(go.name);
}
}
위 코드에서 "wibble" 게임 오브젝트가 없으므로 런타임에 NullReferenceException
이 발생합니다.
Null 체크로 예외 처리하기
이 문제를 해결하기 위해 null
체크를 통해 변수가 존재하는지 확인할 수 있습니다. 아래 코드는 이를 보여줍니다.
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
void Start () {
GameObject go = GameObject.Find("wibble");
if (go) {
Debug.Log(go.name);
} else {
Debug.Log("No game object called wibble found");
}
}
}
이렇게 하면 go
변수가 null
이 아니어야만 이름을 출력하려고 시도합니다. 반대로 객체가 없다면 알림 메시지를 출력합니다.
트라이/캐치 블록으로 예외 처리하기
또한, 인스펙터에서 설정해야 하는 변수를 사용할 때 초기화를 잊어서 NullReferenceException
이 발생할 수 있습니다. 아래 예제처럼 try/catch
블록을 사용하여 이를 처리할 수 있습니다.
using UnityEngine;
using System;
using System.Collections;
public class Example2 : MonoBehaviour {
public Light myLight; // set in the inspector
void Start () {
try {
myLight.color = Color.yellow;
}
catch (NullReferenceException ex) {
Debug.Log("myLight was not set in the inspector");
}
}
}
요약
NullReferenceException
은 초기화되지 않은 변수를 사용할 때 발생합니다.- 오류 메시지는 문제의 위치와 원인에 대한 많은 정보를 제공합니다.
- 객체에 접근하기 전에
null
체크를 하거나,try/catch
블록을 활용하여 예외를 예방할 수 있습니다.
이 안내를 통해 Unity에서 NullReferenceException
을 효과적으로 처리하는 방법을 이해하시길 바랍니다.