1️⃣ Swift Concurrency 개요
무엇이 추가되었나?
- Swift 5.5: async / await 도입
- Swift 6: 데이터 레이스 없는 동시성을 컴파일러가 보장
왜 중요한가?
- UI 멈춤 방지
- 네트워크 / 계산 작업과 UI를 동시에 처리
- Swift 6 모드에서 안전한 동시성 강제
2️⃣ 핵심 개념 정리
Asynchronous (비동기)
- 작업을 중단(suspend) 했다가 재개(resume)
- 기다리는 동안 다른 작업 가능
- ⏱ 시간은 그대로지만 앱이 멈추지 않음
Parallel (병렬)
- 여러 작업을 동시에 실행
- ⏱ 전체 시간 단축
- 관리 난이도 ↑
👉 비동기 ≠ 병렬
👉 병렬은 비동기의 한 형태
3️⃣ 문제 상황: Concurrency 없는 앱
기존 코드 문제
toastLabel.text = makeToast() // 2초 sleep eggLabel.text = boilEggs() // 7초 sleep
결과
- UI 완전 멈춤
- 버튼 눌러도 반응 없음
- 중간 상태 메시지 표시 ❌
- 총 실행 시간 ≈ 9초
📌 이유
메인 스레드에서 긴 작업을 실행했기 때문
4️⃣ async / await 도입
async 함수
func makeToast() async -> String
await 호출
let toast = await makeToast()
핵심 의미
- async : 중단 가능한 함수
- await : “여기서 잠시 멈출 수 있음”
5️⃣ Task로 비동기 실행
왜 필요한가?
- viewDidAppear()는 async 불가
해결
Task {
toastLabel.text = await makeToast()
}
결과
- UI 즉시 반응
- 버튼 클릭 바로 처리
- 중간 상태 표시 정상
👉 앱은 살아 있고 작업은 백그라운드에서 진행
6️⃣ 하지만 아직 느린 이유
- makeToast() 끝난 후
- boilEggs() 시작
❌ 여전히 순차 실행
7️⃣ async-let으로 병렬 처리
문법
async let toast = makeToast()
async let eggs = boilEggs()
await toastLabel.text = toast
await eggLabel.text = eggs
효과
- toast + eggs 동시에 실행
- 총 시간 ≈ 7초
- UI 반응 유지 + 성능 향상
8️⃣ 전체 흐름 요약
단계상태
| 동시성 없음 | UI 멈춤, 9초 |
| async/await | UI 정상, 9초 |
| async-let | UI 정상, 7초 |
'Programming Languages > Swift' 카테고리의 다른 글
| Protocols / Extensions/ Error Handling (0) | 2025.12.26 |
|---|---|
| Class / Struct (0) | 2025.12.26 |
| Functions (함수) / Closures (0) | 2025.12.26 |
| Swift / C++ Collection Types 비교 (0) | 2025.12.26 |
| Swift vs C/C++ 문법 비교 (0) | 2025.12.19 |