์ผ๊ธ ๊ฐ์ฒด (First class citizen)
์ผ๊ธ ๊ฐ์ฒด์ ์ข
๋ฅ
- ์ ์ ๋ฐ ์ค์์ ๊ฐ์ด ๊ฐ๋จํ ์ค์นผ๋ผ ์๋ฃํ๋ค์ ๋๋ถ๋ถ ์ผ๊ธ ๊ฐ์ฒด์ด๋ค.
- ์ผ๋ถ ๊ฐ์ฒด์งํฅ ์ธ์ด์์๋ ํด๋์ค๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ค.
์ ์
- ์ผ๊ธ ์๋ฏผ์ ๋ณ์ ๋ฐ ์์์ ์ ์ฅ ๋ฐ ํ ๋นํ ์ ์์ด์ผํ๋ค.
- ์ผ๊ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ์ธ์(Argument)๋ก ์ฌ์ฉ ๊ฐ๋ฅํด์ผํ๋ค.
- ๋ณ์์ ํ ๋น ๊ฐ๋ฅ
- ๋น๊ต ์ฐ์ฐ์ด ๊ฐ๋ฅ
์ ์ ์์์ ์ผ๊ธ์๋ฏผ์ ํจ์๋ก ์นํํด๋ณด๋ฉด ๋ฌด์จ๋ง์ธ์ง ์ดํดํ๊ธฐ๊ฐ ์ฝ๋ค.
์ฝ๋๋ก ์๋ฅผ ๋ค์ด๋ณด๋ฉด
1. ์ผ๊ธ ์๋ฏผ์ ๋ณ์ ๋ฐ ์์์ ์ ์ฅ ๋ฐ ํ ๋นํ ์ ์์ด์ผํ๋ค.
func firstCitizen(param: Int){
print(param)
}
let constant = firstCitizen
2. ์ผ๊ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ์ธ์(Argument)๋ก ์ ๋ฌ ๊ฐ๋ฅํด์ผํ๋ค.
func printHello(param: String){
print(param)
}
func firstCitizen(param: String)-> String{
return "Hello! \(param)"
}
printHello(param: firstCitizen(param: "Swift"))
>>>>> Hello! Swift
3. ๊ฐ์ฒด(ํจ์)์์ ์ผ๊ธ ๊ฐ์ฒด๋ฅผ return ํ ์ ์์ด์ผ ํ๋ค.
func firstCitizen(param: String)-> String{
return "Hello! \(param)"
}
func printHello()->String{
return firstCitizen(param : "Swift")
}
print(printHello())
>>>>> Hello! Swift
4. ๋น๊ต ์ฐ์ฐ์ด ๊ฐ๋ฅํด์ผํ๋ค. (Swift์ ํจ์์์๋ ๊ถ์ฅ๋์ง ์๋ ๋ฐฉ์์ด์ง๋ง)
func firstCitizen(param: String)-> String{
return "Hello! \(param)"
}
func printHello()->String{
return firstCitizen(param : "Swift")
}
print(firstCitizen(param: "Swift") == printHello())
>>>>> True