영상의 내용을 정리해보자면, 1. serializedObject는 inspectorView에서 비워놓아도 실제로는 그 값이 null이 아니다. (fake null) 2. 유니티에서 == 연산자로 null과 비교하는 것은 UnityEngine.Object에서 오버라이드 되어있어 실제 null과 비교하지 않는다. (fake null) 3. 패턴매칭 "is null" 을 이용하는 방법은 C++ 네이티브 null과 비교하는 연산이기에, 유니티에서 "== null"을 이용하는 방법과 다르다. (다른 결과를 반환할 수 있다.) 4. 그래서 null 조건부 연산자(?.)를 활용할 때 의도하지 않은 결과가 발생할 수 있다. (C++ 네이티브에서 null을 판단하는 기준과 유니티에서 null을 판단하는 기준이 다르기 때문) 5. 그래서 어레이님은 코드 작성을 간단하게하기 위해 Safe와 SafeInvoke 라는 확장 함수를 정의해 제안한다. 인걸까요?
좋은 내용 감사합니다!~❤
제목에 긇혀서 달려왔습니다
영상의 내용을 정리해보자면,
1. serializedObject는 inspectorView에서 비워놓아도 실제로는 그 값이 null이 아니다. (fake null)
2. 유니티에서 == 연산자로 null과 비교하는 것은 UnityEngine.Object에서 오버라이드 되어있어 실제 null과 비교하지 않는다. (fake null)
3. 패턴매칭 "is null" 을 이용하는 방법은 C++ 네이티브 null과 비교하는 연산이기에, 유니티에서 "== null"을 이용하는 방법과 다르다. (다른 결과를 반환할 수 있다.)
4. 그래서 null 조건부 연산자(?.)를 활용할 때 의도하지 않은 결과가 발생할 수 있다. (C++ 네이티브에서 null을 판단하는 기준과 유니티에서 null을 판단하는 기준이 다르기 때문)
5. 그래서 어레이님은 코드 작성을 간단하게하기 위해 Safe와 SafeInvoke 라는 확장 함수를 정의해 제안한다.
인걸까요?
네 맞습니다
public static TResult SafeInvoke(this T obj, Func callback)
{
if (obj == null)
return default;
return callback(obj);
}
아 제목에 긇힘
델리게이트에 많이들 쓰던데