[C#] Null 조건 연산자

2024. 6. 25. 13:48·Game Programming/C#
728x90
반응형

Null 검사

Null 체크는 프로그래밍에서 매우 중요한 작업으로, 매우 빈번하게 사용됩니다.

 

다음 예시를 보면

class Test
{
    public string name = null;
}

internal class Program
{
    static void Main(string[] args)
    {
        Test test = new Test();
        PrintName(test);
    }

    static void PrintName(Test test)
    {
        Console.WriteLine(test.name);
    }
}

PrintName() 함수에서 test의 name을 출력하는 부분이 있습니다.

현재 test 객체의 name은 null값을 가지고 있으며, 접근하게 된다면 NullReferenceException이 발생합니다.

 

위와 같은 상황을 방지하기 위해 저는 C++과 동일하게 Null 체크를 진행하였습니다.

...

static void PrintName(Test test)
{
    if (test != null)
    {
    	if (test.name != null)
        {
            Console.WriteLine(test.name);
        }
        else
        {
            Console.WriteLine("Null");
        }
    }
}

위와 같은 Null 체크를 더욱 쉽고 간편하게 할 수 있도록 도와주는 조건 연산자가 존재합니다.

Null 조건 연산자 ( Null-conditional operator )

C#의 Null 조건 연산자(Null-conditional operator)는 ?.과 ?[] 연산자를 통해 객체가 null인지 여부를 확인한 후 안전하게 속성이나 메서드에 접근하거나 배열/컬렉션의 요소에 접근할 수 있습니다.

 

위에서 진행했던 기존 방식보다 축약해서 사용할 수 있기에 자주 사용되는 연산자입니다.

 

  • ?. 연산자 : 객체의 속성, 메서드에 접근할 때 사용합니다.
  • ?[] 연산자 : 배열 또는 컬렉션의 인덱스에 접근할 때 사용합니다.

간단한 예시로 위 코드를 Null 조건 연산자를 사용해 수정해보도록 하겠습니다.

...

static void PrintName(Test test)
{
    // test? : 테스트 객체가 존재하지 않는다면 Null
    if (test?.name != null)
    {
    	Console.WriteLine(test.name);
    }
    else
    {
    	Console.WriteLine("Null");
    }
}

 

?. 연산자를 사용해 코드를 약간 줄일 수 있었습니다. 위와 같은 상황에서 더욱 효율적으로 코드를 작성하기 위해

?? 연산자(null-coalescing operator)를 사용할 수 있습니다.

 

  • ?? 연산자(null-coalescing operator) : 앞의 값이 Null인 경우 해당 연산자 뒤의 디폴트 값을 반환합니다.
...

static void PrintName(Test test)
{
    // test? : test 객체가 존재하는지 확인
    // ?? : test?.name이 Null인지 체크. Null이라면 뒤의 "Null" 문자열 반환
    Console.WriteLine(test?.name ?? "Null");
}

 

?? 연산자를 사용해 더욱 코드를 깔끔하고 가독성 좋게 작성할 수 있습니다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Game Programming > C#' 카테고리의 다른 글

[C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy)  (0) 2024.06.29
[C#] 의존성 주입(DI, Dependency Injection)  (0) 2024.06.29
[C#] as, is  (0) 2024.06.25
[C#] Delegate  (0) 2024.06.25
[C#] 가변 파라미터, 선택적 인수, 명명된 인수  (0) 2024.06.25
'Game Programming/C#' 카테고리의 다른 글
  • [C#] 의존성 주입(DI, Dependency Injection)
  • [C#] as, is
  • [C#] Delegate
  • [C#] 가변 파라미터, 선택적 인수, 명명된 인수
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sesac
    c#
    timelessadventure
    unrealengine
    tsoftobjectptr
    청년취업사관학교
    후기
    2019 kakao
    issac3d
    코딩테스트
    백준
    fsoftobjectpath
    프로젝트
    C++
    ai controller
    2018 kakao
    pcce 기출문제
    구현
    Unreal Engine
    delegate
    2022 kakao
    fruitspuzzle
    unity
    CS지식
    dataasset
    Algorithm
    project t.a develop
    프로세스
    Summer/Winter Coding
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[C#] Null 조건 연산자
상단으로

티스토리툴바