[swift] Swift GCD에서의 동기와 비동기 실행

Swift에서 Grand Central Dispatch(GCD)를 사용하여 비동기적 작업을 실행하거나 동시에 여러 작업을 처리할 수 있습니다.

이번 포스트에서는 GCD를 사용하여 동기(synchronous)와 비동기(asynchronous) 실행의 차이점에 대해 살펴보고, 각각의 상황에서 어떻게 사용해야 하는지 알아보겠습니다.

동기적 실행

동기적 실행은 한 작업이 다른 작업을 기다리며 순차적으로 실행되는 것을 의미합니다. 코드 블록이 실행을 완료할 때까지 다음 작업은 시작되지 않습니다.

다음은 GCD를 사용하여 동기적으로 작업을 실행하는 예시 코드입니다.

let queue = DispatchQueue.global()

queue.sync {
    print("Task 1")
}

print("Task 2")

위 코드에서 queue.sync 메서드는 현재 스레드에서 작업을 실행하며, 해당 작업이 완료될 때까지 다음 코드가 실행되지 않습니다. 위 코드를 실행하면 “Task 1”이 먼저 출력되고, 그 후에 “Task 2”가 출력될 것입니다.

비동기적 실행

비동기적 실행은 한 작업이 다른 작업을 기다리지 않고 동시에 실행되는 것을 의미합니다. 작업이 완료될 때까지 기다리지 않고 다음 작업을 시작할 수 있습니다.

다음은 GCD를 사용하여 비동기적으로 작업을 실행하는 예시 코드입니다.

let queue = DispatchQueue.global()

queue.async {
    print("Task 1")
}

print("Task 2")

위 코드에서 queue.async 메서드는 현재 스레드에서 작업을 시작하고, 다음 코드가 즉시 실행됩니다. “Task 1”과 “Task 2”는 동시에 실행되기 때문에 출력 순서는 보장되지 않습니다.

언제 사용해야 하는가?

동기적 실행은 한 작업이 다른 작업의 결과를 필요로 할 때 사용하며, 순차적으로 실행되어야 하는 경우에 적합합니다. 반면에, 비동기적 실행은 여러 작업을 동시에 실행하고자 할 때 혹은 작업의 결과를 기다리지 않고 계속 진행해야 할 때 사용됩니다.

이상적인 실행 방식은 상황에 따라 다르므로, 각 상황에 맞게 적절한 실행 방식을 선택해야 합니다.

이렇게 GCD에서의 동기와 비동기 실행에 대해 간략히 살펴보았습니다. 다음 포스트에서는 GCD를 활용하여 실제로 어떻게 다양한 작업을 처리하는지 알아보도록 하겠습니다.