C#

[C#]Nullable

이경로 2023. 7. 14. 12:22
static void Main(string[] args)
{
    int? a = null;
    int i = a??10;
    Console.WriteLine(i);
}​
class Program
{
    static string printNum()
    {
        return null;
    }

    static void Main(string[] args)
    {
        Console.WriteLine(printNum());
    }
}

참조 타입의 경우 위와 같이 null을 명시적으로 사용할 수 있다. 하지만 값 타입은 null을 허용하지 않기 때문에 문제가 발생한다.

nullable이란 null+able이라는 뜻 그대로 null이 가능하도록 해주는 것이다. 문법의 경우 매우 간단하게도 타입 뒤에 "?"만 붙이면 nullable이 된다.

 

static void Main(string[] args)
{
	int i = printNum().Value;
}

nullable의 경우 기존의 값타입과 다른 타입으로 취급받기 때문에 값을 복사하려면 Value를 호출하여 사용할 수 있다.

 

하지만 값타입에 null이 들어가게 되면 해당 값을 사용할 때 에러가 발생하게 된다. 그렇기 때문에 nullable을 사용할 때는 항상 조건문 등을 활용해 값이 null인지 여부를 검사하고 예외처리를 해 주어야 한다.

하지만 매번 조건문을 작성하는 것은 번거로운 일이다. C#에서는 이를 해결해 줄 문법 또한 가지고 있다.

static void Main(string[] args)
{
    int? a = null;
    int i = a??10;
    Console.WriteLine(i);
}

해당 코드는 a가 null이라면 10을, 아니면 a값을 참조하겠다는 의미이다.

코드에서 a가 null이기 때문에 i에 10이 들어간 모습이다.