async/await이 나오게 된 배경
메인 스레드에서 다른 스레드로 작업을 보내고 -> 해당 스레드에서 다른 스레드로 작업을 보내고 .... 이런식으로 이어나가면서 completionHandler를 진행하게 되면, 콜백 지옥에 빠지게된다.
func processImageData(completionHandler: (_ result: Image) -> Void) {
loadWebResource("a.txt") { dataResource in
loadWebresource("b.txt") { dataResource in
decodeImage(dataResource, imageResource) { imageTmp
.....
async/await를 도입하면?
func processImageData() async throws -> Image {
let dataResouyrce = try await loadWebresource("a.txt")
let imageResource = try await loadWebResource("b.txt")
.....
}
- 코드가 매우 깔끔해진다.
1) completionHandler(이스케이핑 클로저) 대신에 async throws -> 리턴형 으로 바꾸고
2) 함수 호출 시, try await을 붙여서 작업이 끝날 때, 작업이 끝난 결과를 return해주게 되어 컴플리션 핸들러 대체
async/await VS Combine
https://developer.apple.com/documentation/combine/using-combine-for-your-app-s-asynchronous-code
- async/await이 Combine을 대체한다?!!! (하지만 Swift 5.5 라는 정말 최근에 나온 개념이라 기존의 코드를 모두 리팩토링 하는 것은 한계가 있을듯 ..)
https://medium.com/@GetInRhythm/closures-vs-combine-vs-async-await-993eb1da4d44
- 해당 글만 봐도 Async Await이 더 직관적이고 코드 길이가 더 짧아서 좋은것같다.
Combine vs RxSwift
https://eunjin3786.tistory.com/67
- Combine: iOS 13부터 지원, SwiftUI에 최적화
- RxSwift: iOS 8부터 지원
- 장기적으로는 iOS가 SwiftUI를 엄청 밀고있어서, Combine이 RxSwift를 나~~~중 가서는 뒤집을 날이 올 수도 있을것같다.
'🍎 iOS > GCD' 카테고리의 다른 글
[iOS/GCD] 3. GCD의 주의사항 (0) | 2023.07.23 |
---|---|
[iOS/GCD] 2. GCD의 개념 및 종류 (0) | 2023.03.10 |
[iOS/GCD] 1. 코어/스레드/프로세스, 직렬/병렬/동시, 동기/비동기 (0) | 2023.03.10 |