본문 바로가기
카테고리 없음

C# 타입 완전 정복 (3편) - 데이터 처리 타입

by bbongz 2025. 3. 10.

 

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#의 모든 타입을 이해했으니, 실전에서 활용해보세요!