일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 반응형프레임워크
- 코딩테스트입문
- SWIFT
- iOS앱 디버깅
- ARC
- 카카오맵클론
- IOS
- mrc
- ReactorKit UnitTest
- hackerrank
- Swift디자인패턴
- UIKit
- RC
- HackersRank
- firebase
- RxSwift
- ios면접
- algorithm
- Bubble Search
- unittest
- Di
- Swift코딩테스트
- AutoLayout
- Safari Inspector
- alamofire
- 시험에자주나오는것만
- 앱의생명주기
- firestore
- TDD
- 프로그래머스
- Today
- Total
샘성의 iOS 개발 일지
GCD API 동작 방식과 필요성에 대해 설명하시오. 본문
GCD 란?
Grand Central Dispatch의 줄임말로, 우리가 항상 UI를 그리는 작업을 메인 쓰레드에 요청할 때 사용하는 'DispatchQueue.main.async'의 DispatchQueue가 GCD에서 사용하는 큐의 이름이다.
GCD는 main queue, global queue, custom queue가 있다. global queue를 제외하고는 기본적으로, 직렬큐의 설정을 갖고 있다.
동시큐는 여러개의 쓰레드에서 작업을 동시에 처리하게 하는 것이고, 직렬큐는 반대로, 하나의 쓰레드에서만 작업을 처리하는 방식이다.
즉, 'DispatchQueue.main().async'를 해석하면, "GCD 중 메인 큐(하나에만)에 비동기적으로 00 일 좀 해줘"가 된다.
그렇다면 반대로, 'DispatchQueue.global().sync'는? "GCD 중 글로벌 큐(여러개 쓰레드 사용)에, 동기적으로 일 좀 해줘"가 된다.
동기(sync)한 작업은, 작업이 끝날때까지 기다린 후, 다음 작업을 하는 것이다. (결과값이 나오면 다음 작업 시작함)
반대로, 비동기(async)한 작업은, 작업이 끝날때까지 기다리지 않고, 다음 작업을 하는 것이다. (결과값이 나오든 말든 그냥 일만 계속 함)
GCD API 동작 방식?
기본적으로 네트워킹을 요청하는 작업은 오래 걸리기 때문에 비동기적으로 일어나도록 설계 되어있다. 그러므로, 작업을 Operation으로 래핑한 다음에, Queue에 넣는다. Queue에서 남는 스레드에 작업을 배분하여 일을 시킨다(동시).
GCD 필요성
수행할 작업을 클로저의 형태로 DispatchQueue에 추가하면 GCD가 스레드를 자동으로 생성하고 실행해주고 쓰레드를 관리해주기 때문에, 쓰레드 관리가 자동적으로 된다는 장점이 있다. 또한, 필요한 작업의 종류에 따라 동시, 직렬 그리고 동기, 비동기로 나누어서 처리할 수 있다는 이점이 있다.
예를 들면, 로그인 버튼을 누르면 '유저 정보 유무 확인' - '네트워킹 통한 유저 프로필 사진 불러오기' - '로그인 완료 되면 메인화면 띄우기 / 로그인 안되면 경고창 띄우기' 라는 과정을 가정해볼 수 있다.
이럴 경우, 우리는 global queue에게 동기적으로 작업을 요청할 수 있다. 왜냐면, 정보 유무 확인 후에 유저 사진을 불러와야 하기 때문이다. 만약 처리가 끝나지 않음에도 해당 작업들을 전부 다 비동기적으로 처리하게 한다면, 쓰레드는 버튼 누르자마자 경고창부터 띄울지도 모른다... '유저 정보 유무 확인'이 끝나기도 전에 로그인이 안된다고 소리칠지도 모른다... 사실 경고창 띄우는 것조차 UI 작업이기에 그 전에 왜 main쓰레드에서 처리하지 않았냐고 개발자를 혼낼 것이다..ㅠ
그리고 반대로, 네트워킹 작업을 메인 쓰레드에서 동기적으로 처리하게 된다면 앱이 멈췄다고 소리칠 것이다....
그러므로 수행해야 할 작업의 종류에 따라 다른 방식으로 처리할 수 있다는 이점이 있기에 GCD가 필요하다.
'iOS > 면접' 카테고리의 다른 글
자신만의 Custom View를 만들려면 어떻게 해야하는지 설명하시오. (0) | 2023.05.09 |
---|---|
Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있는지 설명하시오. (0) | 2023.05.08 |
앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있는가? (0) | 2023.05.08 |
UIKit 클래스들을 다룰 때 꼭 처리해야하는 애플리케이션 쓰레드 이름은 무엇인가? (0) | 2023.05.05 |
Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오. (0) | 2023.05.05 |