Closed Glsme closed 1 year ago
@escaping
ย ๋ฅผ ๋ถ์ด๋ฉด ํ์ถ ํด๋ก์ ๋ก ๋ฐ๊ฟ ์ ์๊ณ , ํ์ถ ํด๋ก์ ๋ ํด๋น ํจ์๊ฐ ๋ฐํ๋ ํ ์คํ๋๋ฏ๋ก, ์ผ๋ฐ์ ์ธ ํด๋ก์ ์ ๋ฌ๋ฆฌ ํจ์ ์ธ๋ถ์ ์ ์ฅํ๊ฑฐ๋ ๋ค๋ฅธ ์ค๋ ๋์์ ์คํ ๊ฐ๋ฅ ๐ข๋จผ์ ํด๋ก์ ธ๋ ์ ์ฐ๋ ๊ฒ์ผ๊น? ๋น๋๊ธฐ ์์ ์์ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค. ๋น๋๊ธฐ์ ์ธ ์ด๋ค ํ ์คํฌ๊ฐ ๋๋๊ณ ๋์ ์ํํด์ผ ํ ๋ธ๋ก์ ํด๋ก์ ธ๋ก ์์ฑํ๋ฉด ํธ๋ฆฌํ๋ค. ํด๋ก์ ธ๋ ๋น๋๊ธฐ ์์ ์์ ๋ง์ด ์ฌ์ฉ๋๋๋ฐ, ํด๋ก์ ๋ฅผ ํตํด ๋น๋๊ธฐ ์ฝ๋ฐฑ์ ์์ฑํ๋ ๊ฒฝ์ฐ ํ์ฌ ์ํ๋ฅผ ๋ฏธ๋ฆฌ ํ๋ํด ๋์ง ์์ผ๋ฉด ์ค์ ๋ก ํด๋ก์ ธ์ ๊ธฐ๋ฅ์ ์คํํ๋ ์๊ฐ, ์์๋ ๋ณ์๊ฐ ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ ํ์ํ ๊ฒ์ด ๋ฐ๋ก ํด๋ก์ ธ์ ๊ฐ ์บก์ณ ๊ธฐ๋ฅ์ด๋ค.
ํด๋ก์ ธ๋ ์ต๋ช ํจ์๋ ํด๋ก์ ธ ๋ด๋ถ์์ ์ธ๋ถ๋ณ์์ธ num์ด๋ผ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. num์ ๊ฐ์ ํด๋ก์ ธ ๋ด๋ถ์ ์ผ๋ก ์ ์ฅํ๊ณ ์๋๋ฐ, ์ด๊ฒ์ ํด๋ก์ ธ์ ์ํด num์ ๊ฐ์ด ์บก์ณ ๋์๋ค ๋ผ๊ณ ํํํจ.
ํด๋ก์ ธ์ ๊ฐ ์บก์ณ ๋ฐฉ์ - ํด๋ก์ ธ๋ ๊ฐ์ ์บก์ณํ ๋, value / reference ํ์ ์ ๊ด๊ณ์์ด reference captureํ๋ค. ๋ณ์๋ฅผ ํด๋ก์ ธ ๋ด๋ถ์ ์ผ๋ก ์ ์ฅํ๋ค๊ณ ํ์. ํด๋ก์ ธ๋ value / reference ํ์ ์ ๊ด๊ณ์์ด ์บก์ณํ๋ ๊ฐ๋ค์ ์ฐธ์กฐํจ. reference capture๋ผ๊ณ ํจ.
ํ์ถ ํด๋ก์ ธ? ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ ํด๋ก์ ธ๊ฐ ํจ์๊ฐ ๋ฐํ๋ ํ ์คํ๋๋ ํด๋ก์ ธ๋ฅผ ์๋ฏธํ๋ค. ์ ๋ฌ ๋ฐ์ ํด๋ก์ ธ๊ฐ ํด๋ก์ ธ ํจ์ ์ธ๋ถ๋ก ๋ค์ ๋ฐํ๋๊ฑฐ๋ ์ธ๋ถ ๊ธ๋ก๋ฒ ๋ณ์์ ์ ์ฅ๋๋ ๊ฒฝ์ฐ ์ด๊ฒฝ์ฐ @escaping์ ๋ถ์ฌ์ค์ผ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด complie ํ๋ค.
ํด๋ก์ ๋ ์ฝ๋์์ ์ฌ์ฉ๋๋ฉฐ, ๋ค์ํ๊ฒ ์ ๋ฌ๋ ์ ์๋ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ ๋ธ๋ก. Swift์ ํด๋ก์ ๋ ์ค๋ธ์ ํฐ๋ธ C์ C์ ๋ธ๋ก, ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค์ ์ ์ฌ.
ํด๋ก์ ๋ ํด๋ก์ ๊ฐ ์ ์๋ ๋งฅ๋ฝ์์ ์์์ ๋ณ์์ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๊ณ ์บก์ณํ ์ ์๋ค.
{ (parameters) -> return type in
statements
}
ํจ์์ ํด๋ก์ ๋ ์ฐธ์กฐ ํ์ ํด๋ก์ ๋ฅผ ์๋ก ๋ค๋ฅธ ์์, ๋ณ์์ ํ ๋นํ๋ฉด ๋์ผํ ํด๋ก์ ๋ฅผ ์ฐธ์กฐํ๊ณ ์ฐธ์กฐ ์นด์ดํธ๊ฐ ์ฆ๊ฐ.
ํ์ถ ํด๋ก์ ๋ ํจ์์ ๋ํ ์ธ์๋ก ์ ๋ฌ๋๋, ํจ์๊ฐ ๋ฐํ๋ ์ดํ์ ํธ์ถ๋๋ค. @escaping
ํค์๋๋ฅผ ํด๋ก์ ์์ ์ ์ด ์ฌ์ฉํ๋ค.
let completionHandler = () -> Void
func havingEscapingClosure(completionHandler: @escaping () -> Void) {
completionHandlers.append(completionHandler)
}
let closure = { () -> () in
print("Closure")
}
func doSomething(closure: () -> ()) {
closure()
}
func doSomething() -> () -> () {
}
ํจ์ ์ธ์๋ก ํด๋ก์ ๊ฐ ์ ๋ฌ๋์ง๋ง, ํจ์๊ฐ ๋ฐํ๋ ์ดํ์ ์คํ๋๋ ํด๋ก์ ์ด๋ค.
@escaping
ํค์๋๋ฅผ ๋ถ์ฌ์ผ ํ๋ค.Closure๋ ์ต๋ช ํจ์์ด๋ฉฐ ํจ์์ด๊ธฐ์ 1๊ธ ๊ฐ์ฒด ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
๋ฐํ ํ์ ์ ์๋ตํ ์ ์์ผ๋ฉฐ ๋จ์ถ ์ธ์ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ Closure ์ฝ๋ ๋ฐฉ์์ ์ค์ผ ์ ์๋ค.
์ ๋ฌ์ธ์๋ก ๋ฐ์ ํด๋ก์ ๊ฐ ๋งค์๋ ์คํ์ด ์ข ๋ฃ๋ ํ์ ํธ์ถ๋๋ ๊ฒฝ์ฐ, ํ์ถ ํด๋ก์ ๋ผ๊ณ ํจ.
๐๏ธ ๋ง๊ฐ์ผ
2023.01.22
๐ ์ฐธ์ฌ์
โ ๏ธ ๋ง์ง๋ง์ผ๋ก ๋ต๋ณ ๋จ ์ฌ๋์ด ์ด์ close ํ๊ณ ๋ฆฌ๋๋ฏธ์ ํญ๋ชฉ ์ ๋ฐ์ดํธ ํด์ฃผ์ธ์.