내일배움캠프(Unity)

비동기와 Coroutine 특강

빵어 2023. 12. 15. 16:57

동기식 프로그래밍

순차적으로 코드가 실행

간단한 작업에 적합, 시간이 오래 걸리는 작업에는 부적합

 

비동기식 프로그래밍

주 실행 흐름을 차단하지 않고 작업을 처리

 

 

Unity에서의 비동기 프로그래밍

async - 이 메서드는 비동기다

await - 메서드가 실행될 때 얼마동안 대기

 

Task

비동기 작업을 병렬로 실행 - 여러 작업을 동시에 처리

 

Async/Await 예외처리

비동기 작업을 할 때 예외처리를 반드시 해야함

너무 많은 작업을 한꺼번에 하면 게임이 꺼질 수 있음

 

성능과 메모리 관리

제한된 자원 내에서 고려해야 함

항상 모니터링

메모리 누수, 성능 저하 가능성

비동기 작업을 취소하는 것도 방법

 

 

Coroutine

시간 지연, 비동기적 작업 처리

게임의 주된 실행 흐름을 방해하지 않으면서 별도의 실행흐름을 만들어 냄

 

동시실행과 순차실행이 있음

동시실행 - 코루틴은 여러개가 동시에 시작하고 독립적으로 실행될 수 있음

순차실행 - 코루틴 하나가 완료되면 다음 코루틴이 시작되는 형태도 구현 가능

yield return StartCoroutine(Task1());
yield return StartCoroutine(Task2());

 

 

코루틴과 비동기 프로그래밍은 자주 같이 쓴다.

예) 코루틴 안에 비동기 함수를 사용

- 비동기 작업을 코루틴이 아닌 코드 중간에 넣으면 가독성이 떨어짐

- 시간을 조정할 수 있는 코루틴안에 넣으면 가독성이 좋아지고 비동기 처리를 섬세하게 관리 가능함

 

 

유니티에서 제공하는 SceneManager.LoadSceneAsync는 알아서 Scene을 비동기적으로 불러와준다.

하지만 큰 파일을 불러오는 상황, 일부 맵을 교체하는 상황 등 비동기 작업을 직접적으로 구현해야하는 상황이 올 수 있다.