Sugar

C# 12.0 새 기능 총정리: C# 9.0과 비교한 차이점과 실무 활용 예제

by Sugar0810

C# 12.0, 현업 프로젝트에서 만난 변화들

주로 Unity로 개발해왔기 때문에 오랫동안 C# 9.0 환경에서 머물러 있었습니다. 하지만 최근 ASP.NET Core 9.0 프로젝트를 학습하면서 자연스럽게 C# 12.0의 문법들을 접하게 되었고, 실제 현업 프로젝트에서 어떻게 활용되는지 살펴보게 되었습니다.

이번 글에서는 실제로 사용된 기능사용하지 않았지만 알아두면 좋은 기능을 함께 정리해보겠습니다.

 

현업에서 실제 사용된 C# 12.0 기능

1. Collection Expressions ([])

가장 많이 체감한 변화는 바로 빈 배열 초기화 문법입니다.

C# 9.0까지는 보통 이렇게 작성했죠:

public string[] Items { get; set; } = new string[0];
// 또는
public string[] Items { get; set; } = Array.Empty<string>();

C# 12.0에서는 훨씬 간단하게 표현할 수 있습니다:

public string[] Items { get; set; } = [];

→ 코드가 확연히 간결해지고, 가독성도 좋아졌습니다.

 

2. Collection Types with Natural Syntax

배열이나 리스트 초기화에도 [] 문법을 적극 활용할 수 있습니다.

Vector = point.Vectors?.Vector?.Data?.ToArray() ?? [];

예전 같으면 ?? Array.Empty<float>()를 사용해야 했는데, 이제는 []만 쓰면 되니 일관성이 생겼습니다.

 

사용하지 않았지만 알아두면 좋은 C# 12.0 기능들

1. Primary Constructors

클래스/구조체 선언과 동시에 생성자를 간결하게 정의할 수 있습니다.

C# 12.0:

public class User(string name, int age)
{
    public string Name { get; } = name;
    public int Age { get; } = age;
}

C# 9.0 방식:

public class User
{
    public string Name { get; }
    public int Age { get; }

    public User(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

 프로젝트에서는 여전히 전통적인 방식으로 생성자를 작성했지만, 데이터 모델링이 단순하다면 Primary Constructor가 훨씬 깔끔합니다.

 

2. Default Lambda Parameters

람다식에 기본 매개변수를 지정할 수 있습니다.

C# 12.0:

Func<int, int, int> add = (a, b = 10) => a + b;
Console.WriteLine(add(5)); // 15

C# 9.0에서는 불가능했기 때문에 오버로드나 별도의 메서드가 필요했습니다.

→ 프로젝트에서는 활용하지 않았지만, 헬퍼 함수 작성할 때 매우 유용할 수 있습니다.

 

3. Inline Arrays (unsafe struct)

성능 최적화가 필요한 경우, 고정 길이 배열을 구조체 안에 직접 정의할 수 있습니다.

unsafe struct FixedBuffer
{
    public fixed int Values[16];
}

→ 프로젝트에서는 사용되지 않았지만, 성능이 중요한 고성능 연산 (예: 게임 엔진, 시뮬레이션, 네이티브 연동) 에서 고려할 수 있는 기능입니다.

 

4. Ref Readonly Parameters

함수 인자에 ref readonly를 붙여서, 값 복사를 막으면서도 불변성을 보장할 수 있습니다.

public void PrintLength(ref readonly string text)
{
    Console.WriteLine(text.Length);
}

→ 구조체 같은 값 타입이 무겁고, 참조는 허용하지만 변경은 막고 싶은 경우에 적합합니다.

블로그의 정보

Sugar

Sugar0810

활동하기