[c#] C# 9 버전의 새로운 기능

C#은 계속해서 발전하고 있으며, 2020년 8월에 공식으로 출시된 C# 9 버전에는 다양한 새로운 기능이 추가되었습니다. 아래에서 C# 9의 중요한 새로운 기능 몇 가지를 살펴보겠습니다.

Table of Contents

Init-only 프로퍼티

C# 9에서는 init 접근자를 사용하여 init-only 프로퍼티를 선언할 수 있습니다. 이것은 객체가 처음 초기화될 때만 값을 설정할 수 있고, 그 이후로는 값을 변경할 수 없게 만듭니다.

public class Person
{
    public string Name { get; init; }
    public int Age { get; init; }
}

Records

C# 9에서는 Records라는 새로운 참조 유형을 도입했습니다. Records는 불변성을 갖으며 값의 변화가 없는 데이터 레코드를 표현하기에 적합합니다.

public record Person
{
    public string Name { get; init; }
    public int Age { get; init; }
}

Pattern Matching 개선

C# 9에서는 Pattern Matching의 기능이 개선되어 더욱 강력해졌습니다. 이번 버전에서는 패턴 컴비네이션 and, or, not 연산자가 추가되었으며, type pattern과 with expression을 사용하여 더 다양한 경우를 처리할 수 있게 되었습니다.

public static decimal CalculateToll(object vehicle) =>
    vehicle switch
    {
        Car { Passengers: 1 } => 2.00m,
        Car { Passengers: 2 } => 3.50m,
        Truck t when t.TollsPaid => 10.00m,
        _ => throw new ArgumentException("Not a valid vehicle", nameof(vehicle))
    };

Top-level Statements

C# 9에서는 Top-level Statements를 도입하여, 별도의 클래스나 메소드 없이도 코드를 실행할 수 있게 되었습니다. 이렇게 하면 간단한 프로그램이나 실험용 코드를 작성할 때 코드의 간결함이 향상됩니다.

using System;
Console.WriteLine("Hello, C# 9!");

Function Pointer

C# 9에서는 Function Pointer를 지원하여 함수 포인터를 정의하고 사용할 수 있도록 했습니다.

delegate*<int, int, int> functionPointer = &Add; 
int Add(int a, int b) => a + b;
int result = functionPointer(3, 5); // result is 8

References