본문 바로가기
유니티

Day 32 - 동기와 비동기(Coroutine)

by shin0707 2024. 5. 27.
728x90

  • 주제

>> 동기와 비동기

(개념)

(실생활 비유)

 

>> Coroutine은 비동기적 동기

(Coroutine이 사용되는 좋은 예)

(나쁜 예)


  • 공부내용

1. 동기와 비동기란?

1-1. 동기(Synchronous)

: 작업이 순차적으로 실행된다.

동기적 코드는 한 번에 하나의 작업만 처리되기 때문에,

이전 작업이 완전히 끝날때까지 기다리느라 대기시간이 발생할 수 있다.

 

실생활 비유

레스토랑에서 주문(작업) + 대기

-> 주문한 음식이 준비될 때까지 기다린다.

 

1-2. 비동기(Asynchronous)

: 작업이 동시에 실행된다.

비동기적 코드는 여러 작업을 동시에 처리하고, 작업이 완료되면 그 결과를 처리한다.

 

실생활 비유

온라인에서 주문(작업) + 배송 완료 전에 다른 주문(작업)

-> 상품을 주문하고 나면, 주문한 상품이 배송되기 전에도 다른 상품을 주문할 수 있다.


2. Coroutine은 비동기적 동기

: Coroutine은 겉보기에는 여러 작업이 동시에 이루어지는 것 처럼 보이나, 

중간에 일시 중지와 다시 시작이 번갈아 일어나 동기의 특성을 가지고 있다.

이러한 특성으로 while 문에 의해 오래 실행되는 Coroutine은 메모리 누수가 발생할 수 있다.

--> StartCoroutine 함수를 사용하여 시작,

-->  Yield 구문을 통해 일시 중지,

-->  다시 시작

 

2-1. 좋은 예제

Coroutine이 짧은 대기 시간에만 사용되어, 메모리 누수가 발생하지 않는다.

IEnumerator MyCoroutine()
{
    Debug.Log("Coroutine 시작");
    yield return new WaitForSeconds(1); // 1초 대기
    Debug.Log("1초 후 Coroutine 종료");
}

void Start()
{
    StartCoroutine(MyCoroutine());
}

 

2-2. 나쁜 예제

Coroutine이 while문 안에서 계속 실행되어, 메모리 누수가 발생한다.

IEnumerator MyBadCoroutine()
{
    while (true)
    {
        Debug.Log("Coroutine 계속 실행 중...");
        yield return null; // 계속 실행되는 Coroutine
    }
}

void Start()
{
    StartCoroutine(MyBadCoroutine());
}
728x90
반응형