ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

img

๐Ÿ›  Closure๋ฅผ ์ด์šฉํ•œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ์ดˆ๊ธฐํ™”๋ฅผ ๊ตฌํ˜„์„ ์ƒ๊ฐํ•ด๋ณด๊ธฐ

 

๐Ÿ’ฌ Closure๋ฅผ ์ด์šฉํ•œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ์ดˆ๊ธฐํ™”๋ฅผ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

 

  • ํ•™์Šต๊ณผ์ • ์ค‘ ๊ตฌํ˜„๋œ ํด๋กœ์ €๋ฅผ ์ด์šฉํ•œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉฐ ํ•œ๊ฐ€์ง€ ์˜๋ฌธ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์˜๋ฌธ์— ๋Œ€ํ•ด ๋งํ•ด๋ณด๊ธฐ ์ „์—, ์šฐ์„  ๊ตฌํ˜„๋œ ๊ตฌ์กฐ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
    let/var propertyName: Type = {
      // Logics
      return returnValue
    }

    ์œ„์˜ ์ถ”์ƒํ™”๋œ ๊ตฌ์กฐ๋ฅผ ์˜ˆ์‹œ๋กœ ๊ตฌ์ฒดํ™” ์‹œ์ผœ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
    var age: Int = {  
        print("๋‚˜์ด๊ฐ€ ๋ช‡์‚ด์ž…๋‹ˆ๊นŒ?")
        return 10
    }()

    ์œ„์™€ ๊ฐ™์ด ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ™‹ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์™€์˜ ์ฐจ์ด

 

  • ์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ํ•œ๊ฐ€์ง€ ์˜๋ฌธ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ์‚ฐํ”„๋กœํผํ‹ฐ์™€ ๋ชจ์–‘์ด ๋น„์Šทํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์™€ ์œ„์˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ชฉ์ ์—์„œ ์ฐจ์ด๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
  • ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฒฝ์šฐ ์—ฐ์‚ฐ ์ž์ฒด๋ฅผ ๋‹ด๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡๋ฒˆ์„ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•ด๋„ ๊ณ„์† ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ๊ฐ’์ด ๋ฐ”๋€๋‹ค๊ณ  ํ•ด๋„ ๋ชฉ์ ์ด '์—ฐ์‚ฐ' ๊ทธ ์ž์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.์ด ๋กœ์ง์—์„œ ํด๋กœ์ €๋กœ ๊ตฌํ˜„๋œ age ๋ณ€์ˆ˜๊ฐ€ ๋ณ€ํ•  ๊ฒฝ์šฐ ageCaculator๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’ ์—ญ์‹œ ๋ฐ”๋€” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
    ๊ทธ์— ๋ฐ˜๋ฉด์— ํด๋กœ์ €๋กœ ์ •์˜๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณด๋ฉด ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋กœ '๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ'์ด ๋ชฉ์ ์ธ ํ”„๋กœํผํ‹ฐ์ด๋ฏ€๋กœ ํด๋กœ์ €๋ฅผ ํ•œ๋ฒˆ๋งŒ ์—ฐ์‚ฐํ•ด์„œ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ๋Š” ๋‹ค์‹œ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•ด๋„ ์ตœ์ดˆ์˜ ์‹คํ–‰์‹œ ์ €์žฅ๋œ ๊ฐ’๋งŒ์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  • var ageCaculator: Int {
        get {
            print("์ œ ๋‚˜์ด๋Š” \(age)์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.")
            return age
        }
    }

 

๐ŸŽฏ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒ๊ฐ๋“ค

 

