⭐ 코루틴이란?
● 하나의 프로세스에서 작업에 대기 시간을 두거나, 여러 프레임에 걸쳐 실행되도록 하는 기능으로 스레드와 다릅니다.
○ 스레드는 멀티 스레드를 통해 실제로 여러 작업을 동시에 실행
○ 코루틴은 실제로는 동기 방식이며, 비동기 방식으로 보이게끔 해주는 함수
● Ienumerator 반환형을 가진 함수입니다.
○ C#에서 제공하는 인터페이스 중 하나로 반복 가능한 객체를 순회할 수 있는 기능을 제공
○ 일반적으로 foreach나 코루틴에서 사용
yield 키워드
● return 대신 yield 키워드를 이용하여 반환하며, yield 키워드 사용시 사용이 일시 중지되고 다른 코드를 실행하거나
유니티에게 제어권을 반납하고 다음 실행시 중단점부터 다시 실행됩니다.
● yield는 object, 즉 System.Object를 상속받는 타입은 모두 리턴할 수 있습니다.
코루틴을 사용하는 이유
● Update 문에서 사용하는 것보다 효율적일 수 있다!
○ 경우에 따라 매 프레임 실행되는 Update 문보다 코루틴으로 특정 조건이나 시간에서만 실행되는 코루틴이 더 효율적
● 특정 조건까지 대기해야하는 동기적 처리
○ 서버에 데이터를 보내는 등의 작업이 완료된 후 다음 코드로 넘어가야 할 경우 코루틴을 사용하면 제어하기 편함
● 시간 대기를 통해 다양한 애니메이션 연출, 기능 구현이 편리
코루틴 사용하기
💡코루틴을 실행하고 중단하기
private void Start()
{
StartCoroutine(ExampleCoroutine()); → 코루틴을 실행하는 구문
}
private IEnumerator ExampleCoroutine()
{
Debug.Log("코루틴 시작");
yield return new WaitForSeconds(1f); → 1초 후 다음 코드로 넘어감
Debug.Log("1초후");
}
● StartCoroutine(Coroutine Method) → 코루틴을 실행
● StopCoroutine(Coroutine Method) → 코루틴을 중단
💡코루틴의 작업 순서
private void Start()
{
StartCoroutine(ExampleCoroutine());
Debug.Log("D");
}
private IEnumerator ExampleCoroutine()
{
Debug.Log("A");
Debug.Log("B");
yield return new WaitForSeconds(1f);
Debug.Log("C");
}
● 위와 같은 예시의 경우 출력 결과가 어떻게 될까?
○ yield return new waitForSeconds(1f)를 만나면 일단 코루틴은 중지되고 다음 코드를 실행하러 간다
→ 모든 작업이 다 끝났을 때 다시 코루틴으로 돌아가서 조건 체크 (1초가 지났는지가 조건)

● 실제로 콘솔창을 봐도 A → B → D → C 순으로 출력
💡자주 사용되는 yield 반환값
| yield return null | 한 프레임 대기 |
| yield return new WaitForSeconds(float seconds) | 지정 시간 대기 (게임 시간 기준) |
| yield return new WaitForSecondsRealtime(float seconds) | 지정 시간 대기 (실제 시간 기준) |
| yield return new WaitUntil(() => 조건) | 조건이 참이 될 때까지 대기 |
| yield return new WaitWhile(() => 조건) | 조건이 거짓이 될 때까지 대기 |
| yield return new WWW(string url) | 웹 통신 작업이 끝날 때까지 대기 |
| yield return new WaitForFixedUpdate() | 다음 물리 프레임까지 대기 |
| yield return new WaitForEndOfFrame() | 모든 렌더링 작업이 끝날 때까지 대기 |
| yield return StartCoroutine(Coroutine Method) | 다른 코루틴이 끝날 때까지 대기 |
⭐ 코루틴을 잘 사용하는 방법
● new WaitForSeconds 같은 객체를 매번 생성하지 않기
○ 캐싱을 통해 미리 객체를 생성해서 사용하면 GC를 줄일 수 있습니다.
● 불필요한 코루틴 사용 피하기
○ 매 프레임 동작하는 기능은 오히려 코루틴에서 사용하면 낭비가 크기 때문에 Update문을 이용합니다.
○ 코루틴은 특정 조건이나 시간에 작동하는 경우 사용
● 사용이 끝난 코루틴 확실하게 종료하기
○ 더 이상 필요없는데 종료하지 않은 코루틴이 계속 남아있을 수 있기 때문에 확실하게 종료해줍니다.
● yield return null을 과도하게 사용하지 않기
○ yield return null도 결국 매 프레임 실행되기 때문에 Update와 차이가 없습니다.
● 코루틴 변수로 관리하기
○ 미리 코루틴 변수를 선언 후 메서드를 담아 관리하면 중복 실행 방지 및 관리에 유용합니다.
'개발, IT > 유니티' 카테고리의 다른 글
| [Unity] UGUI (Unity Graphical User Interface) (0) | 2025.10.22 |
|---|---|
| [Unity] UnityEvent(유니티 이벤트), UnityAction(유니티 액션) (0) | 2025.10.22 |
| [Unity] 물리 충돌 이벤트 (OnTrigger / OnCollision (0) | 2025.10.20 |
| [Unity] 물리 충돌 처리를 위한 컴포넌트 (Collider / Rigidbody) (0) | 2025.10.19 |
| [Unity] 트랜스폼(Transform) (0) | 2025.10.16 |