LeeTaes 공부노트

[C#] Null 조건 연산자 본문

Game Programming/C#

[C#] Null 조건 연산자

리태s 2024. 6. 25. 13:48
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
반응형