.NET 10 Preview 6: 두 가지 신규 LINQ 확장 메서드 추가 개요
1. 변경 사항 한눈에 보기
- 추가된 메서드:
InfiniteSequence
,Sequence
- 공통점: 둘 다 시작 값과 증가 간격(step)을 기반으로 정수 시퀀스를 생성
- 차이점 강조:
InfiniteSequence
는 끝이 없는 무한 시퀀스,Sequence
는 상한(포함)을 명시하여 유한 시퀀스 생성
2. 기능별 상세 설명
2.1 InfiniteSequence
- 역할: 시작값(start)과 증가값(step)을 받아 무한히 계속되는 시퀀스를 생성
- 사용 패턴: 무한 시퀀스이므로 반드시
Take(n)
등으로 소비 범위를 제한해야 안전 - 예시 동작: 시작 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
- 역할: 시작값(start), 포함(inclusive) 상한(upper bound), 증가값(step)을 받아 상한을 넘지 않는 유한 시퀀스 생성
- InfiniteSequence와의 차이: 종결 조건(상한)이 있어 별도의
Take
없이도 안전하게ToList()
가능 - 예시 동작: 시작 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. 단계별 활용 흐름
- 요구 분석: 무한 반복이 필요한가? → 예: 패턴 생성, 스트림 처리 →
InfiniteSequence
- 범위가 고정된 수열이 필요한가? → 예: 보고/배치 처리 →
Sequence
- 무한 시퀀스 선택 시: 즉시
Take
,Skip
,Where
등 상위 제한/필터 설계 - 결과 수집 필요 시: 제한된 컬렉션으로 변환 (
ToList
,ToArray
) 수행 - 출력 또는 후속 처리 로직 적용
5. 실용적인 팁 & 주의사항
주의사항 (원문 근거)
InfiniteSequence
에서Take
없이 바로ToList()
/Count()
등을 호출하면 Out of memory 예외 위험. 반드시 소비량 제한 필요.