[swift] dispatch_async() 비동기로 실행 시키기

2024. 8. 7. 15:03개발/iOS

 

1. dispatch_async란 무엇인가?

dispatch_async는 Grand Central Dispatch(GCD)에서 제공하는 비동기 함수로, 작업을 지정된 큐에 비동기적으로 제출합니다.

      * 비동기 프로그래밍: 비동기 프로그래밍은 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 진행할 수 있도록 해줍니다. 이를 통해 앱의 성능과 반응성을 개선할 수 있습니다.

 

2. dispatch_async를 사용하는 이유

  • 메인 스레드와 백그라운드 스레드: UI 업데이트는 메인 스레드에서 수행되어야 하며, 시간이 많이 걸리는 작업은 백그라운드 스레드에서 처리해야 합니다. dispatch_async를 사용하면 이 작업을 쉽게 관리할 수 있습니다.
  • 비동기 작업 처리: 네트워크 요청, 파일 I/O, 데이터베이스 쿼리 등 시간이 오래 걸리는 작업을 비동기적으로 처리하여 앱이 중단되지 않도록 합니다.
  • 성능 향상: 앱의 성능과 사용자 경험을 개선합니다. 메인 스레드가 항상 반응성을 유지할 수 있도록 합니다.

 

3. dispatch_async 사용 방법

  • Dispatch Queue: 작업을 제출할 큐를 생성합니다. 주로 사용하는 큐는 메인 큐(Main Queue)와 글로벌 큐(Global Queue)입니다.

* 메인 큐: UI 업데이트를 위한 큐

 

* 글로벌 큐: 백그라운드 작업을 위한 큐

 

4. dispatch_async 사용 예시

4-1. UI 업데이트: 메인 스레드에서 수행되어야 하는 작업

DispatchQueue.main.async {
    // 메인 스레드에서 UI 업데이트
    self.label.text = "Hello, sod-d tistory!"
}

 

 

4-2.백그라운드 작업: 시간이 많이 걸리는 작업

DispatchQueue.global(qos: .background).async {
    // 백그라운드에서 긴 작업 수행
    let result = performLongTask()

    DispatchQueue.main.async {
        // 메인 스레드에서 결과 처리
        self.label.text = result
    }
}

4-3.사용자 정의 큐 : 시간이 많이 걸리는 작업

let customQueue = DispatchQueue(label: "com.sod_d.customQueue")
customQueue.async {
    // 사용자 정의 큐에서 작업 수행
    let result = performCustomTask()

    DispatchQueue.main.async {
        // 메인 스레드에서 결과 처리
        self.label.text = result
    }
}

5. 결론

  • 비동기 프로그래밍의 중요성: dispatch_async를 사용하면 앱의 반응성을 유지하면서 동시에 복잡한 작업을 효율적으로 처리할 수 있습니다.
  • 실제 사용 사례: 네트워크 요청, 파일 I/O, 데이터베이스 처리 등 다양한 상황에서 dispatch_async를 활용할 수 있습니다.
  • 적절한 큐 선택: 메인 큐와 글로벌 큐를 적절히 사용하여 작업을 분배하고, 필요에 따라 사용자 정의 큐를 만들어 사용할 수 있습니다.