널 가능 참조 형식
C# 8에는 널 가능 참조 형식(nullable reference types)이라는 기능이 도입되었습니다*. 정적 형식 시스템에서 객체가 널이 가능한 형식인지 혹은 아닌지 선언할 수 있게 만든 것입니다. 이 기능을 활성화하면 객체는 널 가능 형식이 아닌 것으로 간주되어 널(null)이 될 수 없습니다.
객체가 널이 될 수 있다고 선언하려면 형식 선언에 IApplicationBuilder? app처럼 ?(물음표)를 붙이면 됩니다.
널이 될 수 없는 객체와 널이 될 수 있는 객체를 구별할 수 있다면, 방어 코드의 양을 줄이는 데 유용합니다. 이 기능은 시스템의 런타임에 발생할 수 있는 결함의 수를 줄일 수 있으므로 항상 켜두는 것이 좋습니다. 물론 컴파일러 오류가 너무 많이 나오는 경우에는 오류 처리에 부담이 있을 수 있으니, 코드베이스를 새로 만들 때 켜는 것이 좋습니다.
이 장에 나와 있는 샘플 코드베이스에서 이 기능을 켜도 코드의 컴파일에는 문제가 없습니다.
* 마이크로소프트가 개념과 기능을 명명하는 방식이 혼란스러울 수 있습니다. 모든 주류 C 기반 언어들처럼 참조 형식의 객체는 언제든 널(null)일 수 있으므로, 널 가능(nullable)이라 할 수 있습니다. 따라서 이 기능은 실제로는 non-nullable 참조 형식이라 해야 합니다.