.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# 개발 팀에서 촬영한 영상으로 이해하는데 보다 많은 도움을 줄것으로 기대된다.
'.Net' 카테고리의 다른 글
C#7.0 - switch에 유연한 패턴 일치 사용 (0) | 2020.12.10 |
---|---|
.NET - Error unprotecting the session cookie. (0) | 2020.12.09 |
.NET - HOW to use Parallel For, ForEach (0) | 2020.12.02 |
.NET - Semaphore 초기값? initialCount, maximumCount (0) | 2020.12.01 |
.NET - Thread Start with Argument or Data (0) | 2020.11.30 |