본문 바로가기

iOS

Swift Async - Await, Combine 원만한 합의 부탁드리겠습니다.(1)

안녕하세요, Achoo! 입니다.

 

오늘은 Async - Await로 먼저 비동기처리를 접한 사람으로서, 근래에 코딩하고, 공부하며 느낀 Combine에 대한 고찰들을 정리해보려 합니다.

 

따라서 먼저 Async - Await 이야기를 해봅시다.

 

Async - Await는 2021년 9월 Swift 5.5에서 등장했습니다.

https://www.hackingwithswift.com/articles/233/whats-new-in-swift-5-5

 

What's new in Swift 5.5?

Async/await, actors, throwing properties, and more!

www.hackingwithswift.com

 

제가 본격적으로 SwiftUI를 이용하여 개발을 시작했을 땐, 이미 Async - Await를 통해서 간단하게 비동기처리가 가능했습니다.

따라서 다음 예제와 같은 코드들을 아주 기계적이고 숨쉬듯 써왔습니다.

	func requestTranslate(sourceString: String, target: String) async throws -> String {
// ...
        guard let url = URL(string: baseURL) else { return "" }
// ...
        let (responseData, _ ) = try await URLSession.shared.upload(for: request, from: data)
        let response: TranslateResponse = decodeData(responseData)
        let translatedString = response.message.result.translatedText
        
        return translatedString
	}

 

제가 출시한 앱의 네트워크 코드 중 일부인데요.

SwiftUI, iOS 16 버전 타겟의 앱이었으며, 위 네트워킹 메소드를 통해 View에서 onAppear가 아닌 task 모디파이어로 뷰가 나타날때 비동기작업을 진행해주도록 하였습니다.

 

저는 적어도 위와 같은 방식의 비동기 처리에 몇 달은 찌들어있던 몸이었기에 Combine을 적용할 생각조차 없었지만, 뭔가 어렴풋이 머리 속에

 

"리액티브 프로그래밍을 위해선 Combine공부는 필수다!" 

 

라는 생각을 가지고 있었기 때문에 Combine을 공부하고 코드를 작성해보았습니다.

 

그래서 Apple Developer Documentation을 샅샅히 파헤치기 시작합니다...그런데..........

애플 공식 문서 : 꿀팁 하나 준다. Swift 5.5 이후엔 async - await 만 하면 컴플리션 핸들러(콜백 함수, 클로저)랑 컴바인 안써도 댐 ㅋㅋ
(This eliminates the need for both conventional completion handler and Combine futures. ㅋㅋ)

https://developer.apple.com/documentation/combine/using-combine-for-your-app-s-asynchronous-code

공부 시작과 동시에 종료~~~~~(2부 있어요)