안녕하세요 :ㅇ
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 |