record 에 primary constructor 로 생성한 필드는 재정의하면 안 되어요.

문제.

public record Cate(string Nickname)
{
   public string Nickname { get; set; }
}

요딴식으로 record 로 정의를 했다고 쳤을 때, 아래와 같이 인스턴스를 생성하면

var cate = new Cate("Greg");

cate.Nickname 의 값을 무엇일까요?











정답은 null 입니다.

왜냐믄…

public record Cate(string Nickname)
{
   public string Nickname { get; set; }
}

요것은 빌드 후 아래와 같이 생성되부러요.

public class Cate
{
    public Cate(string Nickname)
    {        
    }

    public string Nickname { get; set; }
}

즉, record 의 primary constructor 에 파라미터를 정의하고
동일한 이름의 property 를 새로 정의하면
빈 생성자 형태로 class 가 생성됩니다.




결론!
record 에 property 를 정의할 때 primary constructor 를 추가했다면
동일한 이름으로 property 를 수동으로 정의하지 말자!

되겠슴다…



다들 아시는 내용이겠지만 아무생각없이 습관대로 했다가 뒤통수 맞는 불상사가 없기를 바라며... 끄적여봤슴다... ㅇㅅㅇ/
8 Likes