C# Nullable 함정: T?가 예상과 다를 때
2025-08-29
C#에서 Nullable 값 형식과 Nullable 참조 형식 모두에 `T?` 구문을 재사용하면 혼란이 발생합니다. 값 형식의 경우 `T?`는 `Nullable`의 구문 설탕이며, 서로 다른 형식을 나타냅니다. 그러나 참조 형식의 경우 `T?`는 단순히 의도를 나타내는 표시자이며, 컴파일 후에는 `T?`와 `T`가 같은 형식이 됩니다. 이러한 차이는 제네릭 메서드를 작성할 때 컴파일 오류로 이어집니다. 이 문서에서는 F#의 `List.choose`를 모방한 `SelectNotNull` 메서드의 예를 사용하여 이 문제를 보여줍니다. 해결책은 형식 제약 조건(`where TR : class` 및 `where TR : struct`)을 사용하여 메서드를 오버로드하여 값 형식과 참조 형식의 모호성을 해소하는 것입니다. 문제는 해결되었지만, 설계는 여전히 우아하지 않습니다.
개발
Nullable 형식