글 작성자: Doublsb

원인

C# 9.0에서 추가된 패턴 일치 중, not 패턴은 해당 패턴이 일치하지 않도록 요구하는 기능이다.

 

개인적으로는 A != null을 사용하는 것보다 A is not null을 사용하는 것이 명확하다고 생각했기에,
개발 중인 코드의 조건문에 is를 적극적으로 사용하기로 하였다.

 

그러나…

 

public Animator Animator
{
  get
  {
    if (animator is null)
      animator = GetComponent<Animator>();

    return animator;
  }
}

위의 코드는 animator == null일 때 새 애니메이터를 찾아 대입하는, 아주 명확하고 간단한 코드다.

 
오류를 뿜어내는 get_Animator

하지만 파이어베이스에서는 해당 구문에 참조가 없다며 오류를 뿜어내고 있었다.
null 체크로 오류가 날 만한 것은 unity의 fake null밖에는 없었으므로, 이것저것 찾아 보았다.

 

 

결론

공식 문서

공식 문서의 말 그대로, is null을 사용하는 경우 유니티에서 오버로드한 ==이나 !=를 사용하지 않는다.

그러면 네이티브 C++과 Unity의 리턴값이 달라 fake null이 발생한다.

 

UnityObject와 관련된 널 체크를 하려면 ==!=를 사용해야겠다. 정확히는, 사용을 자제해야 할 듯.
ReferenceEquals 메서드가 길어서 가독성이 불편한 경우에는 is를 사용해도 될 지도…?

 

 

관련 유니티 포럼

 

Question - Null check with "is" operator on Unity Object?

Since Unity overrides the equality operator for the null-check behavior, the null-coalescing operators would not work. "is" operator has a side...

forum.unity.com

 

 

Fake Null에 대한 글

 

Unity Null Check할 때 성능을 개선할 수 있는 방법

Null 체크로 해당 객체가 실제로 존재하는지 확인하는 일은 매우 자주 발생하곤 한다. 그런데 최근 IDE를 VS에서 Rider로 갈아탔더니 null 체크를 할 때마다 이것저것 알려주었고, 충격적인 사실을 여

doublsb.tistory.com

 

반응형

'프로그래밍 > Unity' 카테고리의 다른 글

Unity 인스펙터 꿀팁 알아보기  (0) 2023.08.03
언어권에 따른 String 변환에 주의하자  (0) 2023.02.20
Test Framework 적용하기  (0) 2023.01.27
UniTask 파헤치기  (0) 2022.09.27
Unity Device Simulator 알아보기  (0) 2022.07.18