๊ณ ์ฐจํจ์, ํด๋ก์ ์ ๋ํด ๊ณต๋ถํ๋ ค๋ '์ผ๊ธ ๊ฐ์ฒด'์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ๋ง์ด ๋ฑ์ฅํ๋ค.
์ ํํ ๊ฐ๋ ์ ์์งํ์ง ๋ชปํ ์ํ์์ ํด๋ก์ ์ ๊ณ ์ฐจํจ์๋ฅผ ์ฌ์ฉํด์์ง๋ง,
ํ์คํ๊ฒ ์ ๋ฆฌํ์ง ์๊ณ ๋์ด๊ฐ๋ ๋ด์ฉ์ด ๊น์ด์ง์๋ก ์ดํด๊ฐ ์ด๋ ค์์ง๋๋ฏ ํ์ฌ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๐ ์ผ๊ธ ๊ฐ์ฒด (First-class Citizen)
์ผ๊ธ ๊ฐ์ฒด๋ ์ด๋ฆ๋ง ๋ค์ด๋ณด๋ฉด ์ ์ผ ๋ฐ์ด๋?.. ๊ฐ์ฒด์ธ๊ฐ ํ๊ณ ์๊ฐํ๊ธฐ ์ฝ์ง๋ง,
์คํ๋ ค ๊ธ์ด ํ๋์ธ ๊ฐ์ฒด! ๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค.
๐ ์๋๋ ์ผ๊ธ ๊ฐ์ฒด๊ฐ ๋๊ธฐ ์ํ ์ถฉ์กฑ ์กฐ๊ฑด์ด๋ค.
- ์ ๋ฌ ์ธ์๋ก ์ ๋ฌ ๊ฐ๋ฅํ๋ค.
- ๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ๋ด์ ์ ์๋ค.
- ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์์ ๋ด์ฉ์ ๋ณด๋ฉด ์ข ์ด๋ ค์ ๋ณด์ผ ์ ์์ง๋ง,,
ํ ๋ง๋๋ก ์์ฝํ์๋ฉด, ๊ทธ๋ฅ ๋ณ์๋ ์์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๋ป์ด๋ค.
(๊ฑฐ์ ๋ชจ๋ ์ธ์ด์์ ๋ณ์, ์์๋ ์ผ๊ธ ๊ฐ์ฒด์ ์กฐ๊ฑด์ ๊ฐ์ถ๊ณ ์๋ค.)
์ด์ ์ฌ๊ธฐ์ ์ง์ด์ผ ํ ์ ์, Swift๋ ํจ์ํ ์ธ์ด๋ผ๋ ์ !
(์ค์ํํธ์ ์ธ์ด์ ํน์ฑ์ ๋ํ ๋ด์ฉ์ ์๊ธฐ๐์์ ์ฐธ๊ณ ํด์ฃผ์ธ์.)
2021.06.09 - [๐ Swift Note/๐ Concept Summary] - [Swift] ์ค์ํํธ์ ์ธ์ด์ ํน์ฑ
Swift๊ฐ ํจ์ํ ์ธ์ด๊ฐ ๋ ์ ์์๋ ๊ฐ์ฅ ์ค์ํ ์ด์ ๊ฐ ๋ฐ๋ก
Swift์์๋ ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ค๋ ์ ์ด๋ค.
ํจ์๊ฐ ์ผ๊ธ ๊ฐ์ฒด๊ฐ ๋๋ค๋ ๊ฒ์,
๋ค์ํ ์ข ๋ฅ์ ํจ์๋ฅผ ํธ์ถ, ์ ๋ฌ, ๋ฐํํ๋ ๋ฑ์ ๋์๋ง์ผ๋ก ํ๋ก๊ทธ๋จ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค๋ ์ด์ผ๊ธฐ!
๊ทธ๋ ๋ค๋ฉด Swift์์ ํจ์๊ฐ ์ผ๊ธ ๊ฐ์ฒด์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง, ์์ ์ถฉ์กฑ ์กฐ๊ฑด ์ธ๊ฐ์ง๋ฅผ ํ ์คํธํด๋ณด์.
๐ Swift์ ํจ์์ ์ผ๊ธ๊ฐ์ฒด ์ฆ๋ช
๊ฐ๋จํ ํจ์๋ฅผ ์ด์ฉํ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๋ฉฐ ์์๋ฅผ ํ์ธํด๋ณธ๋ค.
โ๏ธ ์ ๋ฌ ์ธ์๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํ๊ฐ?
func plus(_ num: Int) -> Int {
return num + 1
}
func minus(_ num: Int) -> Int{
return num - 1
}
func calculate(_ a: Int, _ b: Int) -> Int {
return a + b
}
calculate(plus(1), minus(2))
// 3
calculate ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ์ ๋ฌ ์ธ์๋ก plus, minus ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โ๏ธ ๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ๋ด์ ์ ์๋๊ฐ?
func plus(_ num: Int) -> Int {
return num + 1
}
func minus(_ num: Int) -> Int{
return num - 1
}
func calculate(_ a: Int, _ b: Int) -> Int {
return a + b
}
let p = plus
let m = minus
calculate(p(1), m(2))
// 3
๋ณ์์ ํจ์๋ฅผ ์ ์ฅํ์ฌ ์ฌ์ฉํ ์ ์์์ ํ์ธ ๊ฐ๋ฅํ๋ค.
โ๏ธ ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ฐ?
func plus(_ num: Int) -> Int {
return num + 1
}
func minus(_ num: Int) -> Int{
return num - 1
}
func calculate(_ a: Int, _ b: Int) -> Int {
return plus(a) + plus(b)
}
let p = plus
let m = minus
calculate(p(1), m(2))
// 5
calculate ํจ์ ์์์ ๋ฐํ ๊ฐ์ผ๋ก plus, minus ํจ์๋ฅผ ์ฌ์ฉํด์ฃผ์๋ค.
๋ฐํ ๊ฐ์ผ๋ก ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ ์ ๋ฆฌ ๐
์ผ๊ธ ๊ฐ์ฒด๋ ์ ๋ฌ์ธ์, ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ ๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ๋ด์ ์ ์๋ ๊ฒ.
Swift๋ ํจ์ํ ์ธ์ด๋ก, ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ฌ์ฉํ ์ ์์!
์ฐธ๊ณ
- ๐ ์ค์ํํธ ํ๋ก๊ทธ๋๋ฐ
- https://machiner.tistory.com/24
- https://richard25.tistory.com/62
'3๏ธโฃ Swift > Swift ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฐ์ด ๊ด๋ จ ํจ์ ์ด์ ๋ฆฌ! (2) | 2021.07.15 |
---|---|
[Swift] ํด๋ก์ (Closure) ์ ๋ฆฌ (feat. sorted) (6) | 2021.06.30 |
[Swift] sorted, joined ํจ์ ์ฌ์ฉ ์ ์ฃผ์ ์ฌํญ! (0) | 2021.06.13 |
[Swift] ์ต์ ๋ ์ถ์ถ (๊ฐ์ ์ถ์ถ, ์ต์ ๋ ๋ฐ์ธ๋ฉ, ์ต์ ๋ ์ฒด์ด๋) ์ ๋ฆฌ (4) | 2021.06.12 |
[Swift] Type Annotation๊ณผ Type Inference (ํ์ ์ด๋ ธํ ์ด์ ๊ณผ ํ์ ์ถ๋ก ) (2) | 2021.06.11 |
๋๊ธ