오늘은 새로운 강의를 들으면서 나온 내용을 좀 정리해보려 한다.
아무래도 중요한 개념이기 때문에 짚어보고 넘어가는게 좋을 것 같아서 작성 해본다.
우선 첫번째로는 동기(Sync), 비동기(Async)이다.
두개의 차이점이 뭐야 불어 봤을때
동기식(Sync)는 하나의 프로세스 처리가 되는 동안 다른 프로세스를 처리해야하는 상황이 생길 때 기존 프로세스에서는 새로운 프로세스의 작업이 완료 될때까지 대기하고 이후에 이어서 기존 프로세스를 처리하는 절차적인 방식이다.
비동기식(Async)은 하나의 프로세스가 처리 되는 동안 다른 프로세스를 처리해야 하는 상황이 생길 때 기존 프로세스는 계속 수행을 하되 다른 프로세스는 별도의 Worker Thread에서 작업을 하게 되고 작업이 완료가 되면 기존 프로세스에서는 작업이 완료된 내용을 다른 위치나 시점에서 이어서 추가적인 수행일 할 수 있는 비 절차적인 방식이다.
아래 그림을 보면 클라이언트와 서버를 예시로 드는데

그림 처럼 결국 동기 방식으로 서버 통신을 하게 되면, 클라이언트는 서버의 결과를 받기 전까지 아무런 행동을 할 수 없게 되고, 비동기 방식으로 서버통신을 하게 되면 서버에 요청을 한 후에도 추가적인 다른 행동을 할 수 있는 형태가 된다.
그렇다면 코루틴(Coroutine)은 무슨 상관일까?
코루틴은 실제로 수행하는 방식을 겉으로 보면 마치 비동기식 처럼 수행하게 된다. 그런데 내부적으로는 기존에 비동기에서는 Worker Thread에서 작업을 하고 결과를 주지만, 코루틴은 Main Thread에서 모두 처리하는 방식이다. 그 얘기는 코루틴 함수를 실행하면 함수내에서 yield return 하게 되면 함수 자체가 끝나는게 아니라 중간에 잠시 일시정지 하고 이후에 함수를 다시 수행해야하는 시점이 오면 중간에서 멈췄던 부분 부터 다시 진행을 하게 되는 방식이다.
그리고 이미지를 보면, 결국엔 일반적인 함수와 비교하게 되는데, 일반 함수는 마치 동기방식 처럼 return 을 만나거나 전부 수행하기 전까지는 다른 행위를 할 수 없으나, 코루틴의 경우에는 yield return 하는 부분에서 중간 결과를 리턴해주고 이후에 다시 수행할 시점이 오면 이어서 수행하는 식으로 진행하게 된다.

유니티에서는 코루틴으로 생각보다 많은 것을 할 수 있다.
반복해야하는 기능에서 사이클을 돌리거나 Vector 변경 과정을 실시간으로 반영을 해준 다거나 여러가지 상황에서 많이 사용하기 때문에 알아두면 좋다.
동기, 비동기는 어떤 프로그램을 개발하든 기본 상식이니까 그냥 알아두자^^..