iOS 앱 개발을 하면, 어느 순간 이 개념을 만나게 됩니다.
그게 언제냐면,
Networking 을 통한 something을 할 떄!
URLSession이 내부적으로 비동기처리를 하고 있습니다. 그리고 그 결과를 UI 업데이트를 하려고하면! 에러가 뙇! 하고 나타나는 경험을 합니다. 그러다가 그 에러를 복붙해서 검색해보면, 코드 몇 줄로 문제를 해결할 수 있습니다. 그 코드 몇 줄에 대해서 개념을 알아보고자 합니다.
Dispatch 란 무엇이냐.
Apple said,
Execute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.
-> 시스템에서 관리하는 dispatch queue에 작업을 보내 멀티코어 하드웨어에 “동시에[“ 코드를 실행합니다. (라는 프레임워크)
공식문서 링크 : Apple Developer Documentation
애플에서 위처럼 정의하고 있습니다. 여기서 주목해야할 표현을 보면 아래와 같습니다.
이 표현만 봐도 느낌이 오시나요?
시스템에서 관리하는 친구다. 그리고 이것들을 관리하도록 하려면 Dispatch 대기열에 보내야한다. 근데 언제사용하냐? 멀티코어가 있는 하드웨어에서 동시에 무언가 처리할 때, 사용한다.
GCD는 동시에 테스크를 처리해야할 때, 사용한다.
Q. 아니 우노, 지금 GCD 보려고 왔는데 왜 Dispatch를 설명해주시나요?
왜냐하면, 바로 다음 글에 그 이유가 있습니다.
공식문서를 보면 다음처럼 설명하고 있습니다
GCD(Grand Central Dispatch)라고도 하는 Dispatch에는 macOS, iOS, watchOS 및 tvOS의 멀티코어 하드웨어에서 동시 코드 실행 지원에 대한 체계적이고 포괄적인 개선 사항을 제공하는 언어 기능, 런타임 라이브러리 및 시스템 개선 사항이 포함되어 있습니다.
GCD == Dispatch 라고 보셔도 됩니다.
애플이 그랬음.
이후 설명을 요약하면,
BSD subsystem (Unix의 베리에이션), Core Foundation, Cocoa APIs 들은 GCD 기능을 통해서 애플리케이션을 더욱 “빠르고”, “효율적이며” 그리고 “반응을 잘하도록” 기능확장을 할 수 있습니다. GCD는 시스템 레벨에서 동작합니다. 그리고 사용가능한 시스템 리소스에 맞게 알아서 잘 테스크를 분배합니다.
(조금 제 해석이 있으니 원문을 원하시면 위에 적은 링크에서 보세요!)
제 언어로 좀 바꿔볼게요.
정리하겠습니다.
GCD(=Dispatch)는 애플리케이션에서 비동기 처리를 할 수 있도록 도와주는 프레임 워크이다.
그리고 Topics 을 보겠습니다.
(Topics를 모두 확인할 필요는 없지만 카테고리는 봐둘 필요가 있습니다. 나중에 필요할 때, 떠오를 겁니다.제발)
정리하겠습니다.
GCD에서는 Task를 관리하고 대기열에 추가하는 동작 그리고 그 과정에서 필요한 관리들을 할 수 있다.
Q. GCD가 무엇인가?
Q. GCD는 왜 사용해야하는가?
Q. GCD 통해서 어떤 것들을 할 수 있는가?
위 질문에 답할 수 있도록 글을 구성했습니다!
자 이제 기초적인 키워드들은 한 번씩 본 것 같습니다. 이후에 글은, 좀더 구체적인 사용방법이나, 사용 사례들을 녹여서 글을 작성하겠습니다.