TIL 50 - Swift Concurrency 도입배경
Swift Concurrency의 도입 배경
iOS 13.0부터 도입된 Swift Concurrency는 비동기 프로그래밍을 보다 편리하게 할 수 있습니다.
그전에, Escaping closure를 사용해서 비동기 처리하는 방식의 문제점은 두가지였습니다.
첫번째로, 가독성이 좋지 않고, 복잡한 코드일수록 중첩된 클로저를 계속해서 작성해야 합니다.
두번째로, 중첩 클로저를 작성하며 에러코드 작성까지 완벽하게 하는 것은 힘들며 이로인해 프로그램 버그를 유발할 수 있습니다.
밑에 코드를 살펴보시죠.
해당 함수는 썸네일 이미지를 다운로드 받는 함수입니다.
이때, 이미지를 서버로부터 다운로드 받을때 escaping closure가 호출됩니다. 그리고 받은 데이터를 가지고 다시 prepareThumnail이라는 함수를 호출해야 하고 이때 한번 더 closure가 호출됩니다.
두번의 클로저 호출을 통해서 가독성이 점점 떨어지는 상황입니다. 클로저 호출시마다 에러처리 및 completion을 통해서 값을 방출하는 과정이 필요합니다. 이때 한번의 실수로 에러 케이스를 올바르게 처리하지 못한다면, 프로그램 전체에 에러를 발생시킬 수 있습니다.
Swift에서 제공하는 Result Type을 사용하여도 해당 문제를 피할 순 없습니다.
리하여 Swift는 기존의 복잡함을 덜어내고 async라는 키워드를 함수옆에 달아 간단하게 해결하였습니다.
async를 도입한 예시를 보며, 얼마나 더 간단해졌는지 확인해보겠습니다.
기준 20줄의 코드에서 6줄로 줄어들었으며, Depth가 사라졌습니다.
또한 사용자의 의도를 반영하여 더욱 읽기 쉽도록 변하였습니다.
에러는 함수 호출 statement의 바로 밑에서 처리되기에 실수 발생 가능성도 현저히 떨어집니다.
댓글
