C# 8 부터 사용할 수 있는 nullable 참조 형식 적응하기

.NET 6 Preview 7 부터 생성하는 모든(? 다 확인하지는 못했지만 일관성으로 보아 그렇게 예상) 프로젝트 템플릿의 기본 설정이 된 nullable 참조 형식 사용 <Nullable>enable</Nullable>은 조금만 코드를 전개하다 보면 기존 null이 가능한 형식(참조형)을 코딩할 때 당혹감을 느낍니다. 다음의 코드를 보시죠.

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 기본 라이브러리, 예를 들어 String 클래스의 정의를 보면 이제 null일 수 있는 인자는 string?으로, null이 오면 안되는 Format()format인자의 경우 string으로 정의되어 있음을 알 수 있습니다.

image

image

좋아요 3

nullable 참조 형식 적응하기

좋아요 3

nullable 참조 형식이 기본 enable 되면서 다음의 유형도 맞이할 수 있게 됩니다.

string?[]? list;

이게 뭔가요? 처음엔 어색한데, string? 형의 널 가능 배열입니다. 반대로 이야기 하자면 이렇게 널 가능한 수정 가능 유형을 C#에서는 쭉 써왔던 것입니다. (Rust는 정 반대의 언어)

좋아요 2