본문 바로가기

Ios

Ios - API와 찰떡궁합 DispatchQueue.main.async

Networking 같이 작업시간이 비교적 긴 작업은 DispatchQueue.main.async를 이용해 다른 스레드를 만들어 비동기 처리 해줍니다.

 

비동기 처리를하지 않으면 Networking이라는 긴 작업 시간 동안(물론 몇 초일찌라도) 앱은 다른 동작을 할 수 없는 프로징 상태에 있게 됩니다. 네트워크 작업이 처리 될 때까지 멈춰 있게 되는 것이죠.

 

따라서 아래와 같은 형태의 클로져 구문아래 api로 받은 데이터로 처리할 작업들을 비동기로 작업하게 끔 만들어주면 앱이 프로징 상태에 있지 않고 원할히 동작하며, 완료된 네트워크 작업의 데이터 또한 그때 그때 반영해 줄 수 있습니다. 예) api로 받은 자료를 UI에 반영하는 것. 사진, 텍스트 등. 또는 화면 전환시 용량이 큰 파일을 저장하고 넘어가는 경우(ex 이미지, 비디오 등) 로딩이 걸릴 수 있는데 이 때, 저장하는 부분을 DispatchQueue에 작성해주면 부드럽게 화면을 전환 할 수 있음.

 DispatchQueue.main.async{
 
 }

 
심화)
이전에는 동시성 프로그래밍을 위하여 여러 개의 스레드를 개발자가 직접 구현하는 개발하는 일이 많았습니다. 그러나 스레드를 개발자가 직접 다루는 것은 복잡한 일이었습니다. 그래서 애플에서는 동시성 프로그래밍을 위한 지원을 하기 위해 osx나 ios 같은 os단에서 스레드를 대신 조작해주는 GCD(grand central dispatch)라는 기술을 만들었습니다. 이를 통해 개발자들은 위와 같이 단 몇줄의 코드만으로 동시성 프로그래밍을 위한 멀티스레딩을 구현할 수 있게된 것입니다.