본문 바로가기

C#

C# nullable 값 형식(Nullable<T>) 고급 사용법

C#에서 nullable 값 형식(Nullable<T>)은 값 형식에 null을 허용하여 코드의 유연성을 높입니다. 기본 사용법은 익숙하지만, 고급 기능을 활용하면 더욱 강력한 코드 작성이 가능합니다.

1. Nullable<T> 기본 이해

Nullable<T>는 T가 값 형식일 때 null 값을 가질 수 있도록 하는 구조체입니다. 구문상으로는 T?로 표현합니다.

int? num = null;
if (num.HasValue) {
    Console.WriteLine(num.Value);
} else {
    Console.WriteLine("값이 없습니다.");
}

2. Null 병합 연산자(??) 활용

Null 병합 연산자(??)는 nullable 형식이 null일 때 기본값을 지정할 때 유용합니다.

int? a = null;
int b = a ?? 10; // a가 null이면 10
Console.WriteLine(b);

3. Nullable.GetUnderlyingType() 메서드

리플렉션을 사용할 때 Nullable<T>의 기본 타입을 알아야 할 때 유용합니다.

Type type = typeof(int?);
Type underlyingType = Nullable.GetUnderlyingType(type);
Console.WriteLine(underlyingType); // System.Int32

4. Nullable<T>와 LINQ 사용법

nullable 값 형식을 LINQ 쿼리와 함께 활용하면, null 체크를 더 간결하게 할 수 있습니다.

int?[] scores = {90, null, 70, 85};
var validScores = scores.Where(s => s.HasValue).Select(s => s.Value);
foreach(var score in validScores) {
    Console.WriteLine(score);
}

5. 사용자 정의 연산자 사용

Nullable<T>는 내부적으로 연산자를 오버로드하여, null 상태에서의 연산을 안전하게 지원합니다. 직접 오버로드는 불가능하지만, 이를 이해하면 null 안전 코드 작성에 도움이 됩니다.

이상으로 C# nullable 값 형식의 고급 사용법을 정리했습니다. Null 가능성 제어를 통해 안정적이고 깔끔한 코드를 작성하세요.