본문 바로가기
C#

1. yield return 에 대해 (개념)

by Oz Driver 2025. 3. 9.

이번 시리즈에서는 C# 의 yield return 에 대해 자세히 소개하려고 합니다.
처음 접하는 분들도 차근차근 이해할 수 있도록 예제를 중심으로 풀어갈 예정입니다.

그럼 첫 번째 이야기부터 시작해 보겠습니다.

 

일반적인 함수는 중간에 멈출 수 없다

일반적인 함수는 실행 중에 빠져나갔다가 다시 돌아올 수 없습니다.

예를 들어, 아래 코드를 보면 ...

void MyFunc()
{
    Console.WriteLine(1);
    Console.WriteLine(2);
    Console.WriteLine(3);
}

 

이 함수는 한 번 실행되면 끝까지 실행되며, 중간에 멈출 방법이 없습니다. 즉, 1을 출력하고 멈추고 싶어도 그럴 수 없으며, 무조건 2, 3까지 실행됩니다.

 

yield return 을 사용하면 중간에 멈추고 다시 실행할 수 있다

C# 에서는 yield return을 사용하면 함수 실행을 중단하고 나중에 다시 이어서 실행할 수 있습니다.

아래 코드를 보면 ...

IEnumerator MyCoroutine()
{
    Console.WriteLine(1);
    yield return null;
    Console.WriteLine(2);
    yield return null;
    Console.WriteLine(3);
}

 

이 함수는 1을 출력한 후 yield return null 에서 멈춥니다.
그리고 다음 frame 에서 2 를 출력하고 또 멈추고, 그 다음 frame 에서 3 까지 순서대로 실행됩니다.
즉, 함수가 한 번에 끝나는 게 아니라 중단과 재개 가 가능한 구조입니다.

 

참고로 yield return 을 사용하려면, 해당 함수의 반환형은 반드시 IEnumerator 또는 IEnumerator<T> 이어야 합니다. 그리고 컴파일러는 yield return 이 등장하면 자동으로 MoveNext(), Current 등을 포함한 Enumerator 클래스를 생성해줍니다. (이 부분은 뒤에서 더 자세히 다룰 것이므로 여기서는 넘어가겠습니다.)

 

yield return 은 어디에 사용될까?

일정 주기마다 실행될 필요가 있는 로직을 구현하거나, 특정 이벤트가 발생할 때까지 실행을 멈추고 싶은 경우 등  yield return 을 사용하면 함수가 한 번에 실행될 필요 없이, 원하는 곳에서 잠깐 멈출 수 있도록 도와주는 기능입니다.