비주얼 스튜디오에서 .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 사용 형식에서 경고가 발생할 수 있으므로 지식적으로 알고 경고 자체는 변경하지 않는 것이 좋다.

상단 설정을 토대로 각 설정을 변경했을 경우에 출력되는 오류에 대한 이해는 다음과 같다.
테스트를 위해 사용한 코드는 다음과 같고 해당 코드를 이용해 설정을 바꿨을 때 출력되는 비주얼 스튜디오의 경고 차이를 확인해보면 이해하기 쉽다.
실제 설정값은 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로 할 경우 testString2에 null 을 허용하였지만 string? 을 이용하여 nullable 설정을 하지 않았기에 경고가 출력되며 testString1에 string을 할당했지만 if문을 통과할 경우 testString1은 null 값이 되므로 nullable을 설정하지 않은 testString2에 넣을 경우 null 참조 할당으로 경고가 출력된다.
2. disable
<Nullable>disable</Nullable>

Nullable 설정을 disable로 설정할 경우, 기존 null 허용을 해주지 않아 발생하던 경고가 모두 없어진것을 확인할 수 있다.
'c# > helper' 카테고리의 다른 글
| c# AppendTargetFrameworkToOutputPath 옵션 (0) | 2024.04.23 |
|---|---|
| c# BaseOutputPath 빌드 후 출력 경로 설정 (0) | 2024.04.23 |
| c# app.manifest를 이용한 DPI 설정 (0) | 2024.04.22 |
| c# ApplicationManifest 관리자 권한 설정 (0) | 2024.04.22 |
| c# ApplicationHighDpiMode 고해상도에서 선명하게 (0) | 2024.04.22 |