본문 바로가기
CSharp/CSharp 문법

nullable reference type으로 null 안정성 높이기

by MonoSoft 2025. 10. 17.
728x90
반응형

nullable reference type으로 null 안정성 높이기

C# 8.0부터 추가된 nullable reference type(NRT) 기능은
개발자가 null로 인한 **NullReferenceException(널 참조 예외)**을 
예방하도록 돕는 강력한 컴파일러 기능입니다.
즉,
string? → null을 허용하는 참조형
string → null을 허용하지 않는 참조형

컴파일러는 코드 상에서 null이 될 수 있는 가능성을 미리 경고해주며,
이를 통해 런타임 예외 대신 컴파일 타임에서 문제를 해결할 수 있습니다.

#nullable enable // nullable reference type 기능 활성화
using System;

class Program
{
    static void Main()
    {
        string? name = GetUserName(); // null 가능성이 있음
        Console.WriteLine($"[입력 값] {name}");

        // ⚠️ null 검사 없이 사용 시 경고 발생 (컴파일러 수준)
        if (name != null)
        {
            Console.WriteLine($"대문자 변환: {name.ToUpper()}");
        }
        else
        {
            Console.WriteLine("이름이 입력되지 않았습니다.");
        }
    }

    static string? GetUserName()
    {
        Console.Write("이름을 입력하세요 (엔터 시 null): ");
        string input = Console.ReadLine() ?? string.Empty;

        // 엔터만 누르면 null 반환
        return string.IsNullOrWhiteSpace(input) ? null : input;
    }
}

이름을 입력하세요 (엔터 시 null): Kim
[입력 값] Kim
대문자 변환: KIM
이름을 입력하세요 (엔터 시 null):
[입력 값] 
이름이 입력되지 않았습니다.

#nullable enable : nullable reference type 기능을 파일 단위로 활성화.
string? : null 허용 참조형으로 선언.
컴파일러가 null 가능성을 감지하면 경고(CS8602, CS8604)를 발생.
가능한 모든 코드 파일에 #nullable enable을 기본 적용.
null 가능성이 있는 변수에는 반드시 검사(if (x != null)) 또는 
null 병합 연산(??, ?.)을 사용.
모델, DTO, API 입력값 등에 적극 적용하면 안정성 향상.
API 모델 검증: 클라이언트가 보낸 필드가 null일 수 있는지 명시적 표현 가능.
DB 매핑: nullable/non-nullable 필드를 C# 모델에서 정확히 구분.
협업 시 품질 보증: nullable 타입이 코드 계약(contract) 역할을 하여 팀원 간 오해 방지.
코드 리팩토링 시: null 검사 로직을 단순화해 유지보수성 향상.

 

#csharpnull

#csharpnullable

#csharp널허용

#csharpnullcheck

#csharpnull안정성

#csharpnull연산자

#csharpnullableenable

#csharpnull처리

#csharpnull방지

#csharpNullReferenceException

 

728x90
반응형

댓글