1. 개념 설명
Nullable 참조 타입은 C# 8부터 도입된 기능으로, 참조형의 null 가능성을 타입 시스템에 명시합니다. 예를 들어 string은 null이 아님을, string?은 null일 수 있음을 의미하며, 컴파일러가 흐름 분석으로 경고를 제공합니다. 파일 또는 프로젝트에 #nullable enable을 설정해 활성화합니다.
2. 코드 예제
간단한 콘솔 예제입니다. ?.와 ??로 안전하게 접근하고, 확신이 있을 때만 null 억제 연산자 !를 사용합니다.
#nullable enable
using System;
class Program
{
static void Main()
{
string? name = GetName(allowNull: true);
Console.WriteLine($"Length: {name?.Length ?? 0}");
name = "Alice";
string nonNullName = name!;
Console.WriteLine(nonNullName.ToUpper());
Greet(nonNullName);
string? maybe = null;
Console.WriteLine(maybe ?? "fallback");
}
static string? GetName(bool allowNull) => allowNull ? null : "Bob";
static void Greet(string who) => Console.WriteLine($"Hello, {who}");
}실행하면 길이가 0으로 출력된 뒤, 이름을 대문자로 변환하고 인사 메시지가 표시됩니다. null인 경우엔 기본값 fallback이 출력됩니다.
3. 주의사항/팁
API 경계에서 매개변수와 반환형을 정확히 T/T?로 표기해 의도를 드러내세요. !는 경고만 숨길 뿐 런타임 안전을 보장하지 않으므로, 가드 코드(if (x is null) throw ...)로 불변식을 확보한 뒤 사용합니다. 값 형식의 Nullable<T>(예: int?)와는 다른 개념이며, 이 기능은 컴파일 타임 분석이라는 점을 기억하세요.
'C#' 카테고리의 다른 글
| C# 델리게이트와 이벤트 (0) | 2026.03.31 |
|---|---|
| C# 제네릭 (Generics) 기초 (0) | 2026.03.31 |
| C# 레코드 타입 (Record) (0) | 2026.03.27 |
| C# 패턴 매칭 (Pattern Matching) (0) | 2026.03.26 |
| C# 비동기 프로그래밍 async/await (0) | 2026.03.26 |