<TIL>
์ค๋์ ํด๋ก์ ์ ๋ํด์ ๊ณต๋ถํด๋ดค๋ค.
์ด์ ์ ๊ณต๋ถํ์๋๋ฐ, ํ์คํ๊ฒ ์ดํดํ๊ณ ๋์ด๊ฐ๊ฒ ์๋๋ผ์
๋ง์ ํด๋ก์ ์ ๋ํด์ ๋ง๋ก ์ค๋ช
ํ๋ ค๊ณ ๋ณด๋
๊น๋จน์ ๊ฒ ๊ฐ์๋ค.
(๊ณผ๊ฑฐ ํด๋ก์ ์ ๋ฆฌํ๋ ๋ด ์์ .. ๋ฐ๋ณด์ธ๊ฐ(?) ๋ง๋ํ ์์ด๋ฒ๋ฆผ)
3์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ์ฌํ_(2์ผ์ฐจ)_ํด๋ก์ & ๊ณ ์ฐจํจ์
์ค๋์ ์ฌํ ๊ฐ์๋ฅผ ๋ค ๋ค์๋๋ฐ, ์ญ์๋ ๋ฉ๋ถ..๐คฏ ํ ์ด๋ ค์์ง ๋๋..? ๊ทธ๋๋ ์ด์ ์ดํด ์ ๋ ํด๋ก์ ๊ฐ ์ค๋์ ๊ท์ ์ข ๋ค์ด์์ ๋คํ์ด์๋ค. ์ญ์ ๋ฌด์ง์ฑ์ผ๋ก ๊ณ์ ๋ณด๋ฉด ์ข ๋์์ง๋ ๊ฒ ๊ฐ์.
yegenie-coding.tistory.com
..ใ ใ ใ ใ ใ !!!!
์ค๋์ ํด๋ก์ ์ ๋ํด์ ์ ๋ฆฌํ๊ณ !!๐
์ฃผ๋ง์๋
โ๏ธ๊ณ ์ฐจํจ์(map, filter, reduce) _2024.04.21(์์ฑ์๋ฃ)
โ๏ธEscaping Closure _2024.04.28(์์ฑ์๋ฃ)
โ๏ธ ARC-2024.04.28(์์ฑ์๋ฃ)
์์ 3๊ฐ์ง์ ๋ํด์ ์ถ๊ฐ์ ์ผ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค!
Closure(ํด๋ก์ )
์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ func ํค์๋๋ฅผ ํตํด ์ด๋ฆ์ ๋ถ์๋ ํจ์๋
'Named Closure'๋ผ๋ ํด๋ก์ ์ด๋ค!
๋ค๋ง, ๊ทธ๋ฅ ํจ์๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ ๋ฟ์ด๋ค.
์ค๋ ์ ๋ฆฌํ ํด๋ก์ ๋ ๋ฐ๋ก 'Unnamed Closure'์ด๋ค.
(๋ณดํต ๊ทธ๋ฅ Closure(ํด๋ก์ )๋ผ๊ณ ๋ถ๋ฆ)
๋จผ์ , ํด๋ก์ ์ ๊ธฐ๋ณธ ํํ๋ถํฐ ์์๋ณด์!!
์์ ๊ฐ์ด ์ฌ์ฉํ๋ค!
(ํ๋ผ๋ฏธํฐ๋ ์๋ ์์์ฒ๋ผ ์ฌ๋ฌ ๊ฐ ๋ฃ์ ์ ์์)
let add: (Int, Int) -> Int
add = { (num1: Int, num2: Int) -> Int in
return num1 + num2
}
ํด๋ก์ ๋ฅผ ์ ์ฌ์ฉํด์ผํ ๊น?
์๋ง ์ฝ๋๋ฅผ ์น๋ฉด์ func ํจ์๋ฅผ ๊ต์ฅํ ๋ง์ด ๋ง๋ค์ด ๋ณด์์ ๊ฒ์ด๋ค.
ํจ์๋ฅผ ๋ง๋ค๋ฉด์ ๊ณ ๋ฏผ์ ๋ง์ดํ๋๊ฒ ๋ฐ๋ก 'ํจ์ ์ด๋ฆ ์ง๊ธฐ'์๋ค.๐
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ํด๋ก์ ์ด๋ค!
ํด๋ก์ ๋ '์ ๊น ์ฐ๊ณ ๋ฒ๋ฆด ํจ์'๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์์์ ์ธ๊ธํ 'Unnamed Closure'
์์ด ๊ทธ๋๋ก ์ด๋ฆ์๋ ํจ์์ด๋ค.
ํจ์๋ช
์ ๋ง๋ค์ง ์์๋ ๋๋ค!!๐คฉ
ํด๋ก์ ๋
์ด๋ฆ์๋ ์์ํจ์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ฉด์
๋งค๊ฐ๋ณ์ ๋ํ ๊ธฐ์กด์ ํจ์์ฒ๋ผ ํ์ฉํ ์ ์๋ค!
๊ทธ๋ผ ์ด์ ์์๋ฅผ ํตํด ์์ธํ ์์๋ณด์!!
์์ ์์์ฒ๋ผ ๋ํ๊ธฐ ํจ์๋ฅผ ํ ๋ฒ ๋ง๋ค์ด๋ณด๋ฉด?
func sumFunction(a: Int, b: Int) -> Int {
return a + b
}
var sumResult: Int = sumFunction(a: 4, b: 8)
print(sumResult) // 12
์ด์ ํด๋ก์ ๋ฅผ ํ์ฉํด ๋ณผ๊น์?
var sum:(Int, Int) -> Int = {(a: Int, b: Int) -> Int in
return a + b
}
sumResult = sum(4, 8)
print(sumResult) // 12
์ด๋ ๊ฒ sum()์์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฃ์ด ์ฌ์ฉํ ์ ์๋ค!
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด
ํจ์ ๋ํ ํด๋ก์ ์ด๋ฏ๋ก sum ๋ณ์์ ํจ์๋ฅผ ํ ๋นํ ์ ์๋ค.
sum = sumFunction(a: b:)
sumResult = sum(4, 8)
print(sumResult) // 12
๊ทธ๋ฆฌ๊ณ 'callback function(์ฝ๋ฐฑ ํจ์)'๋ก ํด๋ก์ ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
์ฌ์น์ฐ์ฐ ํจ์๋ก ์๋ฅผ๋ค๋ฉด,
let add: (Int, Int) -> Int
add = { (a: Int, b: Int) -> Int in
return a + b
}
let substract: (Int, Int) -> Int
substract = { (a: Int, b: Int) -> Int in
return a - b
}
let mulitply: (Int, Int) -> Int
mulitply = { (a: Int, b: Int) -> Int in
return a * b
}
let divide: (Int, Int) -> Int
divide = { (a: Int, b: Int) -> Int in
return a / b
}
์ด๋ ๊ฒ ์ฌ์น์ฐ์ฐ ํด๋ก์ ๋ฅผ ๋ง๋ค๊ณ !
// "method ๋ผ๋ ์ด๋ฆ์ผ๋ก ํด๋ก์ ๋ฅผ ๋๊ฒจ์ฃผ๊ฒ ๋ค!"๋ผ๋ ์๋ฏธ
func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
return method(a, b) // ํจ์ ์์์ ์ ๋ฌ๋ฐ์ ํด๋ก์ ๋ฅผ ํธ์ถ
}
calculate ํจ์ ์์ฑํ ๋ค์
var calculated: Int
calculated = calculate(a: 10, b: 20, method: add)
print(calculated) // 30
์ด๋ ๊ฒ calculated ๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค๊ณ ,
๋ง๋ค์ด ๋์ ๋ณ์์๋ค๊ฐ calculate ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค.
(method์๋ add๋ผ๋ ํด๋ก์ ๋ฅผ ์ ๋ฌ๋ฐ๊ธฐ)
์์๊ฐ์ด ํด์ค๋ ๋๊ณ !
calculated = calculate(a: 20, b: 30, method: { (first: Int, second: Int) -> Int in
return first + second
})
print(calculated) // 50
์ด๋ ๊ฒ ๋ฐ๋ก method ๋ค์ ์ ๋ฌ์ธ์๋ก ์ฝ๋๋ธ๋ญ์ ์์ฑํ์ฌ ๋๊ฒจ์ค๋ ๋๋ค.
<ํํ ํด๋ก์ >
ํด๋ก์ ๊ฐ ๋ง์ง๋ง ์ ๋ฌ์ธ์๋ผ๋ฉด,
๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์๋ตํ๊ณ , ํจ์ ์๊ดํธ ์ธ๋ถ์ ํด๋ก์ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค!
func calculate2(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
return method(a, b) // ํจ์ ์์์ ์ ๋ฌ๋ฐ์ ํด๋ก์ ๋ฅผ ํธ์ถ
}
var result: Int
result = calculate2(a: 12, b: 20) { (first: Int, second: Int) -> Int in
return first + second
}
print(result) // 32
<ํด๋ก์ ์ถ์ฝ(๊ฐ์ํ)>
ํด๋ก์ ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ถ์ฝ์ด ๊ฐ๋ฅํ๋ค!
(๋ฐ๋ก ์์ ์์ ์ด์ด์ ์ถ์ฝ)
Calculate2 ํจ์์ method ๋งค๊ฐ๋ณ์๋
์ปดํ์ผ๋ฌ๊ฐ Int์์ ์๊ณ ์๊ธฐ ๋๋ฌธ์
๊ตณ์ด ๋ฐํํ์
์ ๋ช
์ํด์ฃผ์ง ์์๋ ๋๋ค.
(in ํค์๋๋ ์๋ตX)
result = calculate2(a: 30, b: 22, method: { (first: Int, second: Int) in
return first + second
})
print(result) // 52
์ด๋ ๊ฒ!!
( -> Int ์๋ต! )
์ฌ๊ธฐ์ ์ถ๊ฐ์ ์ผ๋ก ํํ ํด๋ก์ ๋ฅผ ํจ๊ป ํ์ฉํ์ฌ ์ถ์ฝ์ด ๊ฐ๋ฅํ๋ค!
result = calculate2(a: 30, b: 22) { (first: Int, second: Int) in
return first + second
}
print(result) // 52
์ด๋ ๊ฒ!! ์๊ดํธ ๋ซ์์ฃผ๊ณ ,
( method: ์๋ต!!)
๋ํ, ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ด ๊ตณ์ด ํ์ํ์ง ์๋ค๋ฉด,
๋จ์ถ ์ธ์ ์ด๋ฆ($0, $1, $2)์ ์ฌ์ฉํ์ฌ
์ถ๊ฐ์ ์ผ๋ก ์ถ์ฝ์ด ๊ฐ๋ฅํ๋ค!
result = calculate2(a: 22, b: 12, method: {
return $0 + $1
})
print(result) // 34
์ด๋ ๊ฒ! ์ฌ๊ธฐ์ ํํ ํด๋ก์ ๊น์ง ํ์ฉํ๋ฉด?
result = calculate2(a: 22, b: 12) {
return $0 + $1
}
print(result) // 34
์์.. ์์ฒญ ์ค์ด๋ค์์ฅฌ..?๐ซข
๊ทธ์น๋ง, ๋๋ฌด ๋ง์ด ์ถ์ฝํ์ฌ ์ฌ์ฉํ๋ค๋ฉด
๋๊ตฐ๊ฐ๋ ์ดํดํ์ง ๋ชปํ๋ ์ฝ๋๊ฐ ๋ ์ ์์ผ๋!
์ ๋นํ ์ถ์ฝํ๋ ๊ฒ์ด ์ข๋ค.ใ
ใ
<๐ก๊ธฐ์ตํ์!!๐ก>
1. ํ๋ผ๋ฏธํฐ ์ด๋ฆ(a, b) ๋์ $0, $1 ์ฌ์ฉ!!
2. ํ๋ผ๋ฏธํฐ์ in ์ฌ์ฉ ํน์ $ ๋ฑ์ ์ฌ์ฉ!!
์๋ ์ถ์ฝ ์์๋
์์
๋ ๋ฐฐ์ ๋ '๋จ๊ณ๋ณ ์ถ์ฝ๋ฒ'์ด๋ค!
(ํ๋์ ๋ณด๊ธฐ ์ข์ ๋จ๊ฒจ๋๊ธฐ๐_ written by kokojong)
func addFunction(closure: (Int, Int, Int) -> Int) {
let added = closure(1, 2, 3)
print(added)
}
// ๋จ๊ณ๋ณ ์ถ์ฝ๋ฒ
addFunction(closure: { (a: Int, b: Int, c: Int) -> Int in
return a + b + c
})
addFunction(closure: {(a, b, c) -> Int in
return a + b + c
})
addFunction(closure: {(a, b, c) in
return a + b + c
})
addFunction(closure: {
return $0 + $1 + $2
})
addFunction(closure: {
$0 + $1 + $2 // ํ ์ค์ ๊ฒฝ์ฐ์๋ return๊น์ง๋ ์๋ต ๊ฐ๋ฅ!!
})
addFunction(){
$0 + $1 + $2
}
addFunction {
$0 + $1 + $2
}
'iOS ์ฑ ๊ฐ๋ฐ ๊ณต๋ถ > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
8์ฃผ์ฐจ_5์ผ์ฐจ_์ฑ ๊ฐ๋ฐ ์ฌํ_TodoList ์ฑ ์ฝ๋๋ก ๋ง๋ค๊ธฐ_TIL (0) | 2024.05.03 |
---|---|
8์ฃผ์ฐจ_3์ผ์ฐจ_์ฑ ๊ฐ๋ฐ ์ฌํ_๋์์ ์ฑ ๋ง๋ค๊ธฐ_TIL (4) | 2024.05.01 |
7์ฃผ์ฐจ_4์ผ์ฐจ_์ฑ ๊ฐ๋ฐ ์๋ จ_๊ฐ์ธ๊ณต๋ถ_TIL (2) | 2024.04.18 |
7์ฃผ์ฐจ_2์ผ์ฐจ_์ฑ ๊ฐ๋ฐ ์๋ จ_ScrollView & Pull to Refresh_TIL (0) | 2024.04.16 |
7์ฃผ์ฐจ_iOS ์ฑ ๊ฐ๋ฐ ์๋ จ_3~4์ผ์ฐจ_Standard๋ฐ AutoLayout_TIL (0) | 2024.04.11 |