is null 연산은 유니티의 ==를 사용하지 않는다
글 작성자: 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일 때 새 애니메이터를 찾아 대입하는, 아주 명확하고 간단한 코드다.
하지만 파이어베이스에서는 해당 구문에 참조가 없다며 오류를 뿜어내고 있었다.
null 체크로 오류가 날 만한 것은 unity의 fake null밖에는 없었으므로, 이것저것 찾아 보았다.
결론
공식 문서의 말 그대로, is null을 사용하는 경우 유니티에서 오버로드한 ==이나 !=를 사용하지 않는다.
그러면 네이티브 C++과 Unity의 리턴값이 달라 fake null이 발생한다.
UnityObject와 관련된 널 체크를 하려면 ==나 !=를 사용해야겠다. 정확히는, 사용을 자제해야 할 듯.
ReferenceEquals 메서드가 길어서 가독성이 불편한 경우에는 is를 사용해도 될 지도…?
관련 유니티 포럼
Fake Null에 대한 글
반응형
'프로그래밍 > 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 |
댓글
이 글 공유하기
다른 글
-
Unity 인스펙터 꿀팁 알아보기
Unity 인스펙터 꿀팁 알아보기
2023.08.03 -
언어권에 따른 String 변환에 주의하자
언어권에 따른 String 변환에 주의하자
2023.02.20 -
Test Framework 적용하기
Test Framework 적용하기
2023.01.27 -
UniTask 파헤치기
UniTask 파헤치기
2022.09.27