async
and just return a value (async/await)이러한 비동기 함수의 공통점은 함수를 호출하면 작업을 시작한 스레드가 빠르게 차단을 해제한다(unblock)는 점입니다. unblock한다는 것은 들고 있는 스레드를 놓아준다, 시스템에게 control을 넘겨준다고 이해하면 됩니다.
thumbnailURLRequest
: String
에서 URLReqeust
만든다 (시간 적게 걸림: 동기)dataTask
메서드는 1번에서 만든 request에 대한 data를 가져온다 (시간 오래 걸림: 비동기, 즉 asynchronous여야함)UIImage(data:)
: 2번에서 얻은 data에서 image를 만든다 (시간 적게 걸림: 동기)prepareThumbnail(of:completionHandler:)
: 만들어진 이미지에서 썸네일을 렌더링한다. (시간 오래 걸림: 비동기, 즉 asynchronous여야함)보다시피 각각의 작업들은 이전 작업의 결과에 의존하고 있습니다. 이건 동기적으로 실행되어야 한다는 것을 의미합니다. 하지만 사이에 시간이 오래걸리는 작업들은 비동기가 필요합니다.
만약 동기로 구현되어있다면 이미지를 서버에서 요청하고 렌더링하는 시간 동안 스레드가 Blocked되고, 유저는 그동안 멈춰있는 빈 화면을 멀뚱멀뚱 바라보게 되겠죠?? 아마 앱에 문제가 있다 생각하고 꺼버릴지 모릅니다ㅎㅎ..