async/await
- ๊ธฐ์กด completion handler๋ฅผ ํตํ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ฌ๋ฌ ์ด์ ์กด์ฌ
- ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ชจ๋ case์์ completion handler๋ฅผ ํธ์ถํ๋๊ฐ
- self property์์ retain cycle์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ
- completion handler๊ฐ ์ค์ฒฉ๋์ด ํธ์ถ๋๋๊ฒฝ์ฐ ๋จ์ด์ง๋ ๊ฐ๋ ์ฑ, ์ฝ๋ฐฑ์ง์ฅ
- ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Swift์ ์ฝ๋ฃจํด(coroutine) ๋ชจ๋ธ์ ๋์
- Coroutine์ ํจ์๊ฐ ๋์ํ๋ ๋์ค ํน์ ์์ ์ suspend(์ผ์์ ์ง)ํ ์ ์๊ณ , resume(๋ค์ ์ฌ๊ฐ)ํ ์ ์๊ฒ ํ๋ค.
- ๋น๋๊ธฐํจ์(async/await)๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋ง์น ๋๊ธฐ ์ฝ๋์ธ๊ฒ ์ฒ๋ผ ์์ฑ ํ ์ ์๋ค
- async
- ํด๋น ํจ์๊ฐ ๋น๋๊ธฐ ํจ์์์ ๋ํ๋ธ๋ค
- ํจ์๋ฅผ async๋ก ํ์ํ๋ฉด ์ผ์ ์ค๋จ(to suspend)ํ๋๋ก ํ์ฉํ๋ค.
- ํจ์๊ฐ ์์ ์ ์ผ์ ์ค๋จํ๋ฉด, ๊ทธ ํจ์๋ฅผ ํธ์ถํ ํธ์ถ์๋ ์ผ์ ์ค๋จ์ด ๋๋ค. → ํธ์ถ์๋ async ์ด์ด์ผํจ
- await
- async ํค์๋๊ฐ ํ์๋ ๋ฉ์๋๋ ํจ์์ ๋ฆฌํด์ ๊ธฐ๋ค๋ฆฐ๋ค. suspension point ์์ ๋ํ๋
- ํธ์ถ๋ ํจ์๊ฐ ๊ฒฐ๊ณผ๊ฐ ํน์ ์ค๋ฅ๋ฅผ ๋์ง ์ดํ, suspension point์์ resume(์คํ์ ์ฌ๊ฐ)ํ ์ ์๋ค.
- ๋น๋๊ธฐ ํจ์๊ฐ ์ผ์ ์ค๋จ๋๋ ๋์ ์ฐ๋ ๋๋ ์ฐจ๋จ๋์ง ์๋๋ค ๋ฐ๋ผ์ ์์คํ ์ ํด๋น ์ฐ๋ ๋์ ๋ค๋ฅธ ์์ ์ ์์ ๋กญ๊ฒ ์์ฝํ ์ ์๋ค.
- suspend → resume์ ๊ณผ์
- 1. await ํค์๋๋ฅผ ๋ง๋๋ฉด suspension point๋ก ์ง์ ํ๊ณ ์ผ์์ ์ง (suspend)
- 2. ์ค๋ ๋์ ์ ์ด๊ถ์ ์์คํ ์๊ฒ ๋๊ฒจ์ค => ์ค๋ ๋ ์๋ณด(yielding)
- 3. ๋น๋๊ธฐ ์์ ์๋ฃ
- 4. ์์คํ ์ด ๋ค์ ๋น๋๊ธฐ ํจ์์๊ฒ ์ค๋ ๋ ์ ์ด๊ถ์ ๋๊ฒจ์ค
- 5. suspension point์์ ์์ ์ฌ๊ฐ (resume)
- ์ผ๋ฐ์ ์ผ๋ก ํจ์๋ ์ ํด์ง ์ค๋ ๋์์ ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ ์ฒ๋ฆฌํด์ผ ํ ์์ ์ด ๋ง์์ง๋ฉด ์์ฑ๋๋ ์ค๋ ๋๋ ์ฆ๊ฐํ๊ฒ ๋์ด ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ์ฆ๊ฐํ๋ ์ด์ ์กด์ฌํ์ง๋ง, ๋น๋๊ธฐ ํจ์๊ฐ suspend ๋๋ ๊ณผ์ ์๋ ์ถ๊ฐ์ ์ธ ์ค๋ ๋์ ์์ฑ ์์ด ์์ ํ ์ ์๋๋ก ์์คํ ์ด ์ ์ ํ ์ค๋ ๋๋ก ๋ฐฐ์ ํ๋ ๊ณผ์ ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ์ด์ ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก resumeํ ๋ ๋ฐฐ์ ๋ฐ๋ ์ฐ๋ ๋๋ ์ด์ ๊ณผ ๊ฐ์ง ์์ ์ ์๋ค
continuation
- ๊ธฐ์กด์ completion handler closure๋ฅผ continuation์ ํ์ฉํ์ฌ async ์ฝ๋ ๋ณ๊ฒฝํ ์ ์๋ค
- Swift Concurrency์ ๋์ ๋ ์ฝ๋ฃจํด์์๋ ๋น๋๊ธฐ ํจ์์ ์คํ์ stack๊ณผ heap์์ ๊ด๋ฆฌํ๋๋ฐ heap์ suspension point์์ ์คํํ๋๋ฐ ํ์ํ ํจ์ ์ปจํ ์คํธ๋ค์ ์ ์ฅ
- ํ์ ์ ์ฅ๋ ์ ๋ณด๋ ์ค๋ ๋ ๊ฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก resume์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํ ๋น๋๋๋ผ๋ ์ผ์์ ์ง๋ ํจ์์ ์ํ๋ฅผ ์ถ์ ํด ์ด๋์๋ถํฐ ์ฌ๊ฐํ ์ง ์ ์ ์๋ค.
- suspend ๋์๋ ํจ์๊ฐ resume ๋๋ฉด, stack์ ์ต์๋จ frame์ด ํด๋น ํจ์ frame์ผ๋ก ๊ต์ฒด๋๊ณ ์ด๋ฏธ heap์ ํจ์ ์ปจํ ์คํธ๊ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ก์ด stack frame์ ์์ฑํ์ง ์๊ณ ๊ต์ฒด๋ง์ผ๋ก๋ ๋์
// ๊ธฐ์กด closure๋ฅผ ํ์ฉํ ์ฝ๋
func request(completion: ((String) -> Void)) {
completion("Hello")
}
func run() {
request(completion: {
print($0)
})
}
// continuation์ผ๋ก ๊ฐ์ธ async๋ก ๋ณ๊ฒฝํ ์ ์๋ค
func requestAsync() async -> String {
return await withCheckedContinuation { continuation in
request(completion: {
continuation.resume(returning: $0)
})
}
}
func run() {
Task {
let result = await requestAsync()
print(result)
}
}
Actor
- Swift 5.5 ๋ถํฐ ์ถ๊ฐ๋ ์๋ก์ด ํ์
- Class์ ๋น์ทํ๊ฒ ํน์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ค๊ณํ ์ ์๋ ๋ ํผ๋ฐ์ค ํ์
- ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋์์ ํ๋์ Task์์๋ง ์ ๊ทผ์ ๋ณด์ฅ
- var๋ก ์ ์ธ๋ ๊ฐ๋ณํ ํ๋กํผํฐ๋ ์ธ๋ถ์์ ์์ ์์๋ ์ธ๋ถ์ ๊ฒฉ๋ฆฌ๋๋ ๊ท์ ๋ฅผ ๋ฐ๋๋ค
- actor์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ธ๋ถ์์ ์ฐธ์กฐํ๋ ค๋ฉด ๋ฐ๋์ await๋ก ์ ๊ทผ
Next
Structured Concurrency
์ฐธ๊ณ
https://sujinnaljin.medium.com/swift-async-await-concurrency-bd7bcf34e26f
.
'iOS ๐ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Module, Library, Framework, XCFramework (0) | 2023.02.03 |
---|---|
Concurrency1 : GCD, Operation (0) | 2023.01.27 |
PNG transparency bug report (0) | 2022.12.23 |
Sign in with Apple ํ์คํ(iOS + Node.js) ๊ฐ๋ฐ ๋ ธํธ (0) | 2022.10.12 |
Unable to locate the App Tracking Transparency permission request when reviewed on iOS 15.4.1. (0) | 2022.05.13 |