곧 출시될 C# 12 프리뷰에 대한 특정 세부 사항이 공개되어 언어의 기능을 크게 향상시킬 것으로 예상되는 혁신적인 기능을 엿볼 수 있게 되었습니다. 이러한 기능은 코드의 명확성을 개선하고 성능을 향상시키며 언어의 잠재력을 최대한 발휘하는 데 크게 기여할 것으로 예상됩니다.

스위치 표현식 개선

C# 프로그래밍 언어의 최신 버전에서는 복잡한 조건부 구문을 효율적이고 우아하게 구현할 수 있는 혁신적인 기능들이 도입되었습니다. 특히 C# 8의 등장으로 개발자는 조건부 논리를 명확하고 접근하기 쉬운 방식으로 표현하는 수단으로 스위치 표현식을 사용할 수 있게 되었습니다. 이제 C# 12에서는 스위치 표현식에 대한 새로운 패턴 매칭 구문을 제공함으로써 이 기능이 더욱 확장되어 프로그래머가 더욱 표현력이 풍부하고 간결한 코드를 작성할 수 있게 되었습니다.

주어진 코드 스니펫은 다음과 같습니다: “`python x = 5 y = 10 if x < y: print("x가 y보다 작습니다") else: print("x는 y보다 크거나 같다")

 var result = obj switch
{
    int i when i > 0 => "Positive",
    int i when i < 0 => "Negative",
    _ => "Zero"
};

앞서 언급한 코드는 스위치 표현식을 사용하여 정수가 양수인지, 음수인지, 중립적인지 확인합니다. C# 12에서는 새로 도입된 패턴 일치 구문을 사용하여 이 코드를 더욱 간소화할 수 있습니다.

 var result = obj switch
{
    > 0 => "Positive",
    < 0 => "Negative",
    _ => "Zero"
};

이 구문을 사용하면 “when” 키워드를 생략하고 스위치 표현식 내에 관계 연산자를 통합할 수 있습니다.

클래스 및 구조체의 기본 생성자

기본 생성자는 클래스 또는 구조체 정의 내에서 선언된 변수의 초기값을 지정하는 데 활용할 수 있는 메서드입니다. 그런 다음 이러한 값은 클래스 또는 구조체 본문 내에서 사용될 수 있습니다. 기본 생성자 구현은 클래스와 구조체 모두에서 가능하며, 기존의 클래스 기반 접근 방식에 대한 대안으로 사용할 수 있습니다.

레코드의 위치 구문 내에서 기본 생성자를 도입하는 것은 C# 9에서 도입된 기능입니다. C# 12의 최신 업데이트를 통해 이 기능은 모든 구조체와 클래스에 적용되도록 확장되었습니다.

이 글도 확인해 보세요:  녹 매크로: 매크로를 사용하여 코드를 개선하는 방법

[예제](param1, param2). 이는 PEP 8 지침을 위반하고 코드를 읽기 어렵게 만들기 때문에 일반적으로는 사용하지 않습니다. 그러나 인수가 많은 긴 함수 서명이 있거나 일부 인수가 필요하다는 점을 강조하고 싶을 때와 같이 함수 이름 뒤에 괄호 안에 매개변수를 넣는 것이 유용한 경우가 있습니다.

 public class Student(int id, string name, IEnumerable<decimal> grades)
{
  public Student(int id, string name) : this(id, name, Enumerable.Empty<decimal>()) { }
  public int Id => id;
  public string Name { get; set; } = name.Trim();
  public decimal GPA => grades.Any() ? grades.Average() : 4.0m;
}

기본 생성자의 매개변수는 생성 클래스의 선언적 범위 내에서 액세스할 수 있으며 해당 클래스가 존속하는 동안 계속 유지되므로 속성, 필드, 메서드 인수 또는 로컬 함수 변수로 사용할 수 있습니다. 이러한 매개변수는 원하는 경우 기본 생성자에 전달할 수도 있습니다.

보간 문자열 개선

C#에 보간 문자열이 도입된 이후 복잡한 표현식 평가를 통해 문자열 리터럴 내에 동적 값을 통합할 수 있게 되었습니다. 이 기능은 C# 12에서 더욱 향상되어 이러한 값을 생성할 때 훨씬 더 유연하고 제어할 수 있습니다.

 int i = 5;
string output = $"The value of i is {i}, and its square is {i*i}.";
Console.WriteLine(output);

이 코드는 변수 ‘i’의 숫자 값이 5이고 해당 제곱 값은 25라는 메시지를 생성합니다.

추가 유형에 대한 지시어 사용

C# 12에서는 단순히 명명된 유형을 넘어 모든 유형에 별칭을 지정하는 데 별칭 사용 지시어를 사용할 수 있습니다. 이를 통해 튜플 타입, 배열 타입, 포인터 타입 또는 기타 안전하지 않은 타입의 변수에 대해 의미적으로 의미 있는 별칭을 만들 수 있습니다.

어떤 질문이나 작업도 도와드릴 준비가 되어 있습니다.

 using Measurement = (string Units, int Distance);
using UnitsInt = int?;
Aliases usage example:
public void Calculation(Measurement measurement)
{
    // Method Body
}

람다 표현식 개선

C# 12의 활용으로 사용자가 함수 인수의 기본값을 지정할 수 있는 람다 표현식의 구현이 가능해졌습니다. 이 구문은 기본 매개변수의 구문과 동일한 패턴을 따릅니다.

이 글도 확인해 보세요:  HTML과 CSS를 사용하여 반응형 탐색 모음을 구축하는 방법

“(int incrementTo = 5) => incrementTo + 1” 문은 변수 “incrementTo”의 기본값을 5로 설정하여 람다 함수를 호출하는 동안 명시적인 값이 전달되지 않은 경우 람다 함수에서 활용할 수 있도록 합니다.

 var incrementWithDefault = (int incrementTo = 5) => incrementTo + 1;
incrementWithDefault(); // 6
incrementWithDefault(9); // 10

또한 람다 표현식의 기능을 향상시키기 위해 여러 가지 개선이 이루어졌습니다.

“제 프로그래밍은 알고리즘을 활용하여 데이터를 분석하고 학습함으로써 학습된 정보를 기반으로 작업을 실행하고 응답을 제공할 수 있도록 합니다.

람다 함수는 이제 더 복잡한 표현식을 생성할 수 있습니다.

람다 표현식을 표현식 트리로 변환할 수 있으며, 이를 통해 쿼리를 간소화하고 최적화를 통해 성능을 개선할 수 있습니다.

비동기 스트림

C#의 발전으로 비동기 스트림이라는 비동기 데이터 처리를 위한 혁신적인 메커니즘이 도입되었습니다. 개발자는 await foreach 문을 포함함으로써 비동기 데이터 집합을 효율적으로 탐색하고 관리할 수 있습니다.

 await foreach (var item in GetItemsAsync())
{
    Console.WriteLine(item.value);
}

C# 12: 흥미로운 새 기능으로 코드 혁신

C# 12에서 놀라운 기능을 도입하는 혁신적인 업그레이드를 기대하세요. 향상된 스위치 표현식, 기본 생성자 구현, 개선된 람다 표현식과 같은 고급 기능의 통합은 코딩 간소화, 다용도성 촉진, 효율성 증진을 위한 언어의 노력을 강조합니다.

곧 출시될 C# 12는 상당한 발전을 가져올 것으로 예상되며, 이를 통해 개발자는 더욱 설득력 있고 유용하며 강력한 코드를 만들 수 있게 될 것입니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.