Unity - Coroutine

xogud·2024년 5월 27일
0

Unity

목록 보기
4/11
post-thumbnail

24/05/27

유니티를 하다보면 한번쯤은 접하게되는 코루틴에 대해서 알아보자.

코루틴(Coroutine)이란 무엇인가?

우선 코루틴은 여러 프로그래밍 언어와 플랫폼에서 존재하는 개념이다.
멀티태스킹을 제공하는 프로그래밍 구조로 특정 작업을 멈추고, 나중에 다시 멈춘 부분부터 이어서 시작할 수 있는 기능을 의미한다.

그럼 유니티에선 코루틴이 뭘까...?

유니티에서 코루틴은 메인 스레드에서 실행되는 비동기적인 동작을 구현하는데 사용되는 함수이다.
비동기적 동작이란 여러 작업을 진행하는데 있어 한 작업이 완료되기를 기다리지 않고 다음 작업을 실행할 수 있는 방식이다.
이런 방식을 이용하여 코드에서 작업이 완료되면 알림을 받거나, 완료 시 호출되는 콜백을 설정할 수 있다.

그럼 코루틴은 비동기식인가?

엄밀히 따지자면 본질은 동기식 동작이다. 하지만 동기식 동작을 비동기적으로 작동하는 것 처럼 보이게 만드는게 코루틴이라고 할 수 있겠다.

동기적 vs 비동기적

코루틴은 동기식이지만 비동기적이다 는 것을 이해하기전에 먼저 둘의 차이는..?

위 그림 처럼 동기적 방식은 작업을 끝내지 않으면 다음 작업이 실행되지 않으며 순차적으로 진행되는 방식이고 비동기식은 작업 진행중에도 응답 및 호출이 동시에 진행되는 병렬구조로 되어있다.

동기적 코드

동기적 코드 실행은 한 작업이 완료되기 전까지 다른 작업이 시작되지 않는 방식입니다. 코드의 각 줄이 순차적으로 실행됩니다.

void SyncMethod()
{
    Console.WriteLine("Task 1");
    Console.WriteLine("Task 2");
    Console.WriteLine("Task 3");
}

비동기적 코드

비동기적 코드 실행은 한 작업이 완료되기를 기다리지 않고 다음 작업을 실행할 수 있는 방식입니다. 비동기적 코드에서는 작업이 완료되면 알림을 받거나, 완료 시 호출되는 콜백을 설정할 수 있습니다.

async Task AsyncMethod()
{
    await Task.Delay(1000); // 1초 동안 대기
    Console.WriteLine("Task 1");
    await Task.Delay(1000); // 1초 동안 대기
    Console.WriteLine("Task 2");
    await Task.Delay(1000); // 1초 동안 대기
    Console.WriteLine("Task 3");
}

동기식과 비동기식은 단일스레드 와 멀티스레드 구조에서 볼 수 있으나, 코루틴은 스레드가 아니라는 점 그리고 유니티는 단일 구조의 스레드라는 점을 기억 해야한다.

결론은 그림에서 알 수 있듯이 코루틴은 함수의 전체적인 내용을 실행 시키지 않고 일시정지와 재개를 사용하여 필요한 함수 부분만 호출하기 때문에 이전 작업이 진행되는 동안 작업이 중지 되지 않는 멀티스레드 같이 단일스레드인 유니티의 메인스레드에서 비동기식처럼 작동한다.

profile

0개의 댓글