Skip to main content

Command Palette

Search for a command to run...

nullable 참조 형식 적응하기

Published
2 min read

이제까지 강제 사항은 아니지만 C# 8부터 nullable 참조 형식을 사용할 수 있었습니다.

그런데 .NET 6 Preview 7부터 생성하는 .NET 6 프로젝트 템플릿에 nullable 참조형식이 기본 enable 되어 있습니다.

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

  <PropertyGroup>
    ...
    <Nullable>enable</Nullable>
    ...
  </PropertyGroup>
  ...
</Project>

C# 8부터 도입이 되어서 저 기능을 알고는 있었지만 적응이 안돼 안쓰고 있었는데, 이제는 적응해야 겠군요;

nullable 참조형식enable되면 기본적인 참조형은 null일 수 있을 경우 CS8618 경고가 발생합니다. 그 값이 null값이 될 수 있다는 경고인데요, 이런 경고는 null 관련 버그를 예방할 수 있는 좋은 기능이기는 하나 적응이 필요합니다. 이제 앞으로 null일 수 있는 참조형은 예를 들어 string의 경우 명시적으로 string?라고 써주는게 좋습니다.

다음의 코드들을 예로 보시죠.

class NullableTestClass
{
   public string Name { get; set; } // CS8618 경고 발생
}

"응 아니야~ 참조형이 null일 수 있을 경우 명시적으로 표시해야 돼!" 라고 경고를 줍니다. 흠...;; 익숙해질 때까지 조금 시간이 걸리는데요, 코드를 저 속성 값이 null일 수 없게 다음 처럼 수정할 수도 있고,

class NullableTestClass
{
    public string Name{ get; }

    public NullableTestClass(string name)
    {
        name = stringValue;
    }
};

또는 초기값을 줄 수 도 있고,

class NullableTestClass
{
   public string Name { get; set; } = "Default Name";
}

아니면 Name 속성이 null일 수 있음을 string? 처럼 명시할 수 있습니다.

class NullableTestClass
{
   public string? Name { get; set; } // CS8618 경고 발생 하지 않음
}

그러고 보니 어느사이 .NET 기본 라이브러리가 nullable 참조 형식에 맞게 변해 있군요. String 클래스를 예로 보자면, 인자가 null일 수 있는 것은 명시적으로 ?을 붙이고 null이 아니어야 하는 경우 ?이 빠진 모습을 볼 수 있습니다.

image.png

image.png

152 views

More from this blog

개발, 테스트, 운영에서의 도커 활용

핵심 원칙: "한 번 빌드하고, 어디서든 실행한다 (Build once, run anywhere)" 도커의 가장 큰 장점은 환경 일관성입니다. 동일한 도커 이미지를 사용하여 개발, 테스트, 운영 환경을 구성함으로써 "제 PC에서는 됐는데..." 하는 문제를 최소화할 수 있습니다. 1. 개발 단계 (Development) 목표: 빠른 코드 변경 반영, 쉬운 디버깅, 실제 운영 환경과 유사한 환경 구성. Docker 사용 방안: Dockerf...

May 9, 20256 min read15

[EF Core] 데이터 삭제 시 소프트 삭제 적용

DB에서 데이터를 삭제하면 일반적으로 복구할 수 없습니다. 또한 관계에 따라 영구 삭제 자체가 어려울 수도 있습니다. 그래서 데이터를 영구 삭제하는 대신 IsDeleted 속성을 true로 주고 IsDeleted 속성을 필터링해서 조회하는 방법을 사용하기도 합니다. 이를 소프트 삭제라고 합니다. 그런데 EF에서 알아서 데이터 삭제 시 소프트 삭제를 하고 쿼리시 IsDeleted 속성을 체크해서 삭제한 데이터를 제외한 데이터만 쿼리하게 하는 ...

Mar 18, 20243 min read19

[EF Core] ValueConverter를 이용해서 엔터티 속성의 도메인 관리

EF Core를 사용하면서 문자열 길이 등의 특성을 일일이 지정하는 것은 번거롭습니다. ... [MaxLength(32)] public string? 제목 { get; set; } 엔터티가 한 개일 때는 상관이 없으나 제목 유형이 여러 엔터티에 사용될 경우 유형을 지정하기 번거롭습니다. 속성 유형을 도메인으로 관리하면 참 편할텐데요, ValueConverter를 이용할 수 있습니다. 그런데 이것을 인터페이스 정적 추상를 사용해서 다음처럼 ...

Mar 16, 20242 min read8

디모이 블로그

154 posts

.NET 관련 기술을 선호하고 새로운 언어를 배우는데 관심이 있습니다.