두 API 모두 동시성 프로그래밍을 위해 사용되는 기술이다. GCD가 먼저 만들어지고 Swift Concurrency가 그 이후에 나오게 되었다.
호출한 함수를 비동기로 작업을 수행하고 탈출 클로저를 통한 작업이 끝났을 때의 처리 진행
async
, await
을 통한 가독성이 좋은 코드를 작성하고자 도입된 개념.
https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md#problem-1-pyramid-of-doom
위의 링크에는 GCD로 작성된 코드로 코드가 깊어지면 깊어질수록 들여쓰기가 너무 많아져 가독성이 너무 저하된다는 내용이 작성되어 있습니다.
func GCDTest(completion: (_ result: Image) -> Void) {
test1() { test1 in
test2() { test2 in
test3() { test3 in
test4() { test4 in
completion(test4)
}
}
}
}
}
이런식으로 completion Handler가 깊어짐에 따라 가독성이 너무 안좋아지는 문제가 생겼습니다.
func ConcurrencyTest() async throws -> Image {
let test1 = await test1()
let test2 = await test2()
let test3 = await test3()
let test4 = await test4()
return test4
}
순식간에 들여쓰기가 사라지고 가독성이 좋은 코드가 된 모습을 볼 수 있습니다.