본문 바로가기
C#

C# 9.0 새로운 기능 소개

by samie 2025. 3. 26.
C# 9.0 새로운 기능 소개

C# 9.0의 새로운 기능 소개

C# 9.0은 많은 새로운 기능을 도입하여 개발자들이 더 효율적으로 코드를 작성할 수 있도록 도와줍니다. 이번 글에서는 C# 9.0에서 추가된 주요 기능들을 소개하고, 이를 어떻게 활용할 수 있는지에 대해 설명합니다.

1. 레코드 타입(Record Types)

C# 9.0에서 도입된 레코드 타입은 불변 객체를 쉽게 만들 수 있게 해줍니다. 레코드는 객체의 데이터만 비교하고, 객체의 참조를 비교하지 않으며, 이를 통해 값 기반의 객체를 더 효율적으로 다룰 수 있습니다. 레코드 타입은 주로 데이터 모델링 및 DTO(Data Transfer Object)에서 유용합니다.

public record Person(string FirstName, string LastName);
        
var person1 = new Person("John", "Doe");
var person2 = new Person("John", "Doe");

Console.WriteLine(person1 == person2);  // True, 값이 같으므로
        

위 코드에서는 record 키워드를 사용하여 레코드 타입 Person을 정의하고, 두 객체가 동일한 값을 가지고 있는지 비교합니다.

2. 패턴 매칭(Pattern Matching)

C# 9.0에서는 패턴 매칭 기능이 확장되어 더 강력한 조건을 처리할 수 있게 되었습니다. 특히 is 연산자와 switch 문을 개선하여 더 직관적이고 간결한 코드를 작성할 수 있습니다. 또한, 필드 패턴을 사용하여 객체의 필드를 직접 비교할 수 있게 되었습니다.

if (obj is Person { FirstName: "John", LastName: "Doe" })
{
    Console.WriteLine("John Doe입니다.");
}
        

위 코드에서는 패턴 매칭을 활용하여 Person 객체의 FirstNameLastName을 비교하는 방법을 보여줍니다.

3. init 속성(Init-Only Properties)

C# 9.0에서는 init 속성이 도입되어, 객체를 초기화하는 시점에만 값을 설정하고 이후에는 변경할 수 없도록 할 수 있습니다. 이는 불변 객체를 더 쉽게 만들 수 있게 해줍니다. init 속성은 생성자와 유사하지만, 객체 초기화 후에는 값을 변경할 수 없다는 장점이 있습니다.

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

var person = new Person { FirstName = "John", LastName = "Doe" };
Console.WriteLine(person.FirstName);  // John
        

위 코드에서 init 속성을 사용하여 객체를 초기화하고, 이후 값이 변경될 수 없도록 했습니다.

4. 더 많은 성능 최적화

C# 9.0에서는 성능 향상을 위한 여러 최적화가 이루어졌습니다. 예를 들어, 새로운 컴파일러 기능이 도입되어 코드 실행 속도가 빨라졌으며, 비동기 작업에서 더 나은 성능을 제공합니다. 이 외에도 .NET 5와의 통합을 통해 성능이 더욱 향상되었습니다.

5. 개선된 covariant return types

C# 9.0에서는 상속 구조에서 반환 타입을 더 유연하게 다룰 수 있도록 개선되었습니다. 이로 인해 상속받은 클래스에서 반환 타입을 더 구체적으로 지정할 수 있습니다.

public class Animal
{
    public virtual Animal GetAnimal() => new Animal();
}

public class Dog : Animal
{
    public override Dog GetAnimal() => new Dog();
}
        

위 예제에서는 covariant return types를 사용하여, 부모 클래스의 메서드가 반환하는 객체의 타입을 자식 클래스에서 더 구체화할 수 있습니다.

결론

C# 9.0은 개발자들이 더 간결하고 효율적인 코드를 작성할 수 있도록 돕는 여러 가지 기능을 제공합니다. 레코드 타입, 패턴 매칭, init 속성 등은 코드의 가독성과 유지보수성을 높이는 데 중요한 역할을 합니다. C# 9.0의 새로운 기능을 잘 활용하면 더욱 강력하고 효율적인 애플리케이션을 개발할 수 있습니다.

참고할 만한 사이트