๋ฐ์ํ
์ด์ค์ผ์ดํ ํด๋ก์ (Escaping Closure)
- escaping ํด๋ก์ ๋ ํด๋ก์ ๊ฐ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ ๋, ํจ์์ ์คํ์ด ์ข ๋ฃ๋ ํ ์คํ๋๋ ํด๋ก์
- ํ๋ผ๋ฏธํฐ ํ์ ์์ @escaping ์ด๋ผ๋ ํค์๋๋ฅผ ๋ช ์ํด์ผ ํจ
- ์ด์ค์ผ์ดํ ํด๋ก์ ์์๋ self๋ฅผ ๋ช ์์ ์ผ๋ก ์ธ๊ธํด์ผ ํจ
- ์ด์ค์ผ์ดํ ํด๋ก์ ๊ฐ ์ฌ์ฉ๋๋ ์๋ก๋ ๋น๋๊ธฐ๋ก ์คํ๋๋ HTTP Request CompletionHandler์ด ์์
var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
completionHandlers.append(completionHandler)
}
Non-Escaping Closure
- ํจ์ ๋ด๋ถ์์ ์ง์ ์คํํ๊ธฐ ์ํด์๋ง ์ฌ์ฉ
- ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ํด๋ก์ ๋ฅผ ๋ณ์๋ ์์์ ๋์
ํ ์ ์์
- Non-escaping ํด๋ก์ ๊ฐ ๋ณ์๋ ์์์ ํ ๋น๋๋ฉด ํด๋ก์ ๊ฐ ์๋ ๋ฒ์ ๋ฐ์์ ์ ์ฅ ๋ฐ ์คํ๋ ์ ์์ผ๋ฏ๋ก ์์ํ์ง ๋ชปํ ๋์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ์ ๊ฐ๋ฅ
func outer(closure: () -> ()) {
var i = closure // @escaping์ผ๋ก ํ์
์ถ๋ก๋จ, ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์
var j: () -> () = closure // ํ์
๋ช
์, ์ค๋ฅ ๋ฐ์
}
- ์ค์ฒฉ ํจ์์์ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ค์ฒฉํจ์๋ฅผ ๋ฆฌํดํ ์ ์์
func outer(closure: () -> ()) -> () -> () {
func inner() {
closure()
}
return inner
}
print(outer {
print("1")
})
func outer() -> (){
private func ii() {
print(1)
}
return ii()
}
print(outer())
- ํจ์์ ์คํ ํ๋ฆ์ ํ์ถํ์ง ์์, ํจ์๊ฐ ์ข ๋ฃ๋๊ธฐ ์ ๋ฌด์กฐ๊ฑด ์คํ๋์ด์ผ ํจ
Non-Escaping Closure ์ Escaping Closure
- ์ปดํ์ผ๋ฌ์ ํผํฌ๋จผ์ค์ ์ต์ ํ ๋๋ฌธ์ escaping, non-escaping ํด๋ก์ ๋ฅผ ๋๋ ์ ์ฌ์ฉ
- non-escaping ํด๋ก์ ๋ ์ปดํ์ผ๋ฌ๊ฐ ํด๋ก์ ์ ์คํ์ด ์ธ์ ์ข ๋ฃ๋๋์ง ์๊ธฐ ๋๋ฌธ์, ๋์ ๋ฐ๋ผ ํด๋ก์ ์์ ์ฌ์ฉํ๋ ํน์ ๊ฐ์ฒด์ ๋ํ retain, release ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ์๋ตํด ๊ฐ์ฒด์ ๋ผ์ดํ์ธ์ดํด(life-cycle)์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
- esacping ํด๋ก์ ๋ ํจ์ ๋ฐ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ํด๋ก์ ๊ฐ ํจ์ ๋ฐ์์๋ ์ ์ ํ ์คํ๋๋ ๊ฒ์ ๋ณด์ฅํ๊ธฐ ์ํด, ํด๋ก์ ์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ๋ํ ์ถ๊ฐ์ ์ธ ์ฐธ์กฐ์ธ์ดํด(reference cycles) ๊ด๋ฆฌ ๋ฑ์ ํด์ค์ผ ํจ
- ์ปดํ์ผ๋ฌ์ ํผํฌ๋จผ์ค์ ์ต์ ํ์ ์ํฅ์ ๋ผ์น๊ธฐ ๋๋ฌธ์ Swift์์๋ ํ์ํ ๋๋ง escaping ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ตฌ๋ถ
๋ฐ์ํ
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 2์ฃผ์ฐจ - DP (0) | 2023.09.14 |
---|---|
[์ฝ๋ํธ๋ฆฌ] ์ฝ๋ํธ๋ฆฌ ๋ธ๋ก๊ทธ ์ฑ๋ฆฐ์ง (0) | 2023.09.12 |
[Swift] ๋ฐฑ์ค 1874๋ฒ - ์คํ ์์ด (0) | 2023.03.29 |
[Swift] ๋ฐฑ์ค 10773๋ฒ - ์ ๋ก (1) | 2023.03.29 |
[Swift] ๋ฐฑ์ค 1406๋ฒ - ์๋ํฐ (0) | 2023.03.27 |