본문 바로가기
.Net

.NET5 - 새로운 기능 Record

by 올엠 2020. 12. 3.
반응형

.NET5는 C#9 컴파일러로 동작한다. 그렇다면 C#9에서 새롭게 추가된 기능중 가장 독보이는 기능을 설명해 보고자 한다.

해당 기능은 바로 record 라는 키워드가 새롭게 등장하였다.

record는 기존 C# 개발자라면 class나 struct를 통해 객체를 만들어 사용해왔을 것이다.

 

    public class product
    {
        public string name { get; set; }
        public string type { get; set; }
    }

이를 record를 이용해 한줄로 처리할 수 있다.

    public record product(string name, string type);

본 코드가 위와 동일한 효과를 가져온다. 다만 기존에 사용하던 코드 방식으로 값을 변경할 수 없다.

 

만약 값을 변경하고자 한다면, with 구문을 이용하여 아래와 같이 이용하여야 한다.

        static void Main(string[] args)
        {
            var p1 = new product("all", "mnet");
            p1 = p1 with {name = "tll"};
        }

record는 기존 코드의 호환성을 위해 get; set; 역시 선언 할 수 있다. 이는 앞서  record 키워드가 괄호를 사용함으로써 중괄호를 통해 코드 확장성을 유지한 준것으로 보인다.

 

중괄호가 아닌 괄호를 사용한 이유

이외에도 불변값을 보다 쉽게 사용할 수 있다. 기존 C#의 경우 get; 만 사용하는 경우는 거희 없었다.

get; 만 선언한 경우 초기값 지정을 위해 내부에 한번더 선언해줘야 하는 상황이였다.

 

C#9에서는 손쉽게 초기 값을 지정해 줄 수 있는 기능이 추가되었다. 바로 init; 이다.

아래와 같이 init;를 선언하면 초기 값을 설정 할 수 있고, 이후 값에 대한 변경은 불가능해진다.

 

    class Program
    {
        static void Main(string[] args)
        {
            var p1 = new product { name = "all", type = "mnet" };
            p1.name = "";
        }
    }

    public class product
    {
        public string name { get; init; }
        public string type { get; init; }
        
    }

 

값에 대한 비교도 가능하면, 필드 추출도 구조에 맞게 변수를 지정하는 것만으로 가능하기 때문에 데이터 처리에 효율적으로 개발이 가능하다.

아래 영상은 C# 개발 팀에서 촬영한 영상으로 이해하는데 보다 많은 도움을 줄것으로 기대된다.

 

https://channel9.msdn.com/Shows/On-NET/C-9-Language-Features?ocid=eml_pg222068_gdc_comm_az&mkt_tok=eyJpIjoiTUdZd1ltSTVZMk5sTkRneSIsInQiOiJISlpmajVoUCtCbXFcL1wvM2ZnZDNhTW51Mk16Vng5Z2V4VG9va0dFTmF3MG1kdjdQZDFWRURzbkorZ05QVGs2amE3Tyt4dVVOUUZKZmtXSm9kZ09MbXJDY29kXC92QUl5UGF3RERSaTB3Unp4Zk9BdERielVUS3hiaFdLSit0cVwvU0djeFBVRVROeFBzQ1VzYnc0Qno4SnRBPT0ifQ%3D%3D

 

 

C# 9 Language Features

C# 9 is one of the most exciting features that developers are expecting with the release of .NET 5.0. In this episode, Jared Parsons joins Rich to show us some of the language enhancements we can look

channel9.msdn.com

 

반응형