동기 (Synchronous)
동기는 작업이 순차적으로 실행되는 방식으로, 하나의 작업이 완료될 때까지 다음 작업이 대기합니다.
- 코드가 작성된 순서대로 실행됩니다.
- 작업이 완료될 때까지 호출한 스레드가 차단됩니다.
- 실행 흐름이 직관적이나 시간이 오래 걸리는 작업이 있다면 성능에 영향을 줄 수 있습니다.
동기 예제 코드
print("start")
Thread.sleep(forTimeInterval: 2) // 2초 대기
print("end")
// 출력
// start
// (2초 후)
// end
비동기 (Asynchronous)
비동기는 작업을 시작한 뒤 다른 작업을 동시에 실행할 수 있는 방식입니다. 작업이 완료되면 나중에 결과를 반환합니다.
- 호출한 스레드가 차단되지 않고, 다음 작업이 바로 실행됩니다.
- 주로 콜백(closure) 또는 async-await을 통해 결과를 처리합니다.
- 네트워킹, 파일 읽기/쓰기 등 시간이 오래 걸리는 작업에 적합합니다.
비동기 예제 코드
print("start")
DispatchQueue.global().async {
sleep(2)
print("Task Completed")
}
print("end")
// 출력
// start
// end
// 2초 후
// Task Completed
Swift의 비동기 프로그래밍 방식
- GCD(Grand Central Dispatch): DispatchQueue를 사용하여 작업을 비동기로 실행
- OperationQueue: 비동기 작업을 관리하는 고급 API
- Async/Await: 비동기 작업을 동기 코드처럼 작성할 수 있는 최신 방식
Async/Await 예제는 다음과 같습니다.
func fetchData() async {
print("Fetching data...")
try? await Task.sleep(nanoseconds: 2_000_000_000) // 2초 대기
print("Data fetched")
}
Task {
await fetchData()
}
print("other work")
// 출력
// Fetching data...
// Other work
// (2초 후)
// Data fetched
'App Development > Swift' 카테고리의 다른 글
Swift의 고차함수 (0) | 2025.01.02 |
---|---|
Swift의 에러 처리 (Error handling) (0) | 2024.12.06 |
Swift의 매개변수(parameter) 정리하기 (0) | 2024.11.30 |
Swift에서의 completion (0) | 2024.11.26 |
Swift의 Closure 란? (0) | 2024.11.25 |