코루틴(Coroutine)이란?

코루틴은 함수의 실행을 중단하고, 특정 조건이 충족될 때 다시 이어서 실행할 수 있는 Unity의 비동기 흐름 제어 기법이다. 코루틴은 C# 의 일반적인 Tread,Task와 다르다. Unity 엔진 루프에 통합되어 있어서, 프레임 단위로 흐름을 제어할 수 있다.

기본구조

IEnumerator MyCoroutine()
{
    Debug.Log("1초 대기 전");
    yield return new WaitForSeconds(1f);  // 1초 대기
    Debug.Log("1초 후 실행");
}
StartCoroutine(MyCoroutine());

StratCoroutine() 호출을 통해 MyCoroutine()이 호출되고,

MyCoroutine()의 내부 블록 코드가 실행되면서 yield return new WaitForSeconds(1f); 코드를 통해 1초를 대기한다.

내부 흐름을 좀 더 자세히 살펴보면

IEnumerator를 루프 큐에 등록하고

매 프레임마다 이 큐를 확인해서 해당 yield 조건이 충족됐는지 확인하고

충족되면 해당 위치에서 MoveNext()를 호출하여 다음 단계로 넘어간다.

과정을 자세히 정리하면 다음과 같다.

  1. 코루틴이 처음 호출되면 IEumerator 객체가 생성됨
  2. Unity의 코루틴 매니저가 이 객체를 등록함
  3. 매 프레임마다 MoveNext()를 호출
  4. yield return 문을 만나면 일시 정지
  5. 다음 프레임에 조건이 충족되었느지 확인 → 충족되면 MoveNext() 재실행
  6. 반환 값이 없거나 yield break일 경우, 코루틴 종료