[c#] C# yield 키워드의 동작 방식

C#에서 yield 키워드는 iterator를 생성하는데 사용됩니다. 이 키워드는 메서드 또는 get 접근자에서 사용되며, 컬렉션 또는 시퀀스를 나타내는 IEnumerable 또는 **IEnumerable** 인터페이스를 구현한 데이터를 생성할 때 유용하게 쓰입니다.

yield return 구문

yield return 구문은 컬렉션의 각 요소를 하나씩 반환하여, 호출자에게 전체 시퀀스를 효율적으로 반복하면서 메모리를 절약할 수 있도록 합니다.

아래는 yield return 구문을 사용하여 짝수를 반환하는 간단한 예제입니다.

public IEnumerable<int> GetEvenNumbers(int count)
{
    for (int i = 0; i < count; i++)
    {
        if (i % 2 == 0)
        {
            yield return i;
        }
    }
}

위의 GetEvenNumbers 메서드는 짝수만을 반환하는 iterator를 생성하며, 호출자는 foreach 루프를 사용하여 결과를 순회할 수 있습니다.

yield break 구문

yield break 구문은 iterator의 실행을 중단하고, 반환을 완료하여 호출자에게 더 이상의 값이 없음을 알립니다.

public IEnumerable<int> GetValuesUntilLimit(int[] values, int limit)
{
    foreach (int value in values)
    {
        if (value >= limit)
        {
            yield break;
        }
    
        yield return value;
    }
}

위의 GetValuesUntilLimit 메서드는 특정 조건을 충족할 때, iterator의 실행을 중단시킵니다.

요약

yield 키워드를 사용하면 시퀀스를 생성하고 반환할 때 효율적으로 메모리를 관리할 수 있으며, 호출자는 foreach 루프 등의 반복 구문을 사용하여 값을 순회하면서 가져올 수 있습니다.

참고 자료: Microsoft Docs - yield 문