우리가 다양한 목적으로 엔티티 클래스 형식을 사용합니다. 전통적으로 엔티티 클래스는 비즈니스에서 정보의 단위로 사용했으며 데이터베이스에서 조회 결과를 담는 목적으로 사용하거나 파일에 저장하는 용도로 이런 형태를 사용합니다.
가장 일반적인 모습은 값 만을 가진 형태입니다.
public class UserInfo
{
public string UserCode { get; set; }
public string UserName { get; set; }
...
}
그런데 nullable 참조 형식을 활성화 할 경우 위의 코드는 경고
대상이 됩니다. 왜냐하면 UserCode
와 UserName
은 null일 수 있는데도 불구하고 nullable 참조 형식으로 표현되어 있지 않기 때문입니다. 경고를 피하기 위해서는 다음과 같이 수정해야 합니다.
public string? UserCode { get; set; }
public string? UserName { get; set; }
...
그런데 null
일 경우가 없는 경우가 있죠. 그런데 위의 선언 형태로는 그것을 표현할 방법이 없습니다. 그래서 nullable 참조 형식을 활성화 했을 경우 다음 처럼 반드시 생성자
시점에서 초기화 되거나 기본 값을 할당해야 합니다.
public string UserCode { get; set; }
public string UserName { get; set; }
public UserInfo(string userCode, string userName) => (this.UserCode, this.UserName) = (userCode, userName);
...
또는,
public string UserCode { get; set; } = "DefaultCode";
public string UserName { get; set; } = "DefaultName;
...
만약 직렬화 라이브러리에서 생성자를 통한 역직렬화를 지원한다면 그것을 택해도 되고, 만약에 지원하지 않는다면 다음처럼 하면 경고를 해결할 수 있습니다.
public string UserCode { get; set; } = default!;
public string UserName { get; set; } = default!;
...
!
는 ‘반드시 null이 아니다’ 라고 컴파일에게 알려주는 방법입니다. 로직으로 null이 반드시 올 수 없는 경우에만 사용해야 합니다.