Async/await의 대한 공개가 벌써 꽤 오랜시간이 지났고 Async/await를 통해 클로저의 지옥에서 빠져나올수 있겠구나 생각을 했지만 생각보다 지원타겟이 높기에 아직 실무에 투입하기에는 이르지만 미리미리 준비하는 개발자가 되기 위해 Async/await에 대한 공부를 미리 해볼려고한다.
func hellCode(test : String){
TstoryC(test: test) { c in
self.TstoryB(test: c) { b in
self.TstoryA(test: b) { a in
print("a")
}
}
}
}
func TstoryA(test : String , completionHandler: @escaping(_ a : String) -> ()) {
completionHandler(test)
}
func TstoryB(test : String ,completionHandler: @escaping(_ a : String) -> ()) {
completionHandler(test)
}
func TstoryC(test : String ,completionHandler: @escaping(_ a : String) -> ()) {
completionHandler(test)
}
이 보기만해도 토악질 나오는 코드를 보셨습니까..
이런 클로저 지옥에서 우리를 구원하기위해 Async/await가 도입이 되었다 생각을 합니다.
빠르게 코드로 보여드리면
func hellCode(test : String) async throws {
let dataC = try await TstoryC(test: test)
let dataB = try await TstoryB(test: dataC)
let dataA = try await TstoryA(test: dataB)
}
func TstoryA(test : String) async throws -> String {
return test
}
func TstoryB(test : String) async throws -> String {
return test
}
func TstoryC(test : String) async throws -> String {
return test
}
짜자잔 기존의 escaping clousre 를 이용해 해결했던 부분을 함수쪽에 async throw 사용하는쪽에서 try await 를 사용하게되면
이렇게 훨씬더 깔끔하고 사용하기 좋은 코드가 완성 되는것을 확인 할 수 있습니다.
이제 이렇게 클로저들이 하나씩 사라지고 Async/await가 일반화가 된다면 상당히 편할것으로 예상이 된다.
https://github.com/gnejfejf2/asyncCode
'Swift 공부' 카테고리의 다른 글
RxDataSources Multiple Object Multiple Section (1) | 2022.04.08 |
---|---|
Swift Throw Error Handling (0) | 2022.04.07 |
Swift WMO (0) | 2022.04.04 |
Tuist 모듈화 공부 Swinject 3편 적용기 (0) | 2022.04.03 |
Tuist 모듈화 공부 Swinject 2편 잡담 (0) | 2022.04.01 |