닷넷 6 프로젝트의 nullable 경고 해결

  • 4 minutes to read

Nullable 참조 형식

닷넷 6의 모든 프로젝트들은 기본적으로 Nullable 참조 형식에 대한 컴파일러 경고가 좀 더 엄격해서 기존에 사용해오던 코드가 있다면 닷넷 6 환경에서는 더 많은 경고를 볼 수 있습니다.

Nullable 참조 형식의 목적은 응용 프로그램이 실행될 때 NullReferenceException 예외 발생 가능성을 최소화하는 것 입니다.

이 목표를 달성하기 위해 C# 컴파일러는 정적 분석을 사용하고 코드에 null 참조 예외가 발생할 수 있는 구문이 있는 경우 경고를 발행합니다. 에러가 아니기에 기존 코드를 건드릴 필요는 없습니다.

물음표(?) 또는 느낌표(!) 기호를 사용하여 컴파일러에게 코드에 대한 정적 분석을 위한 정보를 더 제공하여 컴파일러 경고를 제거할 수 있습니다.

다음 네 가지 방법 중 하나를 사용하여 컴파일러 경고를 없앨 수 있습니다.

  • if 문 등을 사용하여 필요한 null 검사를 추가합니다.
  • 물음표(?) 기호로 널 가능 형식으로 지정 또는 느낌표(!) 기호로 null을 허용합니다.
  • 참조형 변수를 올바르게 초기화합니다. 예를들어 문자열인 경우에는 String.Empty로 초기화합니다.
  • NotNullWhen과 같은 특성을 사용합니다.

null에 대한 역참조

.NET 6.0 프로젝트를 빌드할 때 컴파일러가 제공하는 경고는 null-statemaybe-null인 변수가 null을 역참조하고 있음을 알려 줍니다. 말이 어려운데요. 다시 말해서 참조 형식 변수에 null로 초기화되어 있거나 null일 가능성이 있는 경우에 무조건 컴파일러가 경고를 해줍니다.

한 가지 예는 다음 코드와 같습니다.

string message = null; // null로 초기화
Console.WriteLine(message.Length); // null 가능하기에, maybe-null 식이므로 컴파일러 경고 제공

if 문으로 null에 대한 검증 코드 추가

null에 대한 역참조 경고를 제거하려면 역참조 전에 해당 변수의 null-statenot-null로 변경하는 코드를 추가해야 합니다. 널 가능한 변수를 역참조하기 전에 변수가 null이 아닌지 확인하여 이러한 경고를 수정할 수 있습니다.

예를 들어 다음과 같이 if 문을 사용하여 검사 코드를 넣는 방식으로 다시 작성할 수 있습니다.

string message = null;
if (message is not null) // null이 아님을 개발자가 검증 코드로 보증 
{
    Console.WriteLine(message.Length); // 현재 라인은 maybe-null 식이 아니므로 경고가 없음
}

null-forgiving(null 허용) 연산자 사용하기

동영상 강의: maybe-null 식에 null-forgiving 연산자를 사용하여 컴파일러 경고를 재정의하여 not-null로 설정

null! 코드로 EF Core DbSet 속성 초기화

동영상 강의: Nullable 참조 형식과 null-forgiving 연산자 사용하기 데모

NotNullWhen 특성 사용하기

NotNullWhen 특성 사용 내용은 나중에 기회가 되면 사용해보고 현재 문서를 업데이트하겠습니다.

참고자료

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com