프로그래밍/C#

yield return

selinatsu 2024. 10. 4. 01:09
반응형

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