더북(TheBook)
class ConferenceRegistration
{
    public string CampaignSource { get; set; } = "organic";
    public string FirstName { get; set; } = null!;
    public string? MiddleName { get; set; }
    public string LastName { get; set; } = null!;
    public string Email { get; set; } = null!;

→ 새로운 생성자에서 null!를 사용하자.

    public DateTimeOffset CreatedOn { get; set; }
}

느낌표(bang) 연산자(!)는 컴파일러에게 정확히 “내가 무엇을 하고 있는지 알고 있다”라고 말한다. 이 경우, “이 클래스를 만든 후 즉시 해당 속성을 초기화할 것이다. 그렇지 않으면 nullability 검사가 전혀 작동하지 않는다는 것을 받아들인다”라고 말한다. 기본적으로 이렇게 속성을 즉시 초기화하겠다는 약속을 지킨다면 여전히 무효성을 보장할 수 있다.

팀원 모두가 이를 납득하지 못할 수도 있고 나중에 결국 속성을 초기화할 수도 있기 때문에 이는 살얼음 위를 걷는 것과 같다. 여러분이 이러한 위험을 관리할 수 있다면 이 방식을 고수해도 된다. 객체에 대한 기본 생성자와 설정할 수 있는 속성이 필요한 Entity 프레임워크와 같은 일부 라이브러리에서는 불가피할 수도 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.