nullable 형식(C# 프로그래밍 가이드)
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 형식 사용(C# 프로그래밍 가이드)를 참조하십시오.
nullable 형식 개요
nullable 형식에는 다음과 같은 특징이 있습니다.
nullable 형식은 null 값을 할당할 수 있는 값 형식 변수를 나타냅니다. 참조 형식을 기반으로 nullable 형식을 만들 수는 없습니다. 참조 형식에서는 이미 null 값을 지원합니다.
T? 구문은 Nullable<T>의 축약형이고, 여기서 T는 값 형식입니다. 이러한 두 가지 형태는 서로 바꿔 사용할 수 있습니다.
nullable 형식에는 일반 값 형식과 같은 방법으로 값을 할당합니다. 예를 들면 int? x = 10; 또는 double? d = 4.108과 같습니다. Nullable 형식은 null: int? x = null. 값을 할당할 수도 있습니다.
Nullable<T>.GetValueOrDefault 메서드를 사용하여 할당된 값을 반환하거나 값이 null인 경우 내부 형식의 기본값을 반환합니다. 예를 들면 int j = x.GetValueOrDefault();와 같습니다.
HasValue 및 Value 읽기 전용 속성을 사용하여 Null에 대해 테스트하고 값을 검색합니다(예제 if(x.HasValue) j = x.Value; 참조).
HasValue 속성은 변수에 값이 포함되어 있을 경우 true를 반환하고, 변수가 null이면 false를 반환합니다.
할당된 값이 있으면 Value 속성은 값을 반환합니다. 그렇지 않으면 System.InvalidOperationException이 throw됩니다.
HasValue의 기본값은 false입니다. Value 속성에는 기본값이 없습니다.
== and != 연산자를 Nullable 형식으로 사용할 수도 있습니다(예제 if (x != null) y = x; 참조).
?? 연산자를 사용하여 현재 값이 null인 nullable 형식을 nullable이 아닌 형식에 할당할 때 적용될 기본값을 할당합니다. 예를 들면 int? x = null; int y = x ?? -1;과 같습니다.
중첩된 nullable 형식은 허용되지 않습니다. Nullable<Nullable<int>> n;과 같은 줄은 컴파일되지 않습니다.
관련 단원
자세한 내용은 다음을 참조하십시오.
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.