39.4 반복기와 yield 키워드
반복기(iterator)(이터레이터)는 배열과 컬렉션 형태의 데이터를 단계별로 실행하는 데 사용할 수 있습니다. 반복기를 구현할 때는 IEnumerable 인터페이스(또는 IEnumerable<T> 인터페이스)와 yield 키워드를 사용합니다. 이 책에서는 반복기와 이터레이터를 혼용해서 사용하겠습니다.1
yield return을 사용하여 이터레이터 구현하기
우선 yield 키워드로 반복해서 값을 반환하는 이터레이터를 만들어 보겠습니다. 다음 내용을 입력한 후 실행해 보세요. 이 예제는 반드시 디버거의 F11을 여러 번 눌러 디버깅 모드로 테스트하길 권장합니다.
yield return을 사용하여 이터레이터 구현하기: YieldReturn.cs
using System; using System.Collections; class YieldReturn { //① 반복기(이터레이터) 구현: MultiData() 메서드는 세 번 반복해서 문자열이 반환됨 static IEnumerable MultiData() { yield return "Hello"; yield return "World"; yield return "C#"; } static void Main() { //② 반복기를 foreach 문으로 호출해서 사용 foreach (var item in MultiData()) { Console.WriteLine(item); } } }
실행 결과
Hello World C#
①의 MultiData() 메서드는 yield return 구문으로 세 번 문자열을 반환합니다. 이러한 yield return 구문은 IEnumerable 인터페이스 형식으로 반환됩니다. 일반적으로 반복기를 만드는 공식과 코드 형태가 같습니다. 이 예제에서는 yield return 문을 세 번 사용했지만, 반복기를 만들 때는 반복문으로 yield return 문을 감싸서 만드는 것이 일반적입니다.
반복기를 정의했다면 ②처럼 foreach 문으로 반복해서 반복기를 호출하여 반환된 값을 사용할 수 있습니다. 여기서는 세 번 반복하면 문자열이 반환됩니다.