[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
는 강력하고 유용한 기능이지만, 이러한 주의할 점을 유의하여 사용해야 합니다.
참고: