Unity에서 게임 오브젝트의 Null 체크 속도 비교

2023. 10. 30. 15:53·Unity/Tip
반응형

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
'Unity/Tip' 카테고리의 다른 글
  • Unity 빌드 에러 : Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
  • Unity에서 csv파일 만들기
  • IEnumerator 메서드에서 async await 사용
  • 클릭한 위치가 특정 오브젝트 안에 속해 있는지 판단하는 방법
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    긴유통기한우유
    programmerlife
    codingtips
    상품 리뷰 크롤링
    cv2
    스마트스토어리뷰
    쇼핑몰리뷰
    셀레니움
    codingcommunity
    appdevelopment
    유니티
    리뷰관리
    스크립트 실행
    programming101
    ipcamera
    list
    Python
    rtsp
    unity
    C#
    스크립트 실행 순서
    라떼우유
    믈레코비타멸균우유
    리스트
    devlife
    파이썬
    카페24리뷰이관
    learntocode
    리뷰이관
    카페24리뷰
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
Unity에서 게임 오브젝트의 Null 체크 속도 비교
상단으로

티스토리툴바