아요 개발 일기

[iOS] GCD + DispatchQueue 본문

iOS

[iOS] GCD + DispatchQueue

소진이 2023. 1. 29. 15:17

안녕하세요 :ㅇ

GCD + DispatchQueue에대해 알아보겠습니다 :D

동기 & 비동기에 대해서 모르시는 분은 동기(Sync) / 비동기(Async)글을 참고하고 와주세요!


Concurrency(동시성) 란?

쉽게 설명하자면, 한번에 여러개 수행하는 것을 말합니다.

App은 한번에 여러개의 일을 수행해야 사용성이 좋겠죠??

 

그렇다면 App이 하는일은 무엇일까요?

- 사용자 인터랙션 처리

- 네트워킹

- 백그라운드에서 파일 다운로드

- 파일 저장하고 읽기

 

만약에 네트워킹하느라 사용자의 인터렉션을 처리하지 않는다면 어떻게 되나요?
앱의 로딩이 길어짐!! (사용성 저하)

 

동시성 늘리기위해서는 어떻게 해야할까요?

하나의 큰 작업을 여러가지 task로 나누어서 우선 순위를 정합니다.

 

Main Thread에서는 사용자 인터랙션 처리와 UI 작업을 합니다.

복잡한 계산이나 네트워크와 같은 느린 작업은 Main Thread가 아닌 다른 곳에서 해야 빠른 반응성을 찾을 수 있습니다.

 

 


GCD (Grand Central Patch)

: 동시성을 제공해주기 위한 C기반의 저수준 Apple API이며,

해야할 일들을 만들어서 GCD에 넘기면 System에서 알아서 thread를 할당해서 안전하게 수행시켜주는 방식입니다.

 

공부하다보면서 DispatchQueue를 접한적 있죠?

GCD에서 사용하는 Queue가 DispatchQueue입니다 :D

 

FIFO (First - in First - out) : 먼저 들어온 데이터가 먼저 나감

 

GCD + DispatchQueue의 타입

종류는 크게 Main Queue, Global Queue, Custom 세가지로 나뉩니다.

 

Main Queue

: Main thread에서 작동하는 Queue 

UI나 사용자 인터랙션을 처리합니다.

 


 

Global Queue

: queue에 들어가는 task의 우선 순위를 Qos class를 통해서 표현합니다.

 

Qos (Quality of Service)

 

< 우선 순위가 높은 순 >

 

1. userInteractive

 : 바로 수행되어야하는 작업 (제일 급한거)

 

2. userInitiated

 : 사용자가 결과를 기다리는 작업 (거의 바로 수행되어야하는 작업)

 

3. default

 : 잘 사용하지는 않지만 userInitiated보다 조금 더 걸리는 작업에 사용

 

4. utility

 : 나름 무거운 작업 예를들어 네트워킹이나 파일 불러오기 등

 

5. background

 : 사용자에게 당장 인식될 필요가 없음, 위치 업데이트/ 영상 큰 것 다운 등등

 

 

간단 사용 예

 

여기까지는 시스템에서 제공해주는 것들이고, 아래는 직접 만드는 Queue입니다!

 


 

6. Custom Queue

:  직접 queue를 생성해서 관리해야할때가 있는데 그때 생성하여 사용합니다.

 

두개의 Queue 같이쓰기

 

예를들어 큰 이미지를 다운받고 UI에 띄워주는 작업을 해야할때

아래와 같은 코드로 작업을 해야합니다!

 

 

 


api와 image들을 다루기 시작하고 앱이 무거워지다보니 메모리 관리에 대해서 많이 생각하게 되더라구요..

사용성이 좋은 어플을 위해서는 꼭 알아야되는 부분인 것 같습니다! :)

 

혹시 틀린 부분이나 수정해야할 부분은 댓글로 남겨주시면 수정하도록하겠습니다!

감사합니다!ㅎㅎ

'iOS' 카테고리의 다른 글

[iOS] TextView에 Placeholder 구현하기  (0) 2023.07.30
[iOS] Lottie  (0) 2023.01.29
[iOS] Framework와 Library  (0) 2023.01.29
[iOS] Foundation  (0) 2023.01.29
[iOS] TestFlight 업로드 시 수출 규정 관련 문서 누락  (2) 2023.01.10