언어/C#

yield return

에린_1 2024. 8. 7. 09:37
728x90

yield return

  • C#에서 이터레이터 메서드를 구현할 때 사용되는 키워드이다.
  • 이터레이터 메서드는 IEnumerable 또는 IEnumerable<T>를 구현하여 호출자가 요소를 순차적으로 반복(iterate)할 수 있도록 한다.
  • yield return은 메서드의 실행을 멈추고 호출자에게 현재 값을 반환한 후, 다음 호출 시 해당 위치에서 실행을 재개할 수 있게 한다.

주요 기능

  1. 순차적 데이터 반환
    • yield return을 사용하여 데이터를 하나씩 반환할 수 있다. 호출자는 이터레이터를 사용하여 데이터 시퀀스를 순차적으로 요청할 수 있다.
  2. 상태 저장
    • yield return은 메서드의 실행 상태를 저장한다. 이후 호출 시 저장된 상태에서 실행을 재개한다.
  3. 지연된 실행
    • 이터레이터는 실제로 반복자에 의해 요청되기 전까지 실행되지 않는다. 이는 데이터 시퀀스를 미리 계산하지 않고, 필요할 때마다 계산하여 반환하는 지연된 실행 방식을 제공한다.

동작 원리

  1. 이터레이터 상태 저장
    • yield return이 호출되면 현재 메서드의 상태(로컬 변수 값, 현재 실행 위치 등)가 저장된다.
  2. 이터레이터 일시 중지
    • yield return 이후의 코드는 나중에 호출자가 다음 요소를 요청할 때 까지 실행되지 않는다.
  3. 다음 요소 요청
    • 호출자가 반복을 계속할 때마다 메서드가 저장된 상태에서 재개되어 다음 yield return을 만날 때까지 실행된다.
  4. 종료
    • 모든 yield return 문을 실행한 후, 메서드가 종료되면 이터레이션이 끝난다.

활용

  • 컬렉션 생성
    • 복잡한 데이터 생성 로직을 단순화할 수 있다. 예를 들어, 특정 조건을 만족하는 요소들만 반환할 수 있다.
  • 상태 기반 순회
    • 상태를 기반으로 순회를 중단하고 재개할 수 있다. 예를 들어, 트리 구조의 노드를 순회할 때 유용하다.
  • 지연된 평가
    • 컬렉션을 미리 계산하지 않고, 필요할 때마다 계산하여 메모리 사용을 최적화할 수 있다.

예외 처리 및 yield break

  • yield return과 함께 yield break를 사용하여 이터레이션을 조기에 종료할 수 있다. 예외가 발생하거나 특정 조건이 충족되지 않으면 yield break를 호출하여 이터레이터를 종료할 수 있다.
728x90