안녕하세요. 오늘은 코루틴에서 비동기 처리를 위해 사용되는 Async
와 Await
함수에 대해 이야기해볼까 합니다.
Async
는 launch
함수와 더불어 새 코루틴을 시작하여 긴 작업을 비동기 처리하는 방법 중에 하나입니다.
최근 개발하고 있는 앱도 한 번에 10개 이상의 네트워크 콜을 불러와야하는 상황이 생겼습니다. 이를 일반적으로 호출하게 된다면 화장실 한 칸을 여러명이서 나눠쓰듯 상당한 딜레이가 걸리게 됩니다. 그러나 이를 앞서 언급한 Async
를 사용한다면 여러 칸의 화장실에서 널널하게 일을 볼 수 있는 것이죠.
코드로 같이 확인해보겠습니다. 다음 코드 스니펫은 비동기 처리 없이 리스트 크기만큼 네트워크 요청을 하는 코드입니다.
총 경과 시간은 다음과 같습니다.
보시다시피 각각의 네트워크콜이 순차적으로 호출되어 대략 16초 정도의 긴 시간을 휴대폰의 빈화면과 보내야 한다는 것이죠.
저희는 여기서 Async
와 Await
를 통해 총 호출 시간을 단축해볼 수 있습니다.
다음 스니펫과 같이 네트워크 요청 코드를 Async
로 감싸고, Await
정지 함수를 통해 결과값을 얻을 수 있습니다.
다음은 실행 결과입니다.
그저 async 블록으로 감싸주었을 뿐인데 실행 시간이 확연히 줄어들었습니다.
위와 같이 비동기적으로 네트워크 요청을 해준다면 사용자분들께 보다 나은 삶의 질을 선사해드릴 수 있습니다.