더북(TheBook)

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 문으로 반복해서 반복기를 호출하여 반환된 값을 사용할 수 있습니다. 여기서는 세 번 반복하면 문자열이 반환됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.