Swift에서의 쓰레드(Thread), 동기(Synchronous), 비동기(Asynchronous) 개념은 앱의 성능과 사용자 경험에 큰 영향을 미칩니다.
적절한 이해와 활용은 UI 멈춤 현상 없이 효율적인 동작을 구현하는 데 핵심적입니다.
Swift에서 쓰레드를 효율적으로 다루기 위해 사용하는 API
비동기 처리, 병렬 처리, 지연 처리 등을 지원
| 큐 이름 | 설명 |
|---|---|
| main | UI 업데이트는 반드시 이 큐에서 실행 |
| global | 백그라운드에서 작업 처리 (QoS에 따라 우선순위 지정 가능) |
| custom | 필요한 경우 직접 생성 가능 (serial or concurrent) |
DispatchQueue.global().async {
// 백그라운드 작업
let result = heavyTask()
DispatchQueue.main.async {
// UI 업데이트
updateUI(with: result)
}
}
| 구분 | 설명 | 특징 |
|---|---|---|
| 동기 | 작업이 끝날 때까지 기다림 | 코드 순서대로 실행됨 |
| 비동기 | 작업을 백그라운드에서 수행하고 즉시 다음 코드 실행 | 비순차적 실행 가능 |
// 동기
print("A")
doSomethingSync() // 작업 끝날 때까지 대기
print("B")
// 비동기
print("A")
DispatchQueue.global().async {
doSomethingAsync()
}
print("B") // 먼저 출력됨
비동기 작업을 보다 간결하고 직관적으로 표현 가능
func fetchData() async throws -> String {
let (data, _) = try await URLSession.shared.data(from: url)
return String(data: data, encoding: .utf8) ?? ""
}
Task {
let result = try await fetchData()
print(result)
}
DispatchQueue.main.async에서 실행global 큐나 Task 등을 활용Swift에서 쓰레드와 동기/비동기 처리를 적절히 사용하는 것은 성능과 UX 향상에 필수적입니다.
GCD, async/await 등을 활용하여 안전하고 효율적인 코드 구성이 중요합니다.