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