내일배움캠프(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을 비동기적으로 불러와준다.
하지만 큰 파일을 불러오는 상황, 일부 맵을 교체하는 상황 등 비동기 작업을 직접적으로 구현해야하는 상황이 올 수 있다.