안녕하세요 ! 애플 디벨로퍼 아카데미 @POSTECH 4기로 활동중인 Ethan입니다.
제가 요즘 Swift Concurrency에 대해 알아보고 있는데, 오늘은 Day2라서 async / await 기본 사용법에 대해 알아보려고 합니다.
먼저 해당 async & await 에 대해서 자세하게 알아보기 전에, 먼저 DispatchQueue 나 completionHandler를 알아야 합니다.
왜냐하면, 기존에 비동기 처리방식이 저 두가지였으니까요 ! (이외에도 여러가지 있긴함)
일단, 가장 중요한 Process & Thread 개념에 대해 간단하게 알아봅시다.
Process : 실행중인 프로그램
Thread : Process안에 포함되어 있는 실행흐름의 단위

조금 더 자세하게 설명해보자면, Process 는 작업의 '단위' 라고도 불립니다.
보통 Program은 코드 덩어리로 이루어져 저장장치에 저장된 정적인 존재들입니다.
하지만, CPU 할당을 받으면서 Memory에 올라가면 동적인 상태가 됩니다.
-> 이때 작업으로써의 단위 개념을 가집니다.
Thread는 실행 흐름의 단위 라고 표현했는데, 일단 작업은 당연히 코드의 연산을 통해 이루어지는데, 연산은 연속적인 친구입니다.
이게 하나의 Flow (Context) 를 만들게 됩니다.
이게 바로 Thread
Thread 의 필요성
- 관점에 따른 최소 작업 단위가 다릅니다.
CPU 관점 : Thread
운영체제 관점 : Process
-> 운영체제의 경우는 각 Process 별로 할당된 Memory내 정보에만 접근하도록 제약하고 있습니다.

Thread 의 공유 영역
Process는 서로 분리된 작업 영역을 갖고 있습니다. 그렇기 때문에 무언갈 공유하기가 어렵습니다. ( 부담이 크기때문, 근데 가능하긴함 )
하지만, Thread는 Memory를 공유하기 때문에 Thread에 대해 잘 알고 있어야 하는 것 입니다.
다소 복잡한 Process가 여러개의 Thread를 사용하여 작업을 하는 것입니다.
이를 Multi - threading (멀티 쓰레딩) 이라고 합니다.
반대로 Process가 여러개라면, Multi - tasking입니다.
작업 영역이 분리되있는 특성을 가진 Process 에서는 오류가 나도 다른 Process 에 영향을 주지 않습니다.
반대로
Thread는 메모리를 공유하며 동작하기 때문에 한 Thread에서 문제가 발생하면 다른 Thread에서, 즉 Process의 실행을 끝내버립니다.
(오류 발생 가능성이 있기 때문에)
iOS 의 Thread
- iOS에서 각 Thread는 병렬적으로 동시에 실행이 가능합니다.
- 개발자들이 각각의 Thread에 서로 다른 일들을 어떤식으로 배치하고 고민하는 것은 굉장히 어려운 일이기 때문에
Swift 에서는 GCD를 통해 Multi-Thread를 제어하는 기능을 제공한다고 합니다.
GCD
- Grand Central Dispatch API : iOS
* GCD와 Dispatch Queue 는 같은 개념이 아닙니다. *
Dispatch Queue는 GCD를 구현/제공하는 Swift의 API입니다.
- DispatchQueue.main.async의 DispatchQueue는, GCD를 사용(이용)하기 위한 명령어입니다.

GCD 의 Queue
- Main Queue : Main Thread인 Serial Queue를 사용합니다.
- Global Queue : 전체 시스템에 공유되는 Concurrent Queue를 사용합니다.
- Custom Queue: serial 또는 Concurrent Queue를 생성합니다.
Synchronous / Asynchronous
- 클로저 내에서 실행할 단일 작업에 대한 특성을 정의합니다.
Synchronous : Queue에서 실행중인 작업이 끝날 때 까지 다른 작업을 진행하지 않습니다.
Asynchronous : Queue에서 작업이 있어도 다음 작업을 비동기로 동시에 진행한다.
DispatchQueue.main.asyncAfter(deadline: .now() + 1.3) {}
* asyncAfter(deadline: Float) : 일정 시간 후 비동기로 진행하는 메소드
🔚 글을 마치면서, Swift Concurrency에 대해 이번 기회에 깊게 배울 수 있어서 좋았습니다.
어떻게 동작하는지 알고 사용하는게 가장 중요하다고 느끼지만, 가장 어려운 것 같습니다.
모두 즐거운 코딩 하세요.
참고 : https://weekoding.tistory.com/8
https://ios-development.tistory.com/958
[iOS - swift] Async, Await 사용 방법
Async, Await 이란? 기존에 비동기 처리 방식은 DispatchQueue나 completionHandler를 사용하여 처리했지만, 더욱 편하게 비동기 처리할 수 있는 문법 // DispatchQueue 사용한 비동기 처리 DispatchQueue.global.async { }
ios-development.tistory.com
[Swift]DispatchQueue와 스레드의 개념
Xcode의 코드들을 접하다 보면 이런 코드를 보았을 것이다. DispatchQueue.main.async { self.tableView.reloadData() } 결론적으로는 'main thread에서의 비동기 실행을 위한 코드'이다. 어떤 상황에서 사용되며, Dispa
weekoding.tistory.com
'Swift' 카테고리의 다른 글
| Swift Concurrency - Sendable 프로토콜과 컴파일러 검사 (2) | 2025.08.20 |
|---|---|
| Swift Concurrency - 값 타입 vs 참조 타입의 차이와 안정성 (0) | 2025.08.20 |
| Swift Concurrency - Task와 TaskGroup (3) | 2025.08.19 |
| Swift Concurrency / 동시성과 병렬성의 차이 (6) | 2025.08.12 |