C# 언어 심화 4편 – Span과 ReadOnlySpan 고성능 처리 방법
2025. 4. 25. 13:41ㆍ개발이야기
728x90
반응형
C#에서 메모리를 더욱 효율적으로 관리하기 위해 .NET에서 새롭게 추가된 Span과 ReadOnlySpan 타입을 사용할 수 있습니다. 이번 글에서는 이 두 가지 타입이 무엇이고, 어떻게 성능을 높일 수 있는지 실무 중심으로 정리해봅니다.
1. Span이란?
메모리 연속 영역에 대한 참조를 나타내는 구조체로, 배열, 문자열, 스택 메모리 등 다양한 메모리를 직접 접근하고 관리할 수 있습니다.
Span 기본 사용법
int[] numbers = { 1, 2, 3, 4, 5 };
Span<int> spanNumbers = numbers;
spanNumbers[0] = 10;
Console.WriteLine(numbers[0]); // 출력: 10
2. ReadOnlySpan이란?
Span과 유사하지만 읽기 전용이며 변경이 불가능한 데이터를 처리할 때 사용됩니다.
ReadOnlySpan 기본 사용법
string text = "Hello, Span!";
ReadOnlySpan<char> readOnlySpanText = text.AsSpan();
Console.WriteLine(readOnlySpanText.Slice(7, 4).ToString()); // 출력: Span
3. Span vs ReadOnlySpan 비교
항목 Span ReadOnlySpan
변경 가능 여부 | 가능 | 불가능 |
사용 용도 | 데이터를 수정할 때 사용 | 데이터를 읽기 전용으로 처리할 때 |
메모리 안전성 | 높음 | 더 높음 (읽기 전용이므로 더 안전) |
4. 실전 예제: Span를 이용한 고속 문자열 처리
string text = "hello world";
Span<char> span = stackalloc char[text.Length];
text.AsSpan().ToUpperInvariant(span);
Console.WriteLine(span.ToString()); // 출력: HELLO WORLD
5. 실전 예제: ReadOnlySpan를 이용한 안전한 파싱
string dateText = "2024-05-01";
ReadOnlySpan<char> dateSpan = dateText.AsSpan();
int year = int.Parse(dateSpan.Slice(0, 4));
int month = int.Parse(dateSpan.Slice(5, 2));
int day = int.Parse(dateSpan.Slice(8, 2));
Console.WriteLine($"Year: {year}, Month: {month}, Day: {day}");
// 출력: Year: 2024, Month: 05, Day: 01
요약
- Span: 메모리를 직접적으로 효율적으로 관리하며 수정 가능
- ReadOnlySpan: 메모리를 효율적이면서 안전하게 읽기 전용으로 관리
- 고성능 애플리케이션, 데이터 파싱, 문자열 처리에 최적화된 기능
728x90
반응형
'개발이야기' 카테고리의 다른 글
C# 언어 심화 5편 – Nullable 타입과 Null 조건부 연산자 활용법 (12) | 2025.04.26 |
---|---|
C# 언어 심화 3편 – 익명 타입과 dynamic 활용법 (8) | 2025.04.25 |
C# 언어 심화 2편 – 람다식(Lambda)과 LINQ 고급 활용 (10) | 2025.04.25 |
C# 언어 심화 1편 – delegate와 event 실전 응용 (8) | 2025.04.24 |
자료구조 시리즈 11편 (6) | 2025.04.23 |