본문 바로가기

C#

C# Nullable 참조 타입

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