C#에서 값 형식(value type)에 해당하는 자료형들이 있다. (byte, int, float, ...)
이런 값 형식의 변수들은 초기화해서 사용하지 않으면 C# 컴파일러는 컴파일조차 해주지 않는다.
하지만, 개발을 하다 보면 이런 값 형식의 데이터에도 어떠한 값도 가지지 않게 하고 싶은 경우가 종종 있다.
참조 형식(reference type)은 null을 줄 수 있지만, 값 형식에는 null을 줄 수가 없다.
그래서, C#에서는 이런 값 형식 자료형 변수에도 null 값을 할당할 수 있도록 Nullable 형식이란 걸 지원한다.
Nullable
값 형식에 한해서 사용할 수 있으며, 선언하는 방식은 다음과 같다.
데이터타입? 변수이름;
사용 예시를 보면 다음과 같이 쓸 수 있다.
// int data = null; 오류
int? data = null;
hasValue와 Value 속성
모든 Nullable 형식은 hasValue와 Value 속성을 가진다.
int? data = null;
Console.WriteLine(data.HasValue); // data는 null이므로 False 출력
int a = 100;
Console.WriteLine(a.HasValue); // a = 100 이므로 True 출력
Console.WriteLine(a.Value); // 100 출력
만약 HasValue = False인데 Value를 사용한다면, CLR은 InvalidOperationException 예외를 띄운다.