※ 1편에 이어 작성된 포스팅입니다!
※ 1편 링크 : [iOS - WWDC] Meet async/await in Swift #1
함수를 호출할 때 어떤 일이 발생하는지 먼저 알아보자.
(fetchThumbnail
내부에서 thumbnailURLRequest
를 호출한 상황)
thumbnailURLRequest
처럼 일반 함수인 경우 스레드는 완료될 때까지 해당 함수 대신 작업을 수행하는 데에 사용된다. 이 작업은 함수 자체의 본문에 있거나 호출하는 다른 함수에 있을 수 있다.async
키워드가 붙은 비동기 함수인 경우엔 조금 다름
async
로 표시되어 있다고 해서 반드시 일시중지 되는 것은 Xawait
가 표시된다고 해서 함수가 확실히 거기에서 일시 중단된다는 의미도 XfetchThumbnail
을 다시 살펴보자.fetchThumbnail
이 URLSession
의 비동기 메소드인 data
를 호출하면 data
메소드는 비동기 함수만 할 수 있는 특별한 방식으로 스레드에서 실행을 중지data
메소드에 대한 작업을 예약하도록 요청fetchThumbnail
이 호출된 후 사용자가 어떤 데이터를 업로드할 수 있는 버튼을 누른다고 가정, ex) 게시물에 반응할 수 있는 버튼(좋아요 버튼 등)data
메소드가 재개되거나 시스템이 다른 작업을 실행할 수 있다.data
메소드가 완료되면 fetchThumbnail
로 돌아간다.→ 함수가 일시 중단된 동안 다른 작업을 수행할 수 있다는 사실을 알 수 있음!
즉, 앱 상태가 크게 변할 수도 있다는 뜻.
그래서 Swift는 await
키워드로 비동기 호출을 표시해야 한다고 주장
completion handler
사용 시에도 마찬가지!
BUT!
나는 async/await
코드에 수반되는 모든 식과 들여쓰기가 없기 때문에
await
키워드가 코드 블록이 하나의 트랜잭션으로 실행되지 않음을 확인하는 방법
async
로 표시하면 일시 중단됨, 함수가 자신을 일시 중단하면 호출자도 일시 중단임await
키워드 : 비동기 함수에서 한 번 or 여러 번 일시 중단될 수 있는 위치를 표시하기 위함언젠가.. 보는 걸로, (지키지 못할 말)
※ 혹시 잘못된 부분이나 오타가 있다면 알려주시고 헷갈리는 부분은 언제든지 같이 이야기 나눠보아요! 🤗
※ 영상의 앞 내용은 1편 참고 부탁드립니다.
※ 현재 포스팅은 대략 15:03~20:53 내용입니다.
🎥 WWDC 영상 링크 : https://developer.apple.com/videos/play/wwdc2021/10132/