반응형
Unity 개발을 하다 보면 게임 오브젝트의 Null 체크를 자주 사용하게 됩니다. 게임 오브젝트가 Null인지 확인하기 위해 is 연산자와 == 연산자를 사용할 수 있습니다.
is 연산자와 == 연산자의 차이점
is 연산자는 객체의 참조 값이 Null인지 확인합니다. == 연산자는 객체의 값이 Null인지 확인합니다.
is 연산자의 장점
- == 연산자보다 빠르다.
- 객체의 값이 Null인지 확인하지 않는다.
== 연산자의 장점
- is 연산자보다 간결하다.
- 객체의 값이 Null인지 확인할 수 있다.
JetBrain Rider의 제안
최근 필자는 IDE를 VSCode에서 JetBrain Rider로 바꾸었다. Rider에서는 다음과 같은 제안을 했다.
Comparison to 'null' is expensive.
Null에 대한 비교는 많은 비용이 들어간다고 해 관련 내용을 찾아 테스트를 진행해보았다.
테스트 결과
테스트 코드를 작성하여 is 연산자와 == 연산자의 속도를 비교해 보았습니다.
public class Test : MonoBehaviour
{
public GameObject prefab;
private IEnumerator Start ( )
{
var go = Instantiate(prefab);
Destroy(go);
Debug.Log ( $"go is null: {go is null}. go == null: {go == null}." ); // False False.
yield return null;
Debug.Log ( $"go is null: {go is null}. go == null {go == null}." ); // False True.
yield return null;
var sw = new Stopwatch();
sw.Start ( );
for ( var i = 0; i < 10_000_000; ++i )
_ = go is null;
sw.Stop ( );
Debug.Log ( $"go is null: {sw.ElapsedMilliseconds} ms" ); // Test machine : ~10 ms
sw.Reset ( );
sw.Start ( );
for ( var i = 0; i < 10_000_000; ++i )
_ = go == null;
sw.Stop ( );
Debug.Log ( $"go == null: {sw.ElapsedMilliseconds} ms" ); // Test machine : ~4000 ms
yield return null;
Debug.Log ( $"go is null: {go is null}. go == null {go == null}." ); // STILL False True.
#if UNITY_EDITOR
EditorApplication.ExitPlaymode ( );
#endif
}
}
테스트 결과, is 연산자는 == 연산자보다 약 400배 빠른 것으로 나타났습니다.
실제 프로젝트에서 is 연산자와 == 연산자의 속도 차이는 더 클 수 있습니다. 이는 게임 오브젝트의 수가 많을수록 is 연산자가 더 빠르기 때문입니다.
결론
Unity에서 게임 오브젝트의 Null 체크를 할 때는 is 연산자를 사용하는 것이 좋습니다. is 연산자는 == 연산자보다 빠르고, 객체의 값이 Null인지 확인하지 않기 때문입니다.
'Unity > Tip' 카테고리의 다른 글
Unity 빌드 에러 : Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 (0) | 2023.11.02 |
---|---|
Unity에서 csv파일 만들기 (2) | 2023.11.01 |
IEnumerator 메서드에서 async await 사용 (0) | 2023.10.24 |
클릭한 위치가 특정 오브젝트 안에 속해 있는지 판단하는 방법 (0) | 2023.10.04 |
Animation Preview Auto Play (0) | 2023.09.11 |