동기(Synchronous)와 비동기(Asynchronous)는 작업 실행 순서와 처리 방식에 관련된 개념임
Swift에서는 특히 async/await, DispatchQueue, completion handler 같은 방식으로 비동기 처리를 많이 사용함
✅ 동기(Synchronous)
- 작업이 순차적으로 실행됨
- 앞 작업이 끝나야 다음 작업이 실행됨
- 코드 흐름이 직관적이지만, 시간 오래 걸리는 작업이 있으면 앱이 멈춰 보일 수 있음
func fetchData() -> String {
// 서버에서 데이터 가져온다고 가정
return "데이터"
}
let result = fetchData() // 완료될 때까지 기다림
print(result)
✅ 비동기(Asynchronous)
- 작업이 백그라운드에서 실행되고, 바로 다음 코드로 넘어감
- 결과는 나중에 콜백이나 async/await로 처리함
- UI 멈춤 없이 작업 가능
// 예: completion handler 사용
func fetchData(completion: @escaping (String) -> Void) {
DispatchQueue.global().async {
let data = "데이터"
DispatchQueue.main.async {
completion(data)
}
}
}
fetchData { result in
print(result)
}
✅ Swift 5.5부터 도입된 async/await
func fetchData() async -> String {
return "데이터"
}
Task {
let result = await fetchData()
print(result)
}
- await는 해당 함수가 끝날 때까지 잠시 기다림
- 비동기 코드를 동기처럼 깔끔하게 작성 가능
- Task {}는 비동기 context를 생성해줌
✨ 차이 요약
항목 | 동기 | 비동기 |
실행 순서 | 순차적 | 병렬 또는 예약 실행 |
코드 흐름 | 직관적 | 콜백, 클로저, await 필요 |
UI 영향 | 차단될 수 있음 | UI 멈춤 없음 |
대표 사용 | 일반 계산, UI 변경 등 | 네트워크 요청, 파일 IO 등 |
여기서 내가 헷갈렸던 포인트
-> 그럼 await 왜 씀??? 그냥 동기 사용하면 되는거 아닌가?
=> 이유 : await는 비동기를 동기처럼 해당 작업이 끝날 때까지 기다려주는 역할을 함!
동기로 하면 안되는 이유는 동기로 했다가는 메인스레드가 멈출 수도 있어 사용자가 느끼기에 앱이 멈춰 보일 수 있음
✅ await 요약 정리
- await는 비동기 작업을 동기처럼 보이게 작성할 수 있게 해주는 문법임
- 실제로는 비동기 처리라서 UI 멈추지 않음
- 동기 방식은 UI를 멈추게 할 수 있으므로 지양해야 함
- await는 코드 가독성 향상, 에러 처리 간결화, 디버깅 용이성 제공
- 기존 클로저 방식보다 훨씬 관리하기 쉬운 구조로 작성 가능함
'STUDY > iOS' 카테고리의 다른 글
[Swift] TableView의 모든 것을 알아보기!!! (0) | 2025.05.20 |
---|---|
[Swift] 테이블뷰 메커니즘 구성하는 법 (0) | 2025.05.10 |
[swift] for - in과 forEach문에 대해 알아보자! (0) | 2025.04.29 |
[swift] 화면 전환 | push, present (0) | 2025.04.19 |
[iOS] ViewController의 생명주기 (0) | 2025.04.18 |