Dotnet 10의 두 가지 추가 LINQ 확장| Steven Giesel


.NET 10 Preview 6: 두 가지 신규 LINQ 확장 메서드 추가 개요

1. 변경 사항 한눈에 보기

  • 추가된 메서드: InfiniteSequence, Sequence
  • 공통점: 둘 다 시작 값과 증가 간격(step)을 기반으로 정수 시퀀스를 생성
  • 차이점 강조: InfiniteSequence는 끝이 없는 무한 시퀀스, Sequence는 상한(포함)을 명시하여 유한 시퀀스 생성

2. 기능별 상세 설명

2.1 InfiniteSequence

  1. 역할: 시작값(start)과 증가값(step)을 받아 무한히 계속되는 시퀀스를 생성
  2. 사용 패턴: 무한 시퀀스이므로 반드시 Take(n) 등으로 소비 범위를 제한해야 안전
  3. 예시 동작: 시작 0, step 5, Take(10) → 0, 5, 10, … , 45 (총 10개)

코드 예제

var steps = Enumerable.InfiniteSequence(0, 5)
	.Take(10)
	.ToList();

foreach (var step in steps)
{
	Console.WriteLine(step);
}

출력: 0, 5, … 45

2.2 Sequence

  1. 역할: 시작값(start), 포함(inclusive) 상한(upper bound), 증가값(step)을 받아 상한을 넘지 않는 유한 시퀀스 생성
  2. InfiniteSequence와의 차이: 종결 조건(상한)이 있어 별도의 Take 없이도 안전하게 ToList() 가능
  3. 예시 동작: 시작 0, 상한 45, step 5 → 0, 5, 10, … , 45

코드 예제

var steps = Enumerable.Sequence(0, 45, 5)
	.ToList();

foreach (var step in steps)
{
	Console.WriteLine(step);
}

출력: 0, 5, … 45

3. 두 메서드 비교 요약

구분 InfiniteSequence Sequence
시퀀스 길이 무한 유한 (상한 포함)
상한 지정 불가 가능 (inclusive)
안전 사용법 반드시 Take 등 한정 필요 바로 ToList() 가능
오용 리스크 메모리 폭증 (무한 materialize) 상대적으로 낮음

4. 단계별 활용 흐름

  1. 요구 분석: 무한 반복이 필요한가? → 예: 패턴 생성, 스트림 처리 → InfiniteSequence
  2. 범위가 고정된 수열이 필요한가? → 예: 보고/배치 처리 → Sequence
  3. 무한 시퀀스 선택 시: 즉시 Take, Skip, Where상위 제한/필터 설계
  4. 결과 수집 필요 시: 제한된 컬렉션으로 변환 (ToList, ToArray) 수행
  5. 출력 또는 후속 처리 로직 적용

5. 실용적인 팁 & 주의사항

주의사항 (원문 근거)

  • InfiniteSequence에서 Take 없이 바로 ToList() / Count() 등을 호출하면 Out of memory 예외 위험. 반드시 소비량 제한 필요.