Nullable 값 형식이란?
C#에서 int, float와 같이 값 형식은 null을 가질 수 없다.
int? num = null;
하지만 Nullable을 사용하면 값 형식에도 null을 가질 수 있다.
자료형 뒤에 ?를 붙여주면 컴파일 시 Nullable<T> 구조체로 변환된다.
즉, int?는 Nullable<int>와 동일하다는 뜻이다.
Nullable 값 형식은 주로 DB에서 값을 읽어와 저장하는 데이터 구조에 자주 사용한다.
DB에는 null을 허용하는 bool, 날짜 등이 있으므로 C#에서 Nullable 값 형식으로 대체가능하다.
Nullable 사용방법
Nullable 구조체는 2개의 속성을 가지고 있다.
- HasValue : 값을 가지고 있는지 체크하는 속성
- Value : 실제 값을 나타내는 속성
static void Main(string[] args)
{
int? num = 10;
if(num.HasValue)
{
Console.WriteLine($"Value : {num.Value}");
Console.WriteLine($"Type : {num.GetType()}");
// Output :
// Value : 10
// Type: System.Int32
}
}
null일때 메서드를 사용하면 NullReferenceException 예외가 발생하므로 HasValue를 통해 체크해야 한다.
체크해서 값을 가지고있다면 Value를 통해 값을 가져오거나 메서드를 사용하면 된다.
static void Main(string[] args)
{
int? num = null;
int? num2 = 100;
Console.WriteLine($"num : {num.GetValueOrDefault()}");
Console.WriteLine($"num2 : {num2.GetValueOrDefault()}");
}
GetValueOrDefault 메소드는 값이 있는 경우 할당된 값을 반환한다.
만약, null인 경우 기존 타입의 default 값을 반환한다.
Nullable 값 형식에서 기본 형식으로 변환
static void Main(string[] args)
{
int? num = null;
int num2 = (int)num; // null인 경우 InvalidOperationException 예외 발생
Console.WriteLine(num2);
}
명시적 캐스트를 통해 변환을 할 수 있다.
하지만, null인 경우 InvalidOperationException 예외가 발생한다.
static void Main(string[] args)
{
int? num = null;
int num2 = num ?? 0;
Console.WriteLine(num2);
// Output:
// 0
}
null인 경우도 처리하기 위해 null 병합 연산자 ??를 사용하여 변환할 수 있다.
만약 null인 경우 ?? 연산자 뒤에 있는 값으로 할당하게 된다.
'C# > 개념공부' 카테고리의 다른 글
C# var 키워드란? (0) | 2024.01.06 |
---|---|
C# enum 열거형 (1) | 2024.01.03 |
C# 상수(const) (1) | 2024.01.02 |
C# 변수 (0) | 2023.12.21 |
C# 자료형 크기 및 범위 (0) | 2023.12.19 |