yield

  • 호출자(Caller)에게 컬렉션 데이터를 하나씩 리턴할 때 사용.
  • Enumerator(Iterator) 라고 불리움.
  • yield return: 컬렉션 데이터를 하나씩 리턴.
  • yield break: 리턴을 중지, Iteration 루프를 빠져 나옴.
  • 재호출시 yield 리턴된 다음 코드부터 재실행.
  • 큰 데이터를 리턴하는 경우 한꺼번에 돌려주지 않고 On Demand, 부분적으로 돌려주는 경우 사용.
static IEnumerable<int> GetNumber()
{
    Console.WriteLine("First");
    yield return 1;
    Console.WriteLine("Second");
    yield return 2;
    Console.WriteLine("Third");
    yield return 3;
}

static void Main(string[] args)
{
    foreach (int num in GetNumber())
    {
        Console.WriteLine("Start");
        Console.WriteLine($"{num}");
        Console.WriteLine("End");
    }
}

/*
First
Start
1
End
Second
Start
2
End
Third
Start
3
End
*/

C# yield와 Enumerator

TODO:

  • 컬렉션 클래스와 같이 Enumeration이 가능한 클래스를 Enumerable 클래스라 부른다.
  • IEnumerator 인터페이스:
    • Current와 MoveNext()를 반드시 구현해야 함.
    • Current (속성)
    • MoveNext()
    • Reset()

참고자료