비동기 처리 문법
비동기 처리 방법
- 콜백(Callback) 함수
- 비동기 작업이 완료되면 호출되는 함수를 지정하여 사용
- 작업의 결과를 처리하거나 다음 작업을 수행하는데 사용
- 비동기 작업의 인자로 전달되어 작업이 완료되면 호출
- Delegate
- completion 클로저
- Async/await 이전에 사용
- CompletionHandler의 사용으로 콜백이 연속되어버리는 코드가 많아지는 문제가 생김
- Async/await
- 비동기 작업을 동기적으로 처리하는 것처럼 보이게 하는 문법적인 구조
async
키워드를 함수 앞에 붙이고, 비동기 작업을 수행하는 부분에await
키워드를 사용await
는 비동기 작업이 완료될 때까지 함수의 실행을 일시 중지하고, 작업이 완료되면 결과를 반환await
로 마킹된 곳은 potential suspension point(잠재적 일시 중단 지점)로 지정async
로 선언한 함수가 왼료될 때까지 일시 중지 되는 지점
async
메소드를 호출하려면async
메소드 내에서 호출되거나Task
로 묶어서 호출해야 한다.
Async Await을 처리하는 원리 (스레드 관리)
- Sync 에서의 스레드 관리
- A함수에서 B함수를 호출하면 A함수가 실행되던 스레드의 제어권을 B에게 전달
- B함수가 끝날 때까지 해당 스레드는 점유되어 다른 일을 수행하지 않는다.
- B함수가 종료되면 A함수에게 다시 스레드 제어권을 반납한다.
- Async 에서의 스레드 관리
- A함수에서 B 함수를 호출하면 A함수가 실행되던 스레드의 제어권을 B에게 전달
- B함수는 async이기 때문에 스레드의 제어권을 포기하는 suspend가 가능
- suspend: 스레드에 대한 제어권은 system으로 가고 시스템은 스레드를 사용해 다른 작업 수행
- resume: 일시 중단된 B함수를 다시 실행한다.
- B함수가 종료되면 A함수에게 스레드 제어권을 반납한다.
'Swift' 카테고리의 다른 글
[Swift] 고차함수 (1) | 2024.12.13 |
---|---|
[Swift] 함수형 프로그래밍과 Closure(클로저) (0) | 2024.12.13 |
[Swift] Core Data 기본(Core Data Stack과 NSManagedObjectContext) (0) | 2024.11.17 |
Electron 앱과 Swift Native 앱간 통신하기 (0) | 2024.09.04 |
[Swift] 서브스크립트(subscript)에 대해 알아보자! (0) | 2024.08.23 |