지난 포스팅
지난 포스팅에서는 동기, 비동기, 직렬, 동시에 대해서 알아보았다. 그리고 iOS 에서는 작업을 분산시킬 때 Queue 라는 대기행렬에 보낸다는 것까지 알게 되었다.
그렇다면 Queue 에는 GCD(Grand Central Dispatch) 와 Operation 두종류가 있는데 먼저 GCD 에 대해서 공부해 보겠다. 그중에서도 GCD 의 종류에 대해서 알아보자.
GCD (Grand Central Dispatch) 란?
그대로 번역하자면 중앙 작업 배치 정도로 번역될 수 있을 것 같다. iOS 에서 비동기 작업을 관리하기 위한 라이브러리 이다! 이제 종류에 대해서 알아보자
1. 메인 큐
흔히들 한번쯤은 다들 봐봤던 아래의 코드를 기억할 것이다. 아래의 코드가 메인큐를 사용한 예시이다. 메인큐는 메인스레드에서 실행이 된다. 그렇다면 무슨일을 시켜야 할까? 가장 중요한 일! UI 업데이트 같은 작업, 인터렉션 작업을 처리하는데 사용하게 된다.
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
// 2초 후에 실행되는 작업
print("Hello World!")
}
2. 글로벌 큐
글로벌큐는 이제 메인스레드가 아닌 다른 스레드에 작업을 할당해준다. 6가지 QoS(Quality of Service) 에 따라 종류가 나누어 진다. 일단 6가지 종류가 있다는 것만 알아두자... 솔직히 6가지 다재다능하게 쓸 능력이 없다... 추후 하나하나 공부해보는 것이 좋을 것 같다.
// 중요도에 따라서 6가지 QoS
DispatchQueue.global(qos: .userInteractive)
DispatchQueue.global(qos: .userInitiated)
DispatchQueue.global() // 기본 글로벌큐
DispatchQueue.global(qos: .utility)
DispatchQueue.global(qos: .background)
DispatchQueue.global(qos: .unspecified)
참고로 .async(qos: .userInteractive) 처럼 global 뒤에도 붙일 수 있는데 이렇게 되면 뒤에 async 에 붙은 QoS 가 우선순위가 되어 만약 global 에서 낮은 중요도였다면 높은 중요도로 처리가 된다.
3. 커스텀 큐
말그대로 커스텀할 수 있는 큐이다. QoS 가 자동으로 추론되고 QoS 설정도 가능하다고 한다.
DispatchQueue(label: "serial") // 기본값은 Serial
DispatchQueue(label: "concurrent", attributes: .concurrent)
결론
이렇게 3가지 종류의 GCD 를 알아보았다. 계속 공부해나가서 QoS 도 설정하고, 커스텀도 하고 다양하게 DispatchQueue 를 활용하게 되면 좋겠다.
'→ Swift Study' 카테고리의 다른 글
[Swift] 약한참조 (weak self) Swift 로 실습해보기 (0) | 2024.01.21 |
---|---|
[Swift] GCD 알아보기 4 - 동시성 관련 문제 (0) | 2024.01.11 |
[Swift] GCD 알아보기 3 - DispatchGroup (0) | 2024.01.11 |
[Swift] GCD 알아보기 1 - 동기, 비동기, 직렬, 동시, 병렬 (1) | 2024.01.08 |
[Swift] Swift의 convenience init 이해하기 (0) | 2023.10.25 |