이번 시리즈에서는 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 을 사용하면 함수가 한 번에 실행될 필요 없이, 원하는 곳에서 잠깐 멈출 수 있도록 도와주는 기능입니다.
'C#' 카테고리의 다른 글
3. yield return 에 대해 (유니티에서의 동작) (0) | 2025.03.09 |
---|---|
2. yield return 에 대해 (내부 동작) (0) | 2025.03.09 |
Action 과 Func 의 형변환 살펴보기 (0) | 2025.03.08 |
=> (람다 연산자) 이해하기 (0) | 2025.03.08 |
제네릭 (Generic) <T> 에 대해서 (0) | 2025.03.05 |