ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋Œ“๊ธ€

์–ด์ œ๋ณด๋‹ค ๋ฐœ์ „ํ•œ ๋‚˜