[c#] C# yield 사용 시 주의할 점

C#에서 yield 키워드는 메서드가 반복 가능 컬렉션 또는 시퀀스를 반환할 수 있게 해줍니다. 하지만 yield를 사용할 때 몇 가지 주의할 점이 있습니다.

1. IEnumerator와 IEnumerable

yield를 사용하여 메서드를 작성할 때, 반환 형식은 IEnumerable 또는 IEnumerable<T>이어야 합니다. 또한, yield를 사용하는 메서드는 반복자(iterator)로 동작하므로 IEnumerator 인터페이스 또는 IEnumerator<T> 인터페이스를 구현해야 합니다.

public IEnumerable<int> GetNumbers()
{
    for (int i = 0; i < 10; i++)
    {
        yield return i;
    }
}

2. 상태 보존

yield를 사용하는 경우에는 메서드 실행이 일시 중지되었다가 다시 시작될 수 있음을 유의해야 합니다. 이는 메서드 실행 중에 지역 변수의 상태가 보존되는 것을 의미합니다. 따라서 같은 iterator 객체를 여러 번 반복해서 사용하려는 경우 의도치 않은 결과가 발생할 수 있습니다.

3. 값 유출

yield를 사용하여 값을 반환할 때, 값 유출(mutation)에 주의해야 합니다. 예를 들어, yield return someList[i]와 같이 리스트 또는 배열을 반환하는 경우, 값이 메서드 외부에서 수정될 수 있으므로 주의가 필요합니다.

yield는 강력하고 유용한 기능이지만, 이러한 주의할 점을 유의하여 사용해야 합니다.

참고: