yield return은 C#에서 반복자(iterator) 또는 코루틴을 쉽게 구현할 수 있도록 돕는 키워드입니다.
이를 사용하면 함수의 실행을 잠시 중단하고, 중단된 위치에서 다음 호출 시 다시 실행을 재개할 수 있습니다. 주로 IEnumerable, IEnumerator와 함께 사용되어 요소들을 순차적으로 반환하거나, 유니티에서 코루틴을 구현하는 데 사용됩니다.
주요 기능
* 중단점 제공
yield return은 함수의 실행을 일시적으로 멈추고, 값을 반환합니다.
다음 번에 이 함수를 호출하면 이전에 멈췄던 지점에서 다시 실행을 시작합니다.
* 반복자 생성
yield return은 자동으로 IEnumerator를 구현하여 값을 순차적으로 반환합니다.
이를 통해 반복자 패턴을 손쉽게 구현할 수 있습니다.
* 비동기적인 흐름 제어
특히 유니티에서 yield return은 코루틴으로 비동기적 작업을 처리할 때 유용합니다.
사용 방법
* 반복자에서의 사용
yield return을 사용하면 특정 컬렉션이나 연속된 값을 하나씩 순차적으로 반환하는 반복자를 쉽게 만들 수 있습니다.
class Program
{
static void Main()
{
foreach (int number in GetNumbers())
{
Console.WriteLine(number); // 1, 2, 3 출력
}
}
static IEnumerable GetNumbers()
{
yield return 1; // 첫 번째 값 반환
yield return 2; // 두 번째 값 반환
yield return 3; // 세 번째 값 반환
}
}
위의 코드는 yield return을 사용해 1, 2, 3을 차례로 반환하는 IEnumerable<int>를 구현한 예시입니다.
yield return을 호출할 때마다 함수의 상태가 저장되고, 이후 호출 시 다시 그 지점에서 실행이 재개됩니다.
* 유니티에서의 코루틴 사용
유니티에서는 **코루틴(Coroutine)**을 구현할 때 yield return을 사용합니다.
주로 특정 시간 동안 대기하거나 특정 조건을 기다릴 때 사용됩니다.
public class CoroutineExample : MonoBehaviour
{
void Start()
{
StartCoroutine(MyCoroutine());
}
IEnumerator MyCoroutine()
{
Debug.Log("코루틴 시작");
yield return new WaitForSeconds(2); // 2초 동안 대기
Debug.Log("2초 후 실행");
}
}
위 코드는 yield return으로 2초 동안 대기한 후, 다음 작업을 수행하는 코루틴입니다.
유니티에서는 yield return을 사용하여 작업을 일시 중단하고, 일정 시간이 지난 후에 다시 작업을 재개할 수 있습니다.
동작 원리
yield return이 호출되면 현재 함수의 상태가 저장되고, 반환된 값을 호출한 쪽에서 사용할 수 있습니다.
이후 해당 함수가 다시 호출되면 이전에 멈췄던 지점에서 실행을 재개합니다.
내부적으로 IEnumerator 인터페이스의 MoveNext(), Current 메서드가 자동으로 구현되어 실행 흐름을 관리합니다.
yield return 과 yield break
yield break를 사용하면 yield return을 사용하던 함수를 즉시 종료할 수 있습니다. 반복자나 코루틴에서 남은 작업을 중단하고 싶을 때 유용합니다.
static IEnumerable<int> GetNumbers()
{
yield return 1;
yield return 2;
yield break; // 여기서 함수 종료
yield return 3; // 이 코드는 실행되지 않음
}
요약
**yield return**은 함수의 실행을 일시 중단하고 값을 반환하며, 다음 호출 시 해당 지점에서 실행을 재개합니다.
**반복자(iterator)**와 코루틴을 쉽게 구현할 수 있도록 돕습니다.
유니티에서는 코루틴을 통해 비동기적 작업을 처리할 때 자주 사용됩니다.
yield break를 사용하면 반복자나 코루틴을 즉시 종료할 수 있습니다.
'프로그래밍 > C#' 카테고리의 다른 글
var 키워드 (0) | 2024.10.08 |
---|---|
이터레이터 메서드 (0) | 2024.10.05 |
배열 초기화 (0) | 2024.10.04 |
for 와 foreach 비교 (1) | 2024.10.03 |
배열[], ArrayList, List<T> 의 각 기능과 차이점 (2) | 2024.10.03 |