매개변수 오타로 인한 NullReferenceException 문제 해결하기
문제 발생.
The Stack 게임을 만드는 중 Start 버튼을 누르면 게임이 진행되게 코드를 짰는데 문제가 발생했다.
Start 버튼을 누르면 오류가 뜨며 버튼이 반응하지 않았다.
오류 내용을 살펴보았다.
NullReferenceException: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
HomeUI.OnClickStartButton() (Assets/Scripts/HomeUI.cs:29)
어떤 객체를 사용하려고 했는데, 그 객체가 null인 상태에서 .OnClickStartButton() 작업을 하려 했기 때문에 에러가 난 것 같다.
HomeUI의 29번째 줄에서 문제가 발생한 것으로 보인다.
문제 분석.
HomeUI이다.
uiManager.OnClickStart(); 부분에서 문제가 있는 것 같았다.
여기는 문제가 없는 것 같으니, uiManager로 계속 타고 들어가 보겠다.
UIManager에서도 이상한 점은 없었다.
HomeUI는 BaseUI를 상속받고 있다.
한번 BaseUI도 살펴보았다.
확인해보니 초록색 줄과 경고가 떠 있었다. 이곳이 문제였다..
문제점.
매개변수 이름은 uIManager (대문자 I) 이다.
그런데 대입할 때는 uiManager (소문자 i) 를 썼다.
C#은 대소문자를 구분하기 때문에 :
- uIManager: 매개변수 이름 (존재함).
- uiManager: 코드상에는 있지만 이 범위 안에는 존재하지 않음.
따라서
this.uiManager = uiManager;
는 실질적으로 아무 효과가 없는 코드였다.
즉, this.uiManager에는 아무 값도 대입되지 않아서 null로 남게 된다.
그 상태로 버튼을 클릭하면 :
→ uiManager.OnClickStart(); 호출
→ 하지만 uiManager가 null 상태
→ NullReferenceException 에러 발생
이렇게 문제가 발생한 것이었다.
해결 방법.
Init() 메서드 내에서 매개변수 이름을 정확히 일치시키면 된다.
매개변수 이름을 소문자로 바꿔서 수정했다.
수정 이후에는 startButton 클릭 시 NullReferenceException 에러가 발생하지 않고 정상적으로 동작하는 것을 확인했다!
- ✅ 오늘 배운 것 요약
- NullReferenceException은 객체가 null일 때 발생하는 에러이다.
- 매개변수 이름과 사용하는 변수 이름을 정확히 일치시켜야 한다.
- 에러 메시지뿐만 아니라, 경고 메시지도 오류를 찾는 데 큰 도움이 될 수 있다.