C#의 주요 기능 --- ( https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-version-history ) # 주요 기능 ## C# 버전 13 2024년 11월에 출시된 C# 13에는 다음과 같은 새로운 기능이 포함되어 있습니다. - `params` 컬렉션: `params` 한정자는 배열 형식으로 제한되지 않습니다. 이제 `params`및 인터페이스 형식을 포함하여 인식된 컬렉션 형식과 함께 `Span<T>` 사용할 수 있습니다. - 새로운 `lock` 형식 및 의미 체계: `lock` 문의 대상이 [System.Threading.Lock](https://learn.microsoft.com/ko-kr/dotnet/api/system.threading.lock)인 경우에, 컴파일러는 [Lock.EnterScope()](https://learn.microsoft.com/ko-kr/dotnet/api/system.threading.lock.enterscope#system-threading-lock-enterscope) 메서드를 사용하여 배타적 범위에 진입하는 코드를 생성합니다. 반환된 `ref struct` 배타적 범위를 종료하는 `Dispose()` 패턴을 지원합니다. - 새 이스케이프 시퀀스 - `\e`: `\e` 문자를 문자 리터럴 이스케이프 시퀀스로 사용하여 `ESCAPE` 유니코드 문자 `U+001B`을 표현할 수 있습니다. - 메서드 그룹과 관련된 오버로드 해결에 대한 작은 최적화입니다. - 개체 이니셜라이저에서의 암시적 인덱서 접근: 이제 개체 이니셜라이저 표현식에서 암시적인 "from the end" 인덱스 연산자 `^`가 허용됩니다. - 반복기 및 비동기 메서드에서 `ref` 로컬 및 `unsafe` 컨텍스트를 사용할 수 있습니다. - `ref struct` 형식을 사용하여 인터페이스를 구현할 수 있습니다. - `ref struct` 형식을 제네릭의 형식 매개 변수에 대한 인수로 허용할 수 있습니다. - 이제 부분 속성 및 인덱서가 `partial` 형식에서 허용됩니다. - 오버로드 확인 우선 순위를 사용하면 라이브러리 작성자가 하나의 오버로드를 다른 오버로드보다 더 나은 것으로 지정할 수 있습니다. 또한 자동으로 구현된 속성에서 컴파일러에서 생성된 백업 필드에 액세스하기 위한 `field` 상황별 키워드가 미리 보기 기능으로 릴리스되었습니다. ## C# 버전 12 - 2023년 11월 - [기본 생성자](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#primary-constructors) - 모든 `class` 또는 `struct` 형식으로 기본 생성자를 만들 수 있습니다. - [컬렉션 식](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#collection-expressions) - 임의의 컬렉션을 확장하기 위해 스프레드 요소(`..e`)를 포함한 컬렉션 식을 지정하는 새로운 구문입니다. - [인라인 배열](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#inline-arrays) - 인라인 배열을 사용하면 `struct` 형식으로 고정된 크기의 배열을 만들 수 있습니다. - [람다 식의 선택적 매개 변수](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#default-lambda-parameters) - 람다 식의 매개 변수에 대한 기본값을 정의할 수 있습니다. - [`ref readonly` 매개 변수](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#ref-readonly-parameters) - `ref readonly` 매개 변수를 사용하면 `ref` 매개 변수 또는 `in` 매개 변수를 사용하는 API에 대한 명확성이 향상됩니다. - [모든 형식에 별칭 지정](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#alias-any-type) - `using` 별칭 지시문을 사용하여 명명된 형식뿐만 아니라 모든 형식에 별칭을 지정할 수 있습니다. - [실험적 특성](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#experimental-attribute) - 실험적 기능을 나타냅니다. 그리고 [인터셉터](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-12#interceptors) - _미리 보기 기능_으로 릴리스되었습니다. 전반적으로 C# 12는 C# 코드를 보다 생산적으로 작성할 수 있는 새로운 기능을 제공합니다. 이미 알고 있는 구문은 더 많은 곳에서 사용할 수 있습니다. 다른 구문은 관련 개념에 대한 일관성을 가능하게 합니다. ## C# 버전 11 - 2022년 11 * [원시 문자열 리터럴](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#raw-string-literals) - [제네릭 수학 지원](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#generic-math-support) - [일반 특성](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#generic-attributes) - [UTF-8 문자열 리터럴](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#utf-8-string-literals) - [문자열 보간 식의 줄 바꿈](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#newlines-in-string-interpolations). - [목록 패턴](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#list-patterns) - [파일-로컬 형식](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#file-local-types) - [필요한 멤버](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#required-members) - [자동 기본 구조체](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#auto-default-struct) - [상수 `string`](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#pattern-match-spanchar-or-readonlyspanchar-on-a-constant-string)에 대한 패턴 일치 `Span<char>` - [확장된 `nameof` 범위](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#extended-nameof-scope) - [숫자 IntPtr](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#numeric-intptr-and-uintptr) - [`ref` 필드 및 `scoped ref`](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#ref-fields-and-ref-scoped-variables) - [대리자로의 메서드 그룹 변환 개선](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#improved-method-group-conversion-to-delegate) - [경고 웨이브 7](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-messages/warning-waves#cs8981---the-type-name-only-contains-lower-cased-ascii-characters) ## C# 버전 10 - 2021년 11월 - [레코드 구조체](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#record-structs) - [구조체 형식 개선](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#improvements-of-structure-types) - [보간된 문자열 처리기](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#interpolated-string-handler) - [`global using` 지시문](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#global-using-directives) - [파일 범위 네임스페이스 선언](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#file-scoped-namespace-declaration) - [확장 속성 패턴](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#extended-property-patterns) - [람다 식 개선](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#lambda-expression-improvements) - [`const` 보간된 문자열 허용](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#constant-interpolated-strings) - [레코드 형식은 `ToString()`을 봉인할 수 있음](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#record-types-can-seal-tostring) - [한정된 할당 개선](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#improved-definite-assignment) - [동일한 분해에서 할당과 선언을 모두 허용](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#assignment-and-declaration-in-same-deconstruction) - [메서드의 `AsyncMethodBuilder` 특성을 허용](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#allow-asyncmethodbuilder-attribute-on-methods) - [CallerArgumentExpression 특성](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#callerargumentexpression-attribute-diagnostics) - [향상된 `#line` pragma](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-10#enhanced-line-pragma) _미리 보기_ 모드에서는 더 많은 기능을 사용할 수 있습니다. 이러한 기능을 사용하려면 프로젝트에서 [`<LangVersion>`을 `Preview`로 설정](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-options/language#langversion)해야 합니다. - 이 문서의 뒷부분에 나오는 [제네릭 특성](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#generic-attributes) - [인터페이스의 정적 추상 멤버](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-11#generic-math-support). C# 10에서는 의식 제거, 알고리즘에서 데이터 분리, .NET 런타임 성능 개선이라는 주제에 대한 작업을 계속하고 있습니다. 많은 기능을 사용하면 동일한 개념을 표현하기 위해 더 적은 코드를 입력하게 됩니다. _레코드 구조체_는 _레코드 클래스_가 수행하는 것과 동일한 여러 메서드를 합성합니다. 구조체와 무명 형식은 _식 포함_을 지원합니다. _전역 사용 지시문_ 및 _파일 범위 네임스페이스 선언_을 사용하면 종속성과 네임스페이스 구성을 더 명확하게 표현할 수 있습니다. _람다 개선_을 통해 사용되는 람다 식을 더 쉽게 선언할 수 있습니다. 새로운 속성 패턴과 분해 개선으로 더욱 간결한 코드가 만들어집니다. 새로운 보간된 문자열 처리기와 `AsyncMethodBuilder` 동작은 성능을 개선할 수 있습니다. 이러한 언어 기능은 .NET 6의 성능 개선을 위해 .NET 런타임에 적용되었습니다. C# 10에서는 .NET 릴리스의 연간 주기가 더 많이 바뀌었습니다. 모든 기능을 연간 시간 프레임 내에 완료할 수는 없으므로 C# 10에서 몇 가지 "미리 보기" 기능을 사용해 볼 수 있습니다. _제네릭 특성_과 _인터페이스의 정적 추상 멤버_를 모두 사용할 수 있지만 이러한 미리 보기 기능은 최종 릴리스 전에 변경될 수 있습니다. ## C# 버전 9 - 2020년 11월 - [레코드](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/record) - (X) [초기화 전용 setter](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/init) - [최상위 문](https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/program-structure/top-level-statements) - 패턴 일치 개선사항: [관계형 패턴](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/patterns#relational-patterns) 및 [논리적 패턴](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/patterns#logical-patterns) - [성능 및 interop](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-version-history#performance-and-interop) - [원시 크기 정수](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/native-integers) - [함수 포인터](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/function-pointers) - (X) [localsinit 플래그 내보내기 무시](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/skip-localsinit) - (X) [모듈 이니셜라이저](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/module-initializers) - [부분 메서드에 대한 새로운 기능](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/extending-partial-methods) - [기능 마무리](https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-version-history#fit-and-finish-features) - [대상으로 형식화된 `new` 식](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/target-typed-new) - [`static` 익명 함수](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/static-anonymous-functions) - [대상으로 형식화된 조건식](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/target-typed-conditional-expression) - [공변 반환 형식](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/covariant-returns) - [`foreach` 루프에 대한 확장 `GetEnumerator` 지원](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/extension-getenumerator) - [람다 무시 항목 매개 변수](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/lambda-discard-parameters) - [로컬 함수의 특성](https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/proposals/csharp-9.0/local-function-attributes)