๐Ÿง Q1. ํด๋กœ์ €๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹น ๊ฐ€๋Šฅํ•œ๋ฐ () ์—†์ด ํด๋กœ์ € ๊ทธ ์ž์ฒด๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?

 

  • ์šฐ์„  ํด๋กœ์ €์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ์ž‡๋Š” '( )'์˜ ์กด์žฌ ์˜๋ฏธ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๊ด„ํ˜ธ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ € ํด๋กœ์ €๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์˜ฌ๋ผ๊ฐ€ ์‹คํ–‰์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฌผ์„ ํ”„๋กœํผํ‹ฐ์— ์ €์žฅํ•œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ '์‹คํ–‰'์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋กœ์ € ์ž์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์„๊นŒ ์ƒ๊ฐํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๋ก : ๊ด„ํ˜ธ๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    var age: Int = { // ์—๋Ÿฌ ๋ฐœ์ƒ
        print("๋‚˜์ด๊ฐ€ ๋ช‡์‚ด์ž…๋‹ˆ๊นŒ?")
        return 10
    }

    return๊ฐ’์ด ์กด์žฌํ•˜๋Š”๋ฐ ๋ฉ”์†Œ๋“œ์˜ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. PlayGround์—์„œ ์—ฌ๊ธฐ์— ๋Œ€ํ•œ ๋ณด์™„์ฑ…์œผ๋กœ ์ถ”์ฒœ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    var age = { () -> Int in  
        print("๋‚˜์ด๊ฐ€ ๋ช‡์‚ด์ž…๋‹ˆ๊นŒ?")
        return 10
    }
    age์˜ ๊ฐ’์— ํด๋กœ์ € { () -> Int }, ์ฆ‰ ์ž…๋ ฅ๊ฐ’์ด ์—†๊ณ  ๋ฐ˜ํ™˜๊ฐ’์ด Intํ˜•์ธ ํด๋กœ์ €๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์‹ค ์—์ดˆ์— ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ๊ณผ ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜(Q3)์—์„œ ์ถ”๊ฐ€๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
    ๊ณ ๋ฏผ์˜ ์ถœ๋ฐœ์ ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํด๋กœ์ €๋Š” ์ผ๊ธ‰๊ฐ์ฒด์ด๋ฏ€๋กœ ๋‹น์—ฐํžˆ ๋ณ€์ˆ˜/์ƒ์ˆ˜ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด return์ด ์—†๋Š” ๋กœ์ง์ด๋ผ๋ฉด ๋ง์ด์ฃ 
    let age = {
      print("๋‚˜์ด๋ฅผ ๋จน์–ด๊ฐ‘๋‹ˆ๋‹ค..")
    }

    ๊ทธ๋Ÿฐ๋ฐ return์ด ๋“ฑ์žฅํ•˜๋Š” ์ˆœ๊ฐ„ ๊ทธ ํด๋กœ์ €๋Š” ๋‹จ์ˆœํ•œ ํด๋กœ์ €๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ํ•จ์ˆ˜์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์ด ํ•จ์ˆ˜๋ฅผ ๋™์ž‘์‹œํ‚จ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ๊ด„ํ˜ธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿง Q2. ํด๋กœ์ €๋ฅผ ์ด์šฉํ•ด ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ํƒ€์ž… ๋ช…์‹œ๊ฐ€ ์•ˆ๋˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ

 

  • Swift๋Š” ํƒ€์ž…์ด ๋ช…๋ฐฑํ•  ๊ฒฝ์šฐ ํƒ€์ž… ์ถ”๋ก ์„ ํ†ตํ•ด ๋ณ€์ˆ˜/์ƒ์ˆ˜์˜ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž… ๋ช…์‹œ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์˜ˆ์‹œ์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    ์ œ๊ฐ€ ์ถ”์ธกํ•ด๋ณธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ ํด๋กœ์ €๋ฅผ ์ƒ์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ์—๋Š” ํด๋กœ์ € ์ž์ฒด๊ฐ€ ์ƒ์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํด๋กœ์ €์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์— ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์€ ์‰ฝ๊ฒŒ ๋งํ•ด ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์— ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ์ƒ์ˆ˜์™€ ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐœ๋…์ธ ๊ฒƒ์ด์ฃ . ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฌผ์˜ ํƒ€์ž…์€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ํƒ€์ž…์„ ๋‹ด์„ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์˜ ํƒ€์ž…์ด ์ด๊ฒƒ๊ณผ ์ผ์น˜ํ•ด์•ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ ํ”„๋กœํผํ‹ฐ์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•ด ๊ฒฐ๊ณผ๋ฌผ์„ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ , ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์—ฌ๊ธฐ์— ์ €์žฅํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • // ํƒ€์ž…์ด ๋ช…์‹œ๊ฐ€ ์•ˆ๋˜๋ฉด ์ถ”๋ก ์ด ๋ถˆ๊ฐ€๋Šฅ
    let test = { // ์—๋Ÿฌ๋ฐœ์ƒ
        print("test")
        return 10
    }()

๐Ÿง Q3. ์•„์˜ˆ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด ๊ทธ ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ธฐ

 

    • Q1์—์„œ ์ œ๊ธฐํ–ˆ๋˜ ์˜๋ฌธ์„ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
      ๋‘ ๋ณ€์ˆ˜์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”? ๋‹ต์€ print๋ฌธ์œผ๋กœ ๋‘ ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      print(age) 
      // ๋‚˜์ด๊ฐ€ ๋ช‡์‚ด์ž…๋‹ˆ๊นŒ?
      // 10
      
      print(age2)
      // (Function)

      ์‚ฌ์‹ค ๊ต‰์žฅํžˆ ๋‹น์—ฐํ•œ ์ฐจ์ด์ธ๋ฐ ์ƒ๊ฐ์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ์—์„œ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. age์˜ ๋ชฉ์ ์€ "์ € ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ ๊ฒฐ๊ณผ๋ฌผ์„ age๋ผ๋Š” Int ๋ณ€์ˆ˜์— ๋‹ด์„๊ฑฐ์•ผ"๋ผ๋Š” ๊ฒƒ์ด๊ณ  age2์˜ ๋ชฉ์ ์€ "age2์—๋‹ค๊ฐ€ ์ € ํ•จ์ˆ˜ ํ˜•ํƒœ์˜ ํด๋กœ์ €๋ฅผ ๋‹ด์„๊ฑฐ์•ผ" ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๋ฌผ์ด ํ•จ์ˆ˜๋‹ค! ๋ผ๊ณ  ๋งํ•ด์ฃผ๋Š” ๊ฒƒ์ด์ฃ . age2๋ฅผ ์กฐ๊ธˆ ๋ณ€ํ˜•ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      ์ฆ‰, age2์—๋Š” ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅ ๊ฒฐ๊ณผ๊ฐ€ 10์ด ์•„๋‹ˆ๋ผ (ํ•จ์ˆ˜) ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์œ„์˜ ์ฝ”๋“œ์—์„œ getAge ๋’ค์— ๊ด„ํ˜ธ๋ฅผ ๋ถ™์ธ๋‹ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์ด์•ผ๊ธฐ ํ–ˆ๋˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ํด๋กœ์ €๋กœ ์ •์˜ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— age2๋Š” ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— ์ž‘๋™๋˜์–ด 10์ด๋ผ๋Š” ๊ฐ’์„ ๊ณ„์† ๋‹ด๊ณ ์žˆ๋Š” ์ €์žฅ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
      var age2 = getAge()
      
      func getAge()-> Int {  
          print("๋‚˜์ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”")
          return 10
      }
      
      print(age2) 
      // ๋‚˜์ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”
      // 10

 

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG more
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