C# 타입 시리즈 3편에서는 데이터를 효율적으로 다루는 타입을 배워볼 거예요! 🚀
1편에서는 기본 타입, 2편에서는 컬렉션과 특수 타입을 배웠다면, 이번에는 IEnumerable, IQueryable, DataRow 등 데이터 처리에 자주 사용하는 타입을 깊이 있게 알아봅니다.
✔️ IEnumerable<T> vs IQueryable<T> 차이
✔️ DataTable, DataRow로 데이터 다루기
✔️ Span<T> 같은 고성능 데이터 타입
이 글을 보면 C#에서 데이터를 다루는 강력한 도구를 배울 수 있어요! 😃
1️⃣ IEnumerable<T> vs IQueryable<T> 차이
C#에서 컬렉션을 다룰 때 IEnumerable<T>와 IQueryable<T>의 차이를 아는 것이 중요해요.
두 인터페이스는 데이터를 조회하는 방식이 다릅니다.
✅ IEnumerable<T> (메모리 내 데이터 순회)
- 컬렉션(List, Array 등)에 저장된 데이터를 하나씩 읽는 방식
- LINQ 메서드를 사용하면 컬렉션 전체를 조회한 후 필터링
- 즉시 실행 방식 (메모리에 모든 데이터를 로드한 후 처리)
예제 코드
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
IEnumerable<int> evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
// 출력: 2, 4
IEnumerable<T>는 컬렉션 내 데이터를 순차적으로 접근할 때 적합해요.
하지만 데이터베이스와 직접 연결되지 않으며, 쿼리가 실행될 때 메모리에 모든 데이터를 로드합니다.
✅ IQueryable<T> (데이터베이스 최적화 쿼리)
- 데이터베이스(LINQ to SQL, Entity Framework)와 직접 연결
- 쿼리를 데이터베이스에서 실행하고 필요한 데이터만 가져옴 (지연 실행)
- 대용량 데이터 처리에 최적화
예제 코드 (Entity Framework 사용)
using (var context = new AppDbContext())
{
IQueryable<User> query = context.Users.Where(u => u.Age > 30);
foreach (var user in query)
{
Console.WriteLine(user.Name);
}
}
IQueryable<T>는 쿼리를 데이터베이스에서 실행하기 때문에 성능이 뛰어납니다.
대용량 데이터 처리 시 IQueryable<T>를 사용하면 훨씬 효율적!
✅ IEnumerable<T> vs IQueryable<T> 비교
특성 | IEnumerable | IQueryable |
실행 위치 | 메모리 내 실행 | 데이터베이스에서 실행 |
사용 대상 | 컬렉션 (List, Array 등) | 데이터베이스 (EF, LINQ to SQL) |
실행 방식 | 즉시 실행 | 지연 실행 |
성능 | 작은 데이터셋에 적합 | 큰 데이터셋에 최적화 |
2️⃣ DataTable, DataRow (테이블 형식 데이터)
C#에서 SQL 결과를 테이블 형태로 저장할 때 DataTable과 DataRow를 자주 사용해요.
✅ DataTable과 DataRow 개념
- DataTable은 테이블 전체를 저장하는 개체
- DataRow는 각 행(Row) 데이터를 나타냄
예제 코드: DataTable 생성 및 데이터 추가
using System;
using System.Data;
DataTable table = new DataTable("Users");
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
// 데이터 추가
table.Rows.Add(1, "Alice");
table.Rows.Add(2, "Bob");
// 데이터 조회
foreach (DataRow row in table.Rows)
{
Console.WriteLine($"{row["Id"]}: {row["Name"]}");
}
// 출력:
// 1: Alice
// 2: Bob
DataTable은 비연결형 데이터 처리 방식이라, 데이터를 메모리에 저장한 후 조작할 수 있어요!
✅ DataTable vs List<T> 차이점
특성 | DataTable | List<T> |
데이터 구조 | 행(Row) & 열(Column) | 객체 리스트 |
SQL과 호환성 | 높음 | 낮음 |
데이터 저장 방식 | 테이블 형태 | 개별 객체 형태 |
SQL 결과를 다룰 때는 DataTable,
일반 컬렉션 처리는 List<T>를 사용하면 좋아요!
3️⃣ Span<T> (고성능 데이터 처리)
Span<T>는 C#에서 메모리를 효율적으로 관리하기 위한 최신 기능이에요! 🚀
- 배열, 문자열, 메모리 블록을 가볍게 참조 가능
- 새로운 메모리 할당 없이 고속 데이터 처리 가능
예제 코드: Span<T>로 문자열 조작
string text = "Hello, C# Developer!";
Span<char> span = text.AsSpan();
Span<char> helloSpan = span.Slice(0, 5);
Console.WriteLine(helloSpan.ToString()); // Hello
기존 string.Substring()보다 Span<T>가 더 빠름!
GC(가비지 컬렉션) 부담이 적어 성능 최적화에 유용!
✅ 마무리
이번 글에서는 데이터 처리와 관련된 중요한 타입을 배웠어요! 🚀
✔ IEnumerable<T> vs IQueryable<T> 차이
✔ DataTable, DataRow로 테이블 데이터 다루기
✔ Span<T>로 고성능 데이터 처리
💡 이제 C#의 모든 타입을 이해했으니, 실전에서 활용해보세요!