C# 8.0은 nullable 참조라는 새로운 기능을 도입했다. 기본적으로 참조에 널을 할당할 수 없다는 내용인데 언뜻 보기에는 단순한 변화로 보인다. 사실 이게 전부다. nullable 참조는 아마도 제네릭이 도입된 이후 C# 언어에서 가장 중요한 변화일 것이다. nullable 참조에 대한 다른 모든 기능은 이 핵심 변경과 관련이 있다.
그런데 이 이름에서 혼란스러운 부분이 있는데, 참조가 C# 8.0 이전에 이미 nullable했다는 것이다. 프로그래머에게 이름이 의미하는 바를 더 잘 이해시키고자 했다면 non-nullable 참조라는 이름을 붙였어야 했다고 생각된다. 개인적으로 나는 nullable 타입을 도입하게 된 과정을 잘 알기 때문에 왜 이렇게 이름을 지었는지도 이해하고 있다. 하지만 실제 많은 개발자는 이것이 전혀 새롭지 않다고 느낄 수 있다.
모든 참조가 nullable일 때 참조를 입력으로 받는 모든 함수는 유효한 참조와 널, 두 가지 다른 값을 받을 수 있다. 널을 예상하지 않은 함수는 값을 참조하려고 할 때 충돌을 일으킨다.
기본적으로 참조를 non-nullable로 설정한다면 문제가 달라진다. 함수를 호출하는 코드가 동일한 프로젝트에 존재하는 한 함수에는 더 이상 널이 들어오지 않는다. 다음 코드를 살펴보자.