๐ 1๏ธโฃ ํจ์์ ํด๋ก์ ์ ๊ด๊ณ
ํจ์๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ฝ๋ ๋ธ๋ก์ ๋ปํ๋ ๊ฑฐ๋ฉด
ํด๋ก์ ๋ ์ฝ๋๋ธ๋ก์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ๋ฌํ๋๋ฐ์ ์ง์ค (ํ๋ผ๋ฏธํฐ๋ก ์ฝ๋๋ธ๋ก์ ์ ๋ฌ)
ํจ์ function = named closure
ํด๋ก์ Closure = unnamed closure , ์ฆ ์ด๋ฆ ์๋ ํจ์๋ผ๊ณ ๋ ๋งํ ์ ์๋ค.
ํจ์
func sayHello() {
print("์๋
!")
}
sayHello() // ์คํํ๋ฉด "์๋
!" ์ถ๋ ฅ
ํด๋ก์
let greeting = {
print("์๋
!")
}
greeting() // ์คํํ๋ฉด "์๋
!" ์ถ๋ ฅ
โ ์ฐจ์ด์
- func ํค์๋ ๋์ {}(์ค๊ดํธ)๋ฅผ ์ฌ์ฉํด ์ด๋ฆ ์์ด ํจ์์ฒ๋ผ ์๊ธด ์ฝ๋ ๋ธ๋ก์ ๋ง๋ค์์ด.
- ์ด๋ ๊ฒ ๋ง๋ ์ด๋ฆ ์๋ ํจ์(์ฝ๋ ๋ธ๋ก)๋ฅผ ๋ณ์ greeting์ ์ ์ฅํ ๊ฒ!
- ์ดํ์ greeting()์ ์คํํ๋ฉด ํจ์์ฒ๋ผ ๋์ํด!
โก๏ธ ์ฆ, ํด๋ก์ ๋ ์ด๋ฆ ์๋ ํจ์์ฒ๋ผ ๋์ํ๋ ์ฝ๋ ๋ธ๋ก์ด์ผ!
๐ 2๏ธโฃ ํด๋ก์ ์ ๊ธฐ๋ณธ ํํ
ํด๋ก์ ์ ๊ธฐ๋ณธ ํํ๋ ๋ค์๊ณผ ๊ฐ์.
{ (๋งค๊ฐ๋ณ์) -> ๋ฐํํ์
in
์คํํ ์ฝ๋
}
๋ค์ชฝ์ด ์ค์ ๋ก ์คํ๋๋ ์ฝ๋ ๋ถ๋ถ์ด์ผ!
๐ ์์ : ๋ง์ ํ๋ ํด๋ก์
let add = { (a: Int, b: Int) -> Int in
return a + b
}
let result = add(3, 5) // 3 + 5 = 8
print(result) // ์ถ๋ ฅ: 8
โ ์ค๋ช
- (a: Int, b: Int) -> Int ๐ ๋ ๊ฐ์ ์ ์๋ฅผ ๋ฐ์์ ์ ์๋ฅผ ๋ฐํํ๋ ํด๋ก์ ์ผ.
- {} ์์์ a + b๋ฅผ ๊ณ์ฐํ๊ณ return์ ์ฌ์ฉํด ๋ฐํํด.
- let add = {} ๐ ์ด ํด๋ก์ ๋ฅผ ๋ณ์ add์ ์ ์ฅํ์ด.
- add(3, 5) ๐ ๋ง์น ํจ์์ฒ๋ผ (3, 5)๋ฅผ ๋ฃ์ด ํธ์ถํ ์ ์์ด!
โก๏ธ ์ฆ, ํด๋ก์ ๋ "์ด๋ฆ ์๋ ํจ์"์ด๊ธฐ ๋๋ฌธ์ ๋ณ์์ ์ ์ฅํด์ ์ฌ์ฉํ ์ ์์ด!
๐ 3๏ธโฃ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ ์ด์
ํด๋ก์ ๋ ์ฝ๋๋ฅผ ๋ณ์์ฒ๋ผ ์ ์ฅํ๊ณ ์ ๋ฌํ ์ ์๋ค๋ ์ ์์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ ์์ด!
ํนํ, ์ฝ๋ฐฑ(callback) ํจ์๋ก ๋ง์ด ์ฌ์ฉ๋ผ.
๐ ์์ : ํด๋ก์ ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๊ธฐ
func executeClosure(action: () -> Void) {
action()
}
executeClosure(action: { print("ํด๋ก์ ์คํ!") }) // ์ถ๋ ฅ: "ํด๋ก์ ์คํ!"
โ ์ค๋ช
- executeClosure(action:) ๐ ๋งค๊ฐ๋ณ์๋ก ํด๋ก์ ๋ฅผ ๋ฐ๋ ํจ์
- () -> Void ๐ ๋งค๊ฐ๋ณ์๊ฐ ์๊ณ , ๋ฐํ๊ฐ๋ ์๋ ํํ์ ํด๋ก์ ๋ฅผ ๋ฐ์
- action() ๐ ์ ๋ฌ๋ฐ์ ํด๋ก์ ๋ฅผ ์คํ
- executeClosure(action: { print("ํด๋ก์ ์คํ!") }) ๐ ์คํํ๋ฉด "ํด๋ก์ ์คํ!"์ด ์ถ๋ ฅ๋จ
โก๏ธ ์ฆ, ํด๋ก์ ๋ ๋ค๋ฅธ ํจ์์ "์ฝ๋ ๋ธ๋ก"์ ๋๊ฒจ์ฃผ๋ ์ฉ๋๋ก๋ ์ฌ์ฉํ ์ ์์ด!
๐ 4๏ธโฃ ํด๋ก์ ๋ฅผ ๋ ์งง๊ฒ ์ฐ๋ ๋ฐฉ๋ฒ (ํํ ํด๋ก์ )
Swift์์๋ ํด๋ก์ ๋ฅผ ๊ฐ๋จํ๊ฒ ์ค์ฌ ์ธ ์ ์๋ ๋ฌธ๋ฒ์ด ์์ด!
executeClosure {
print("๋ ์งง์ ํด๋ก์ !")
}
โก๏ธ **"ํํ ํด๋ก์ (Trailing Closure)"**๋ผ๊ณ ํด์, ํจ์์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ํด๋ก์ ๋ผ๋ฉด,
๊ดํธ () ๋ฐ์์ {}๋ฅผ ์ฌ์ฉํด ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ด!
๐ ๐ ์ ๋ฆฌ: ํด๋ก์ (Closure)๋?
1๏ธโฃ ํด๋ก์ ๋ "์ด๋ฆ ์๋ ํจ์" ๊ฐ์ ์ฝ๋ ๋ธ๋ก์ด์ผ!
2๏ธโฃ ๋ณ์์ ์ ์ฅํด์ ๋์ค์ ์คํํ ์๋ ์์ด!
3๏ธโฃ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํด์, ํน์ ์ฝ๋ ์คํ์ ๋ฏธ๋ฆฌ ์ ํ ์๋ ์์ด!
4๏ธโฃ ์ฝ๋ฐฑ(callback) ํจ์๋ก ์์ฃผ ์ฌ์ฉ๋ผ!
5๏ธโฃ ํํ ํด๋ก์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ ์งง๊ฒ ์ธ ์ ์์ด!
'IT > Swift ๋ ธํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
029 TextFieldDelegate ์ซ์ ์ ๋ ฅ ๊ฒ์ฆ, guard๋ฌธ (0) | 2025.03.20 |
---|---|
011 Function Type, Closure Type, ํจ์์๋ฃํ, ํด๋ก์ ์๋ฃํ (0) | 2025.03.19 |
028 ํ ์คํธํ๋ Delegate (0) | 2025.03.18 |
009 Tuple ํํ (0) | 2025.03.17 |
008 ํจ์ function (0) | 2025.03.17 |