"코루틴(Coroutine)"
Unity에서는 서버 응답을 기다리거나, 리소스를 로딩하거나,
연출을 위해 몇 초 뒤에 다음 동작을 이어가는 등 프레임을 멈추지 않으면서 흐름을 제어해야 하는 경우가 자주 생긴다.
이럴 때 코루틴은 스레드를 추가하지 않고도,
코드를 중간에 멈췄다가(yield) 조건이 만족되면 다시 이어서(resume) 실행할 수 있도록 해주는 대표적인 방법이다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1) 코루틴(Coroutine)이란?
코루틴은 병렬 처리라기보다, 한 작업을 여러 단계로 나눠 프레임 사이에 분산시키는 느낌에 가깝다.

yield return null; → 다음 프레임에 이어서 실행
yield return new WaitForSeconds(1f); → 1초 뒤에 이어서 실행
yield return new WaitUntil(()=>cond); → 조건이 true가 되면 이어서 실행
----------------------------------------------------------------------------------------------------------------------------------------------------------------
2) Unity 코루틴은 “스레드”가 아니다?
Unity 코루틴은 대부분 메인 스레드에서 진행된다,
따라서 코루틴을 쓴다고 해서 자동으로 멀티스레드/병렬화가 되지는 않는다.

즉, Unity 엔진이 IEnumerator를 등록해두고,
프레임마다 진행 가능한 코루틴만 한 단계씩 진행시킨다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
3) 코루틴 기본 문법 예시 코드
(IEnumerator + StartCoroutine)
using System.Collections;
using UnityEngine;
public class CoroutineEx : MonoBehaviour
{
private void Start()
{
StartCoroutine(Example());
}
private IEnumerator Example()
{
Debug.Log("A");
yield return null; // 다음 프레임
Debug.Log("B");
yield return new WaitForSeconds(1f); // 1초 대기
Debug.Log("C");
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------
4) 자주 쓰는 yield 예시 코드
(1) 다음 프레임까지 대기
yield return null;
(2) x초 대기(게임 시간 기준)
yield return new WaitForSeconds(xf);
(3) 실제 시간 기준 x초 대기(Time.timeScale 무시)
yield return new WaitForSecondsRealtime(xf);
(4) 조건 충족까지 대기
yield return new WaitUntil(() => isLoaded);
(5) 시퀀스 구성(다른 코루틴이 끝날 때까지 기다림)
yield return StartCoroutine(FadeOut());
yield return StartCoroutine(LoadScene());
yield return StartCoroutine(FadeIn());
+++

----------------------------------------------------------------------------------------------------------------------------------------------------------------
5) 코루틴은 언제 멈추는가?
코루틴은 자동으로 멈추는 조건이 있는데
GameObject가 비활성(activeSelf=false)이 되거나
MonoBehaviour가 Destroy로 파괴되면 코루틴이 중단된다.
단, 스크립트만 비활성(Behaviour.enabled=false) 하는 것은 코루틴을 자동 중단시키지 않는다.
(OnDisable/OnDestroy에서 명시적으로 정리하는 것이 안전하다)

----------------------------------------------------------------------------------------------------------------------------------------------------------------
6) 오늘의 한 줄 요약
『 코루틴은 yield로 실행 흐름을 잠시 멈추고,
대기조건이 충족되면 이어서 실행하는 IEnumerator 기반의 흐름 제어 방식이다. 』
'1일 1 cs' 카테고리의 다른 글
| 10. 애니메이션(Animation)과 애니메이터(Animator)란? (0) | 2026.01.25 |
|---|---|
| 9. 컬링(Culling)이란? (0) | 2026.01.24 |
| 7. 대리자(delegate)와 event란? (0) | 2026.01.22 |
| 6. Unity의 생명주기(Life Cycle)란? (0) | 2026.01.21 |
| 5. 동기/비동기 프로그래밍이란? (0) | 2026.01.19 |
