nullable 형식(C# 프로그래밍 가이드)

업데이트: 2007년 11월

nullable 형식은 System.Nullable<T> 구조체의 인스턴스입니다. nullable 형식은 내부 값 형식의 올바른 값 범위뿐 아니라 null 값도 나타낼 수 있습니다. 예를 들어 Nullable<Int32>("Int32의 nullable"이라고 읽음)에는 -2147483648에서 2147483647까지의 모든 값을 할당하거나 null 값을 할당할 수 있습니다. Nullable<bool>에는 true, false 또는 null 값을 할당할 수 있습니다. 숫자 및 부울 형식에 null 값을 할당할 수 있는 기능은 특히 값이 할당되지 않을 수 있는 요소를 포함하는 데이터베이스 및 기타 데이터 형식을 다룰 때 유용합니다. 예를 들어 데이터베이스의 Boolean 필드는 true 또는 false 값을 저장할 수도 있고, 정의되지 않을 수도 있습니다.

class NullableExample
{
    static void Main()
    {
        int? num = null;
        if (num.HasValue == true)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        // y is set to zero
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

이 예제는 다음 출력을 표시합니다.

num = Null

Nullable object must have a value.

nullable 형식 개요

nullable 형식에는 다음과 같은 특징이 있습니다.

  • nullable 형식은 null 값을 할당할 수 있는 값 형식 변수를 나타냅니다. 참조 형식을 기반으로 nullable 형식을 만들 수는 없습니다. 참조 형식에서는 이미 null 값을 지원합니다.

  • T? 구문은 Nullable<T>의 축약형이고, 여기서 T는 값 형식입니다. 이러한 두 가지 형태는 서로 바꿔 사용할 수 있습니다.

  • nullable 형식에는 일반 값 형식과 같은 방법으로 값을 할당합니다. 예를 들면 int? x = 10; 또는 double? d = 4.108;과 같습니다.

  • Nullable<T>.GetValueOrDefault 메서드를 사용하여 할당된 값을 반환하거나 값이 null인 경우 내부 형식의 기본값을 반환합니다. 예를 들면 int j = x.GetValueOrDefault();와 같습니다.

  • HasValueValue 읽기 전용 속성을 사용하여 null 여부를 확인하고 값을 검색합니다. 예를 들면 if(x.HasValue) j = x.Value;와 같습니다.

    • HasValue 속성에서는 변수에 값이 포함되어 있으면 true를 반환하고, 변수가 null이면 false를 반환합니다.

    • 할당된 값이 있으면 Value 속성은 값을 반환합니다. 그렇지 않으면 System.InvalidOperationException이 throw됩니다.

    • nullable 형식 값의 기본값에서는 HasValue가 false로 설정되며 Value는 정의되지 않습니다.

  • ?? 연산자를 사용하여 현재 값이 null인 nullable 형식을 nullable이 아닌 형식에 할당할 때 적용될 기본값을 할당합니다. 예를 들면 int? x = null; int y = x ?? -1;과 같습니다.

  • 중첩된 nullable 형식은 허용되지 않습니다. Nullable<Nullable<int>> n;과 같은 줄은 컴파일되지 않습니다.

관련 단원

자세한 내용은 다음 링크를 참조하십시오.

C# 언어 사양

자세한 내용은 C# 언어 사양에서 다음 단원을 참조하십시오.

  • 4.1.10 nullable 형식

참고 항목

작업

nullable 샘플

개념

C# 프로그래밍 가이드

참조

Nullable

기타 리소스

Visual C#

C# 참조

What exactly does 'lifted' mean?