본문 바로가기

IEnumerable

C# yield return을 이용한 지연 실행(Deferred Execution) yield return은 컬렉션 전체를 미리 만들어 두지 않고, 필요한 순간에 하나씩 값을 생성해 내는 이터레이터를 쉽게 작성하게 해줍니다. 결과적으로 메모리 사용을 줄이고, 실제로 필요한 만큼만 계산하도록 지연 실행을 구현할 수 있습니다.1. 기본 동작: 열거할 때마다 실행됩니다아래 예제는 foreach가 진행될 때마다 값이 생성됩니다. 같은 시퀀스를 두 번 열거하면 생성 과정도 두 번 실행됩니다.using System;using System.Collections.Generic;class Program{ static IEnumerable Numbers() { Console.WriteLine("Generate 1"); yield return 1; Conso.. 더보기
C# Enumerator 커스터마이징과 상태 유지 커스텀 Enumerator는 반복의 규칙과 상태를 직접 통제할 수 있어 성능 최적화와 도메인 규칙 캡슐화에 유리합니다. 이 글에서는 IEnumerator/IEnumerable 직접 구현, yield 기반 상태 머신, 반복 간 상태를 공유하는 커서 스타일, 그리고 성능/주의사항을 간단히 정리합니다.1. 기본기: IEnumerable/IEnumerator 직접 구현직접 구현하면 반복 규칙과 상태 보관을 세밀하게 제어할 수 있습니다. 아래는 짝수만 내보내며 마지막으로 반환한 값을 상태로 유지하는 예시입니다.using System;using System.Collections;using System.Collections.Generic;public struct EvenOnlyEnumerator : IEnumerat.. 더보기
C# IEnumerable vs IQueryable C#에서 IEnumerable와 IQueryable는 데이터 쿼리에 자주 사용되는 인터페이스입니다. 두 인터페이스는 컬렉션을 반복하면서 데이터를 필터링하거나 변환하는 데 도움을 주지만, 동작 방식과 사용처가 다릅니다.1. 개념 설명IEnumerable는 메모리 내 컬렉션을 반복하는 데 적합하며, 모든 쿼리 조건이 애플리케이션 내에서 실행됩니다. 반면, IQueryable는 데이터 소스(예: 데이터베이스)에 쿼리를 전달해 서버에서 처리할 수 있게 하는 인터페이스입니다.2. 코드 예제아래 예제에서는 IEnumerable와 IQueryable를 간단히 비교합니다.// IEnumerable 예제List numbers = new List { 1, 2, 3, 4, 5 };IEnumerable resultEnumer.. 더보기
C# LINQ 기초 - Where, Select, OrderBy LINQ는 컬렉션을 선언적으로 처리하는 도구입니다. Where는 조건으로 요소를 필터링하고, Select는 원하는 형태로 투영하며, OrderBy는 키 기준으로 정렬합니다. 이들을 메서드 체이닝으로 연결하면 읽기 쉬운 데이터 파이프라인을 만들 수 있습니다.1. 개념 설명필터(Where) → 변환(Select) → 정렬(OrderBy)의 흐름을 기억하면 대부분의 데이터 작업을 간단히 표현할 수 있습니다. IQueryable/IEnumerable 모두에서 사용 가능하며, 지연 실행으로 필요 시점에 계산됩니다.2. 코드 예제아래 예제는 홀수만 골라 제곱으로 변환한 뒤, 값이 큰 순서로 정렬합니다. 작은 배열로 동작을 눈으로 확인해보겠습니다.using System;using System.Linq;class Pr.. 더보기