yield return이란 무엇인가?
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
C# 개발자, 특히 yield return
개념을 이해하고자 하는 중급 개발자
핵심 요약
yield return
은IEnumerable
을 통해 값의 지연 평가(Lazy Evaluation)를 가능하게 하여 메모리 최적화에 유리- 대규모 파일 처리 시 한 줄씩 로드하며 즉시 처리 가능
- 다중 반복, 인덱스 접근, 외부 상태 의존성 등에서 한계가 존재
섹션별 세부 요약
1. `yield return`의 기본 개념
IEnumerable
을 통해 컬렉션처럼 값 생성이 가능하며, 실제로 사용될 때까지 메모리에 저장하지 않음- 예시:
.csv
또는.txt
파일을 한 줄씩 읽으면서 즉시 처리 가능 - 메모리 사용 최적화를 위한 주요 장점
2. 지연 평가(Lazy Evaluation) 예시
ReadFileLines
메서드: 파일을 한 줄씩 읽고,yield return
을 통해 즉시 처리Fibonacci
수열의 두 가지 구현:GenerateFibonacciLazy
는 무한 시퀀스 생성,GenerateFibonacciEager
는 메모리에 전체 데이터 저장
3. `yield return`의 한계
- 다중 반복 시 재실행 발생 (
.ToList()
호출 시 한 번만 생성) - 인덱스 접근(
[]
) 불가능 - 외부 상태 변경 시 예측 불가능한 결과 발생 (예:
_minPrice
필드 변경 시 필터링 조건 변경)
4. `yield return`의 활용 사례
- 검증 로직에서 오류 메시지 생성 (예:
ValidateUser
메서드) yield break
로 조기 종료 가능 (예:user == null
시 즉시 종료)
결론
yield return
은 대규모 데이터 처리 및 지연 평가를 위한 강력한 도구이지만, 다중 반복, 인덱스 접근, 외부 상태 의존성 등에서 주의가 필요합니다. 특히, 외부 상태가 변경될 경우 예측 불가능한 결과가 발생할 수 있으므로, 사용 시 이러한 한계를 고려하여 설계해야 합니다.