동기(Synchronous)와 비동기(Asynchronous)는 작업이 수행되는 방식에 대한 두 가지 다른 접근 방식입니다.
동기의 사전적 의미는 "동시에 일어나다"이지만, 프로그래밍에서 동기는 작업이 순차적으로 진행되는 것으로 이전 작업이 완료되기 전까지 다음 작업이 대기합니다. 동기 방식은 호출한 함수 또는 작업이 반환될 때까지 대기하는 동안 실행 흐름이 차단되는 특징이 있습니다. 이로 인해 각 작업의 완료를 기다리는 동안 시간이 소요되어 전체 프로세스의 성능이 저하될 수 있습니다.
비동기는 작업이 동시에 진행될 수 있으며, 이전 작업이 완료되지 않아도 다음 작업을 시작할 수 있습니다. 주로 I/O 작업이나 네트워크 요청과 같이 시간이 오래 걸리는 작업에 사용되며, 위와 같은 작업을 기다리는 동안 다른 작업을 처리할 수 있으므로, 전체적인 성능이 향상됩니다.
동기와 비동기의 차이를 이해하기 위해, 두 가지 작업을 큐와 스레드의 맥락에서 비교해보겠습니다. 동기 작업은 순차적으로 진행되며, 하나의 작업이 완료된 후에야 다음 작업이 시작됩니다. 반면 비동기 작업은 동시에 여러 작업을 처리할 수 있어, 작업의 대기시간을 줄일 수 있습니다. 이러한 차이는 프로그램의 성능에 직접적인 영향을 미칩니다.

Swift에서는 동시성을 지원하기 위해 여러 가지 기능을 제공합니다. Swift의 동시성 모델은 비동기 작업을 쉽게 관리할 수 있도록 설계되었습니다. 이를 통해 개발자는 복잡한 비동기 코드를 더 간단하고 명확하게 작성할 수 있습니다. Swift의 동시성 모델은 특히 async와 await 키워드를 사용하여 비동기 작업을 처리하는데 유용합니다.
동시성과 병렬성은 종종 혼동되지만, 두 개념은 다릅니다. 동시성은 여러 작업이 동시에 진행되는 것처럼 보이지만, 실제로는 하나의 프로세스에서 작업이 번갈아 가며 실행되는 것입니다. 반면 병렬성은 여러 프로세서가 동시에 여러 작업을 수행하는 것을 의미합니다.
