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 사용
  • 클릭한 위치가 특정 오브젝트 안에 속해 있는지 판단하는 방법
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (727)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (18)
      • 일기장 (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)
  • 인기 글

  • 태그

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

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

티스토리툴바