상세 컨텐츠

λ³Έλ¬Έ 제λͺ©

[ Swift 기초 문법 ] ν΄λ‘œμ €(Closure)

🍎 iOS/Swift

by AHN.Jihyeon 2024. 6. 25. 22:14

λ³Έλ¬Έ

 


 

πŸ”Ž  1 . ν΄λ‘œμ €(Closure)


ν΄λ‘œμ €μ™€ ν•¨μˆ˜μ˜ κΈ°λŠ₯은 동일 ν•˜λ‹€. ν΄λ‘œμ €λŠ” 이름이 μ—†λŠ” ν•¨μˆ˜λ‘œ ν•¨μˆ˜λ³΄λ‹€ μ’€ 더 큰 κ°œλ…μ΄λΌκ³  보면 λœλ‹€. 

 

μŠ€μœ„ν”„νŠΈλŠ” 일급 객체둜 μ·¨κΈ‰ν•œλ‹€. (ν”„λ‘œν† μ½œλ„ 일급객체)

ν•¨μˆ˜μ™€ ν”„λ‘œν† μ½œλ„ νƒ€μž…μœΌλ‘œ μ·¨κΈ‰ν•œλ‹€. 

→ ν•¨μˆ˜λ„ λ³€μˆ˜μ— ν• λ‹Ή κ°€λŠ₯

 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ ν•¨μˆ˜λ₯Ό νŒŒλΌλ―Έν„°λ‘œ 전달 κ°€λŠ₯

 ν•¨μˆ˜μ—μ„œ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ κ°€λŠ₯

 

  • ν•¨μˆ˜λŠ” λ‹€λ₯Έ μ½”λ“œμ—μ„œ ν˜ΈμΆœν•  λ•Œ ν•¨μˆ˜λͺ…μœΌλ‘œ ν˜ΈμΆœν•œλ‹€. 
  • ν΄λ‘œμ €λŠ” 이름이 μ—†λŠ” ν•¨μˆ˜λ‘œ 이름이 없이도 ν˜ΈμΆœν•  수 μžˆλ‹€. 
    -> ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œ νŒŒλΌλ―Έν„°μ— ν΄λ‘œμ € ν˜•νƒœλ‘œ μ „λ‹¬ν•˜κΈ° λ•Œλ¬Έ
    -> ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œ νŒŒλΌλ―Έν„°λ‘œ ν΄λ‘œμ €λ₯Ό μ •μ˜ν•˜λ©΄μ„œ λ°”λ‘œ 전달할 수 μžˆλ‹€. λ”°λΌμ„œ ν•¨μˆ˜λͺ…이 ν•„μš”ν•˜μ§€ μ•Šλ‹€!!!

 

 

 

 

πŸ”Ž  2. ν΄λ‘œμ € ꡬ쑰 및 μΆ•μ•½ 


🌟 ν•¨μˆ˜ ν˜•νƒœμ—μ„œ ν΄λ‘œμ € λ§Œλ“€κΈ° 🌟  

//ν›„ν–‰(Trailing) ν΄λ‘œμ €
closureParamFunction(closure: {
    print("ν•¨μˆ˜ μ‹€ν–‰")
})

closureParamFunction(closure:) {
    print("ν•¨μˆ˜ μ‹€ν–‰")
}

closureParamFunction() {
    print("ν•¨μˆ˜ μ‹€ν–‰")
}

closureParamFunction() {
    print("ν•¨μˆ˜ μ‹€ν–‰")
}

closureParamFunction {
    print("ν•¨μˆ˜ μ‹€ν–‰")
}



//νŒŒλΌλ―Έν„° μƒλž΅
closureParamFunction(closure: { str in
    return str.count
})


closureParamFunction{ $0.count }

 

 

 

return이 있기 λ•Œλ¬Έμ— 아웃풋도 μƒλž΅ κ°€λŠ₯. 

 

 

 

ν•œ 쀄일 경우 return μƒλž΅ κ°€λŠ₯

 

 

 

λ§€κ°œλ³€μˆ˜ νƒ€μž… 좔둠이 κ°€λŠ₯ν•˜λ‹€λ©΄ νƒ€μž… μƒλž΅ κ°€λŠ₯

 

 

 

( ) -> ( ) : 인풋과 아웃풋이 μ—†λ‹€λ©΄ μƒλž΅ κ°€λŠ₯  

 

 

 

 

 


 

ν΄λ‘œμ € μžμ²΄λ‘œλŠ” 아무 것도 ν•  수 μ—†λ‹€.  λ³€μˆ˜μ— ν• λ‹Ή ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. 

 

 

 

ν•¨μˆ˜λŠ” λ³€μˆ˜μ— ν• λ‹Ή κ°€λŠ₯ν•˜λ‹€.  

func addStr(param: String) -> String {
    return param + "!!"
}

//ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ή
var str = addStr //νƒ€μž… λͺ…μ‹œ: var clo: (String) -> String = addStr

//addStr(param: "μ•ˆλ…•ν•˜μ„Έμš”")
//μ›λž˜λŠ” ν•¨μˆ˜μ— νŒŒλΌλ―Έν„°λ₯Ό λ„£μ–΄μ£Όμ–΄μ•Ό ν•˜μ§€λ§Œ ν˜ΈμΆœν•  λ•Œ νŒŒλΌλ―Έν„°κ°€ λ“€μ–΄κ°€κΈ° λ•Œλ¬Έμ— () μƒλž΅ κ°€λŠ₯

str("μ•ˆλ…•")

 

 

같은 κ°œλ…μœΌλ‘œ ν΄λ‘œμ €λ„ λ³€μˆ˜μ— ν• λ‹Ή κ°€λŠ₯. 

//ν΄λ‘œμ €λ₯Ό λ³€μˆ˜μ— ν• λ‹Ή
let clo = {(param: String) -> String in
    return param + "!!"
}

//ν΄λ‘œμ € μ‹€ν–‰
clo("μ•ˆλ…•")

 

 

 

 

 

 

 

πŸ”— Reference 


 

κ΄€λ ¨κΈ€ 더보기