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
'CSharp > CSharp 문법' 카테고리의 다른 글
| record struct로 불변 값 타입(Value Type) 안전하게 설계하기 (0) | 2025.10.22 |
|---|---|
| LINQ의 First() vs FirstOrDefault() 차이 이해하기 (0) | 2025.10.21 |
| HashSet<T>와 Dictionary<TKey,TValue>로 빠른 조회 성능 확보하기 (0) | 2025.10.02 |
| 효율적인 예외 처리와 ThrowHelper 패턴 (0) | 2025.09.30 |
| ValueTask로 비동기 성능 최적화하기 (0) | 2025.09.26 |
댓글