-
[Swift] - Capturing Values by Closures (๊ฐ์ ์บก์ฒํ๋ ํด๋ก์ )iOS/๐ Swift 2021. 5. 7. 15:49
ํด๋ก์ ๋ ์ค์ฝํ ๋ฐ์ ๊ฐ์ ์ ๊ทผํ ๋ ๊ฐ์ ์บก์ฒํฉ๋๋ค.
ํด๋ก์ ์๋ Named clousure ๊ณผ Unnamed closure ๊ฐ ์์ง๋ง, ์ฌ๊ธฐ์๋ Unnamed closure ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
์ฐธ๊ณ ๋ก Named clousure ์ค global function ๋ ๊ฐ์ ์บก์ฒํ์ง ์์ต๋๋ค.
๊ฐ์ ์บก์ฒํ๋ค๋ ์๋ฏธ๋, ๊ฐ์ ์ฐธ์กฐ๋ฅผ ํ๋ํ๋ค๋ ๋ป์ ๋๋ค.
๋ฐ๋ผ์ ์ฐธ์กฐ๋ ๊ฐ์ ํด๋ก์ ์ค์ฝํ ๋ด๋ถ์์ ๋ณ๊ฒฝ๋๋ฉด, ์ค์ ๊ฐ๋ ๋ณ๊ฒฝ๋ฉ๋๋ค.
var count: Int = 0 print(count) // "0" var closure = { count += 1 // ์ค์ฝํ ์ธ๋ถ์ ๊ฐ(count)์ ์ ๊ทผํ์์ผ๋ฏ๋ก, ์ฐธ์กฐ๋ฅผ ํ๋ํ์์ต๋๋ค. } print(count) // "0" :::: ํด๋ก์ ๋ฅผ ์ ์ธ๋ง ํ์๋ฟ, ํธ์ถํ์ง๋ ์์์ต๋๋ค. closure() print(count) // "1"
๋์ ๊ฐ์ด ๊ฐ ํ์ ์ธ์ง, ์ฐธ์กฐ ํ์ ์ธ์ง๋ ์๊ด์์ต๋๋ค.
๋ค๋ง ์ฐธ์กฐ ํ์ ์ ์ฐธ์กฐ๋ฅผ ํ๋ํ๋ค๋ฉด, reference count ๋ฅผ ์ฆ๊ฐ์ํค๊ธฐ ๋๋ฌธ์, Strong Reference Cycle ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ARC ์ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ์ ๋๋ก ํ ๋นํด์ (deallocated) ๋์ง ์์ต๋๋ค.
์ด๊ฒ์ ํด๋ก์ ์บก์ฒ ๋ฆฌ์คํธ๋ฅผ ํตํด ๊ด๋ฆฌํด์ผํฉ๋๋ค.
๐ก ์ถ๊ฐ ์์ฉ
class myClass { var handler: () -> () }
handler ์์ฑ์ ๋ค๋ฅธ ํด๋์ค์์ ์ ๋ฌ ๋ฐ์ ํด๋ก์ ๋ก ์ด๊ธฐํํ๋ฉด, ๊ทธ ํด๋ก์ ๋ด๋ถ์ ์บก์ฒ๋ ์ฐธ์กฐ (๋ค๋ฅธ ํด๋์ค์ ์ฐธ์กฐ) ๋ ์ ๋ฌ๋ฐ๊ฒ ๋๋ค.
์ด ํจ์์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ์ด์ฉํ ํต์ฌ ์์ด๋์ด๋ฅผ ์์ฉํด์ reactive-programming ์ ๊ตฌํํ ์ ์๋ค.
๋!
๐ค๐ข[์ฐ์งฑ์ iOS ๋ธ๋ก๊ทธ]๐ต๐ป
iOS๋ฅผ ๊ณต๋ถํ๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ์ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค.'iOS > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Extensions ์ด์ ๋ฆฌ (์์ ์ค) (2) 2021.05.27 [Swift] ํ๋กํ ์ฝ ์ด์ ๋ฆฌ (0) 2021.05.22 [Swift] ์ ๋ ํฐ(Selector)๋? (2) 2021.05.02 [Swift] - defer ๋ฌธ์ด๋? (0) 2021.04.29 [Swift] - ์์ (Inheritance) (0) 2021.04.21