본문 바로가기
C#

6. yield return 에 대해 ( Coroutine 을 중지하고자 할 때 )

by Oz Driver 2025. 3. 9.

이전 글에서는 yield return을 활용하여 2D 스프라이트 애니메이션을 구현하는 방법을 다루었습니다. 이번 글에서는 코루틴을 중지하는 다양한 방법과 yield break 를 활용하는 방법을 살펴보겠습니다.

 

 

StopCoroutine()을 사용하여 코루틴 중지하기

Unity에서는 StopCoroutine()을 사용하여 실행 중인 코루틴을 중지할 수 있습니다. StopCoroutine()에는 두 가지 방식이 있습니다.

 

1. 코루틴의 이름을 사용하여 중지

void Start()
{
    StartCoroutine("ExampleCoroutine");
}

IEnumerator ExampleCoroutine()
{
    while (true)
    {
        Debug.Log("코루틴 실행 중");
        yield return new WaitForSeconds(1f);
    }
}

void StopMyCoroutine()
{
    StopCoroutine("ExampleCoroutine");
}

 

하지만 문자열을 사용하는 방식은 추천되지 않습니다.

이유는 컴파일 시 함수 이름을 확인할 수 없고, 오타가 발생할 가능성이 있기 때문입니다.

 

2. 코루틴의 참조를 저장하여 중지

더 안전한 방식은 코루틴의 참조를 저장하고 이를 통해 중지하는 방법입니다.

Coroutine runningCoroutine;

void Start()
{
    runningCoroutine = StartCoroutine(ExampleCoroutine());
}

void StopMyCoroutine()
{
    if (runningCoroutine != null)
        StopCoroutine(runningCoroutine);
}

 

이 방식은 직접 실행한 코루틴의 참조를 저장하여 중지하기 때문에, 오타 문제 없이 안전하게 사용할 수 있습니다.

 

 

yield break 를 사용하여 내부적으로 코루틴 종료하기

코루틴 내부에서 특정 조건이 만족되었을 때 코루틴을 중지하고 싶다면 yield break;를 사용할 수 있습니다.

IEnumerator ExampleCoroutine()
{
    Debug.Log("코루틴 시작");
    yield return new WaitForSeconds(1f);
    
    if (SomeCondition())
    {
        Debug.Log("코루틴 조기 종료");
        yield break; //  코루틴 즉시 종료
    }
    
    Debug.Log("코루틴 계속 실행");
    yield return new WaitForSeconds(1f);
}

 

이렇게 하면 SomeCondition()이 true일 경우, 코루틴이 즉시 종료됩니다.

 

 

StopAllCoroutines() 로 모든 코루틴 중지하기

StopAllCoroutines()을 사용하면 현재 실행 중인 모든 코루틴을 중지할 수 있습니다.

void StopEverything()
{
    StopAllCoroutines();
}

 

하지만 이 방법은 현재 실행 중인 모든 코루틴을 중지하기 때문에, 특정 코루틴만 멈추고 싶다면 사용하지 않는 것이 좋습니다.

 

 

마무리

StopCoroutine()을 사용하면 실행 중인 특정 코루틴을 중지할 수 있다.

문자열을 사용하는 StopCoroutine("CoroutineName") 방식보다는, 코루틴의 참조를 저장하여 중지하는 것이 더 안전하다.

yield break;를 사용하면 특정 조건이 충족되었을 때 코루틴을 내부적으로 종료할 수 있다.

StopAllCoroutines()는 모든 코루틴을 한 번에 중지할 수 있지만, 주의해서 사용해야 한다.

 

이번 글에서는 코루틴을 중지하는 다양한 방법을 알아보았습니다.

다음 글에서는 코루틴의 최적화 방법과 InvokeRepeating()과의 차이점을 살펴보겠습니다!