Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Physical Audio
- DriverKit
- METAL
- AR Quick Look
- Hand Action Detect
- detent
- AVFoundation
- AppleEvent
- WWDC 2021
- actor
- DooC
- SF Symbols
- profile
- Object Capture
- SWiFT
- Xcode Cloud
- Hand Pose Detect
- CoreML
- async
- Reality Composer
- App Clip
- NSUserActivity
- Xcode Organizer
- User Enrollment
- Mac
- SF Symbols 3.0
- swiftUI
- concurrency
- ProRAW
- MDM
Archives
- Today
- Total
nyancoder
WWDC 2021 - Meet async/await in Swift 본문
원본 영상: https://developer.apple.com/videos/play/wwdc2021/10132/
이 장에서는 Swift에서 새로 지원되는 async/await 구문의 활용에 대해서 알아봅니다.
기존 방식의 문제점
- 예외가 발생하거나 실패 시에 completion 블록을 호출해 주는 것을 빼먹기가 쉽습니다.
- completion 호출을 함수가 끝나는 모든 지점에 넣어야 해서 코드가 복잡해집니다.
- Error?를 전달하는 대신 표준 라이브러리의 Result를 사용할 수 있지만 코드가 살짝 길어지고 약간 안정성이 더해질 뿐 근본적으로는 큰 차이가 없습니다.
Async / await
- 함수에 async 키워드를 추가하여 비동기로 호출되는 함수임을 알릴 수 있습니다.
- completion블록을 전달하지 않고 바로 리턴할 수 있어 코드가 훨씬 간결합니다.
- 예외 발생 시에는 단순히 그 예외를 던지고 throws 키워드를 함수에 추가하기만 하면 돼서 간단합니다.
- 내부의 다른 비동기 로직도 await 키워드만 추가해서 결과를 얻어올 수 있습니다.
Async properties
읽기만 하는 속성에는 async 키워드를 붙여 비동기로 결과를 리턴할 수 있습니다.
Async sequences
await 키워드를 for 루프에 사용하여 Async sequences의 결과를 받아올 수 있습니다.
Async sequences in depth
- await 키워드가 있는 비동기 함수가 호출되면 현재 Task의 실행은 멈출 수도 있습니다.
- 실행이 멈추면 system에서 필요한 작업을 수행 후 비동기 호출이 완료될 때 다시 현재의 Task가 진행됩니다.
- await 키워드 이전의 스레드와 이후의 스레드가 다를 수 있습니다.
Adopting async/await
테스트 함수에도 async/await 키워드를 적용하여 비동기 호출을 테스트할 수 있습니다.
- 기존의 비동기 함수 호출의 경우에도 async 키워드와 블록으로 감싼 후 await를 호출하면 async/await를 활용한 비동기 처리를 할 수 있습니다.
- 예외처리가 필요한 경우 앞에 try를 붙여 예외를 처리할 수 있습니다.
Async APIs in SDK
- 기존의 completion 블록을 받던 비동기 함수들은 새 api로 대체되어 async/await 구문을 사용할 수 있습니다.
- getCurrentTimelineEntry와 같은 이름의 함수는 동기적으로 수행되지 않으므로 get이 제거된 currentTimelineEntry로 이름이 변경될 수 있습니다.
Async alternatives and continuations
- 기존의 비동기 함수를 사용하는 코드를 async/await 형태로 감싸려고 할 때, withCheckedThrowingContinuation 함수를 사용할 수 있습니다.
- 비동기 함수의 실행이 끝나면, 반드시 continuation의 resume함수를 호출하여 작업이 계속되도록 해야 합니다.
- resume은 반드시 한 번만 호출되어야 합니다.
- resume을 호출하지 않는 경우에는 Swift 컴파일러가 경고로 알려줍니다.
- 필요한 경우 continuation을 멤버로 가지고 있다가 호출할 수 있습니다.
'WWDC > WWDC 2021' 카테고리의 다른 글
WWDC 2021 - Meet AsyncSequence (0) | 2021.07.01 |
---|---|
WWDC 2021 - Swift concurrency: Behind the scenes (1) | 2021.07.01 |
WWDC 2021 - Protect mutable state with Swift actors (0) | 2021.06.29 |
WWDC 2021 - Explore structured concurrency in Swift iOS, macOS, tvOS, watchOS (0) | 2021.06.26 |
WWDC 2021 정리글 목차 (0) | 2021.06.26 |
Comments