C#
최신 C# 기능
C# 14
C# 최신 기능
C# 14: extension 키워드
C# 14: null 조건 할당 연산자
C# 14: nameof 향상
C# 14: Span 향상된 암묵적 변환
C# 14: Instance Operator
C# 14: 단순화된 람다 파라미터
C# 14: 새 field 키워드
C# 13
C# 13: params modifier 지원 확장
C# 13: lock 지시어 향상
C# 13: \e (새 Escape Sequence)
C# 13: 객체 초기화 식에 ^ 연산자 사용
C# 13: ref struct 타입 기능 향상
C# 13: partial 속성과 인덱서
C# 13: OverloadResolutionPriority
C# 12
C# 12: 클래스 Primary Constructor
C# 12: 컬렉션 식
C# 12: ref readonly 파라미터 (in)
C# 12: 람다식 디폴트 파라미터
C# 12: InlineArray 특성
C# 12: using alias 모든 타입
C# 12: Experimental, Interceptor
C# 11
C# 11: Raw String Literal
C# 11: 문자열 내삽 복수라인
C# 11: u8 접미어
C# 11: Generic Math 지원
C# 11: Generic Attribute
C# 11: 리스트 패턴
C# 11: 파일 로컬 타입
C# 11: required modifier
C# 11: Auto-default struct
C# 11: ReadOnlySpan 패턴 매칭
C# 11: 확장된 nameof 범위
C# 11: nint, nuint
C# 11: ref 필드
C# 11: 소문자 타입명 경고
C# 11: 향상된 method group 변환
C# 10
VS 2022 설치
C# 10 global using
C# 10 File-scoped Namespace
C# 10 향상된 문자열 내삽
C# 10 향상된 람다식 유추
C# 10 struct 기능 향상
C# 10 record struct
C# 10 확장된 속성패턴
C# 10 향상된 명료한 할당
C# 10 Destructor 기능 개선
C# 9.0
C# 9 레코드 타입
C# 9 init accessor
C# 9 최상위 프로그램
C# 9 향상된 패턴 매칭
C# 9 향상된 Target Typing
C# 9 공변 리턴 타입
C# 9 Native Int 타입
C# 8.0
C# 8 디폴트 인터페이스 멤버
C# 8 패턴 매칭
C# 8 Nullable Reference Type
C# 8 인덱싱과 슬라이싱
C# 8 비동기 스트림
C# 8 using 선언
C# 8 널 병합 할당자
C# 8 구조체 읽기 전용 멤버
C# 8 기타 기능들
C# 7.0
C# 7.0 새기능
C# 7.0 패턴 매칭
C# 7.0 튜플
C# 7.0 로컬 함수
C# 7.0 out 파라미터
C# 7.0 리터럴 표현
C# 7.0 Deconstructor
C# 7.0 ref return
C# 7.0 async 리턴타입
C# 7.0 Expression-bodied
C# 7.0 throw expression
C# 6.0
C# 6.0 새기능
C# 6.0 널 조건 연산자
C# 6.0 문자열 내삽
C# 6.0 Dictionary초기자
C# 6.0 nameof 연산자
C# 6.0 using static문
C# 6.0 catch블럭 await
C# 6.0 Exception 필터
C# 6.0 자동 속성 초기자
C# 6.0 읽기전용 자동 속성
C# 6.0 Expression-bodied

C#으로 이해하는 자료구조
C# 프로그래밍 기초 실습 전자책
C# 14: Span 타입의 향상된 암묵적 변환

기존(C# 13 이하)에는 배열, 문자열과 Span 타입 간의 변환에서 명시적 호출(explicit call)이나 캐스팅(casting conversion)이 필요했지만, C# 14에서는 이러한 변환을 언어 차원에서 자동으로(암시적으로) 처리해 주는 기능이 추가되었다. C# 14에서 Span은 단지 라이브러리 타입이 아니라, 언어의 핵심 타입(First class Span type)으로 언어의 변환/오버로드/타입추론 규칙 안에서 특별한 취급을 받게 되어 자연스러운 기본 타입에 가까워졌다.

이전 버전까지는 (일부 특별한 경우) 배열이나 문자열을 Span으로 다루려면 .AsSpan() 메서드를 호출하여 명시적 변환을 거쳐야 했었으나, C# 14부터는 Span이 First class type으로 보다 자연스러운 자동 변환이 지원된다.

아래 예제는 확장 메서드 수신자(Receiver) 지원에 대한 것으로, C# 14에서는 배열이나 문자열에서 Span 전용 확장 메서드를 직접 호출할 수 있어, 별도의 오버로드 메서드를 중복해서 만들 필요가 없게 되었다.
이러한 암묵적 변환 기능은 Span을 사용하는 코드를 더욱 간결하고 직관적으로 만들어 주며, 개발자가 명시적인 변환이나 추가 메서드 호출 없이도 배열과 문자열을 Span으로 쉽게 다룰 수 있도록 해준다. 또한, 성능 측면에서도 불필요한 복사나 변환이 줄어들어 효율적인 코드 작성이 가능해 지는 잇점이 있다.


예제

public class Program
{
    public static void Main()
    {
        int[] numbers = { 1, 2, 3 };

        // C# 13 이하: 명시적 AsSpan() 호출 필요
        Span<int> nums = numbers.AsSpan();
        nums.CustomProcess();

        // C# 14 부터: int[] 배열이 Span<int>로 암시적으로 자동변환
        numbers.CustomProcess();
    }
}

public static class SpanExtensions
{
    public static void CustomProcess(this Span<int> span)
    {
        foreach (var number in span)
        {
            Console.WriteLine(number);
        }
    }
}



C# 14: 제네릭에서의 암묵적 추론

C# 14에서는 Generic 타입에 대해 Span의 암묵적 추론(Generic Type Inference)이 지원되어, 제네릭 메서드나 제네릭 클래스에서 Span을 보다 쉽게 사용할 수 있게 되었다. 이전 버전에서는 제네릭 타입 매개변수에 Span을 사용할 때, 배열 등을 Span 타입으로 추론할 수 없었는데, C# 14에서는 이러한 추론이 가능해져 Span 타입으로의 명시적 변환없이 사용할 수 있게 되었다.

예제

public class Program
{
    public static void Main()
    {
        int[] numbers = { 1, 2, 3 };

        // C# 13 이하인 경우 아래 코드 에러 발생
        //      "The type arguments for method 'GenericDisplay<T>(ReadOnlySpan<T>)' cannot be inferred from the usage"
        //
        // C# 14 부터: 제네릭 메서드에서 ReadOnlySpan<T> 매개변수의 타입이 암시적으로 추론 가능
        GenericDisplay(numbers);
    }

    static void GenericDisplay<T>(ReadOnlySpan<T> span)
    {
        foreach (var number in span)
        {
            Console.Write(number);
        }
    }
}



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.