프로젝트 일지/Unity

[Unity/TIL] 트러블 슈팅 - 예상치 못한 생성자 호출과 텅 빈 생성자 Parameter 에 당황한 썰

톰마토 2025. 5. 7. 23:17

문제 상황

파이어베이스에 데이터를 저장하고 로드하는 작업 중에 역직렬화 대상인 클래스 중 한 곳에서 Null 참조 예외가 뜨고 데이터 로드에 실패했다. 

에러 내용

문제 분석 과정

MyUnitStatus에서 Null에러가 나고 있고, 해당 위치에 가보니 생성자에서 에러가 나고 있었다. 생성자의 파라미터로 어떠한 데이터 List가 들어가는데, 해당 데이터가 Null이었다.

하지만 중요한 것은 MyUnitStatus 클래스는 생성자를 직접 특정 시점에 호출해서 생성하고 있는 클래스이기 때문에 데이터가 Null인채로 들어가면 안 되는 곳이었다.

=> 생성자를 의도치않은 곳에서 호출하고 있다는 의심이 들어 중단점을 걸고 값과 호출스택을 살펴보게 되었다. 

 

원인

아래 사진에서 호출스택을 보면 Json어쩌구: DeSerialize, CreateObject, CreateObjectUsingCreatorWithParameters 등등이 순서대로 보인다. 역직렬화 과정에서 자동으로 오브젝트를 만들면서 생성자가 호출됐음을 알 수 있었다. 

중단점과 호출스택

외부 데이터를 전달받지 못한 상태에서 생성자의 내부 로직이 실행되니 Null 참조 예외가 발생한 것이다. 

 

해결 

해결 후 코드

해당 예외가 발생했던 MyUnitStatus의 생성자의 로직은 역직렬화 시에 필요하지 않기 때문에 매개변수가 없는 생성자를 추가해서 해결하였다. Json에서는 새로 만든 생성자를 타고 지나가도록 한 것이다.

 


이제서야 말하지만 이 글의 부제목은 "Json 역직렬화 시 호출된 생성자에서 외부 데이터 접근으로 인한 NullReferenceException" 라고 정했다.