c#/helper

c# 프로젝트 Nullable 컨텍스트 경고 수준 설정

AUSTAR 2024. 4. 23. 23:01

비주얼 스튜디오에서 .NET 프로젝트를 생성한 후 프로젝트 빌드 설정을 보면 다음과 같이 Nullable 이 enable로 기본 설정된 것을 볼 수 있다.  

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net8.0-windows</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
        <UseWPF>true</UseWPF>
    </PropertyGroup>
</Project>

 

 

 

nullable 참조 형식 - C#

이 문서에서는 null 허용 참조 형식을 간략하게 설명합니다. 이 기능이 신규 및 기존의 프로젝트의 null 참조 예외에 대해 어떻게 안전성을 제공하는지 알아봅니다.

learn.microsoft.com

 

마이크로 소프트 문서에 따르면 해당 전역  Nullable 설정을 통해 null 허용 참조 형식을 설정할 수 있다.

.NET 6(C# 10)로 시작하는 모든 프로젝트 템플릿은 null 허용 컨텍스트를 사용하도록 설정되어 있으며 4개 설정을 지원한다.

해당 선언은 null 을 사용하거나 사용하지 않겠다는 설정이 아닌 컴파일러가 null 허용 여부를 해석하거나 경고를 구성하는데에 쓰인다.

해당 설정을 변경 할 경우, 기존에 존재하지 않는 null 사용 형식에서 경고가 발생할 수 있으므로 지식적으로 알고 경고 자체는 변경하지 않는 것이 좋다.

 

Nullable 컨텍스트

 

상단 설정을 토대로 각 설정을 변경했을 경우에 출력되는 오류에 대한 이해는 다음과 같다.

테스트를 위해 사용한 코드는 다음과 같고 해당 코드를 이용해 설정을 바꿨을 때 출력되는 비주얼 스튜디오의 경고 차이를 확인해보면 이해하기 쉽다.

실제 설정값은 enable과 disable만 비교하도록 하는데 실질 diable과 warnings, annotations는 큰 차이가 없다고 보면되며 enable을 항상 기본값으로 두는 것으로 생각하고 참고만 하도록 하자.

 

 public string testString1;
 public string testString2 = null;

 public MainWindow()
 {
     InitializeComponent();

     testString1 = "123";
     if(testString1 is null) testString2 = testString1;
 }

1. enable

<Nullable>enable</Nullable>

 

Nullable - enable

 

가장 기본이되는 Nullable 설정을 enable로 할 경우 testString2에 null 을 허용하였지만 string? 을 이용하여 nullable 설정을 하지 않았기에 경고가 출력되며 testString1에 string을 할당했지만 if문을 통과할 경우 testString1은 null 값이 되므로 nullable을 설정하지 않은 testString2에 넣을 경우 null 참조 할당으로 경고가 출력된다.

 

2. disable

<Nullable>disable</Nullable>

 

Nullable&nbsp; - disable

 

Nullable 설정을 disable로 설정할 경우, 기존 null 허용을 해주지 않아 발생하던 경고가 모두 없어진것을 확인할 수 있다.