Introducing C# 14 - .NET Blog


C# 14 소개

csharp-14 #extension-members #성능-개선 #생산성 #NET-10

핵심 문장 요약

C# 14가 .NET 10과 함께 출시되었으며, 새로운 extension 멤버가 핵심 기능입니다. Extension 멤버는 extension 속성, extension 연산자, static extension 멤버를 활성화했습니다. 개발자의 생산성을 높이고 .NET 10의 성능 개선을 가능하게 하는 다양한 새로운 기능들이 추가되었습니다. 프레임워크 라이브러리들은 이미 C# 14의 새로운 기능들을 활용하고 있어서 사용자 애플리케이션도 코드를 작성하지 않아도 더 빠른 성능을 경험할 수 있습니다.


상세 요약

1. Extension Members (확장 멤버)

C# 14의 핵심 기능인 extension members는 기존 extension 메서드와 완전히 호환됩니다.

주요 기능:

  • Extension 속성 추가 가능
  • Extension 연산자 정의 가능
  • Static extension 멤버 지원

사용 예시:

  • Extension 블록 안에 instance 스타일 확장 멤버와 static 확장 멤버를 함께 정의 가능
  • 기존 extension 메서드와의 이진 호환성 유지로 의존 어셈블리 재컴파일 불필요

2. 생산성 향상 기능

(1) field 키워드

  • 자동 구현 속성에서 간단한 로직만 필요할 때 별도의 backing field 제거
  • 컴파일러가 자동으로 필드를 생성하고 관리
  • .NET 9에서 미리보기로 제공되었으며, C# 14에서 정식 출시

(2) Unbound Generic Types와 nameof

  • nameof(List<>) 형식으로 제네릭 타입 이름을 직접 얻을 수 있음
  • 특정 타입 인스턴스화 없이 제네릭 타입명 획득 가능

(3) Lambda 매개변수 수정자 지원

  • out, ref, in, scoped 같은 수정자를 lambda에서 암시적 타입과 함께 사용 가능
  • 타입 추론을 유지하면서도 흐름 의미 표현

(4) Null-조건 할당

  • 할당 연산자의 좌측에서 null-조건 연산자(?.) 사용 가능
  • 우측 식은 수신자가 null이 아닐 때만 평가
  • 들여쓰기 감소 및 중복 검사 제거

(5) Partial Events와 Constructors

  • 생성되거나 소스 생성된 partial 타입에서 이벤트와 생성자 로직을 파일 전체에 분산 가능
  • 새로운 소스 생성 시나리오 활성화
  • 수동으로 작성된 로직을 더 집중된 형태로 관리

3. 성능 향상 기능

(1) Implicit Span 변환

  • 배열, span, read-only span 간의 암시적 변환 추가
  • line[..5] 형식의 슬라이싱이 자동으로 span으로 변환
  • 명시적 AsSpan() 호출이나 생성자 호출 제거
  • 할당 감소, 경계 검사 감소, 더 적극적인 인라이닝 가능

(2) 사용자 정의 복합 할당 연산자

  • +=, -= 등 복합 할당 연산자를 명시적으로 정의 가능
  • 고성능 수치 및 벡터 타입이 반복 루프에서 효율적인 in-place 업데이트 가능
  • 중간 임시 변수 생성 방지로 JIT 최적화 개선

4. 라이브러리 및 프레임워크 영향

  • .NET 10의 성능 개선은 C# 14의 새로운 기능을 활용한 런타임과 기본 클래스 라이브러리의 최적화에서 비롯됨
  • span 기반 파싱, UTF-8 처리, 수치 루틴 등에서 성능 향상
  • 개발자가 직접 새로운 문법을 사용하지 않아도 프레임워크 최적화의 이점을 누림

5. 주요 설계 목표

전체적으로 C# 14의 언어 기능들은 다음 목표를 공유했습니다:

  • 일상적인 작업의 문법적 복잡성 감소
  • 비즈니스 로직에 집중하고 형식 요구사항 감소
  • 보일러플레이트 코드 제거
  • 일반적인 조건부 블록 제거
  • Lambda 선언 단순화
  • 소스 생성기를 위한 partial 타입 향상
  • 제네릭 시나리오에서 nameof 표현력 향상

각 기능은 코드를 더 간결하고 읽기 쉽게 만들며, 불필요한 식별자를 줄이고, 의도를 더 명확하게 전달했습니다.

1개의 좋아요