Swift에서 DispatchQueue는 Grand Central Dispatch(GCD)를 사용하여 비동기적으로 작업을 수행하는 데 사용되는 클래스이다.
DispatchQueue를 사용하면 앱에서 다양한 작업을 비동기적으로 실행하고, 작업 간에 우선순위를 지정하거나 제어할 수 있다.
여러 종류의 DispatchQueue가 있지만, 가장 일반적으로 사용되는 두 가지 유형은 다음과 같다:
Main DispatchQueue: 앱의 주요 UI 작업을 처리하는 DispatchQueue이다. 대부분의 UI 업데이트는 Main DispatchQueue에서 수행되어야 한다. 그렇지 않으면 UI가 느리게 응답하거나 멈출 수 있다. 예를 들어, UI 업데이트나 사용자 이벤트 처리 등은 Main DispatchQueue에서 수행된다.
Global DispatchQueue: 백그라운드에서 비동기적으로 작업을 실행하기 위한 DispatchQueue이다. 이것은 앱의 메인 스레드와 분리된 백그라운드 스레드에서 작업을 처리하는 데 사용된다. 작업을 수행할 때에는 작업의 성격에 따라 다양한 우선순위의 DispatchQueue를 선택할 수 있다.
DispatchQueue를 사용하여 작업을 예약하고 실행하는 방법:
async: 비동기적으로 작업을 예약한다. 현재 스레드를 차단하지 않고 작업을 실행하며, 작업이 완료될 때까지 대기하지 않는다.
sync: 동기적으로 작업을 예약한다. 현재 스레드를 차단하고 작업을 실행하며, 작업이 완료될 때까지 대기한다.
일반적으로 UI 업데이트와 관련된 작업은 DispatchQueue.main.async를 사용하여 Main DispatchQueue에서 비동기적으로 예약되고, 백그라운드에서 실행되어야 하는 작업은 Global DispatchQueue에서 비동기적으로 예약된다.
예를 들어, 네트워크 요청을 백그라운드에서 수행하고, 데이터를 받아오면 UI를 업데이트하는 코드는 다음과 같이 작성될 수 있다:
예시:
DispatchQueue.global().async {
// 네트워크 요청 등 비동기 작업 수행
let data = fetchDataFromNetwork()
DispatchQueue.main.async {
// 받아온 데이터를 사용하여 UI 업데이트
updateUI(with: data)
}
}
이를 통해 앱이 더욱 반응적이고, 작업이 느리거나 차단되는 것을 방지할 수 있다.