๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Swift ์ •๋ฆฌ

[Swift] ์ผ๊ธ‰ ๊ฐ์ฒด (First-class Citizen) ์ •๋ฆฌ

by seolhee2750 2021. 6. 24.

๊ณ ์ฐจํ•จ์ˆ˜, ํด๋กœ์ €์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ ค๋‹ˆ '์ผ๊ธ‰ ๊ฐ์ฒด'์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ๋งŽ์ด ๋“ฑ์žฅํ•œ๋‹ค.

์ •ํ™•ํžˆ ๊ฐœ๋…์„ ์ˆ™์ง€ํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ์—์„œ ํด๋กœ์ €์™€ ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์™”์ง€๋งŒ,

ํ™•์‹คํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ€๋‹ˆ ๋‚ด์šฉ์ด ๊นŠ์–ด์งˆ์ˆ˜๋ก ์ดํ•ด๊ฐ€ ์–ด๋ ค์›Œ์ง€๋Š”๋“ฏ ํ•˜์—ฌ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๐Ÿ“Ž ์ผ๊ธ‰ ๊ฐ์ฒด (First-class Citizen)

์ผ๊ธ‰ ๊ฐ์ฒด๋Š” ์ด๋ฆ„๋งŒ ๋“ค์–ด๋ณด๋ฉด ์ œ์ผ ๋›ฐ์–ด๋‚œ?.. ๊ฐ์ฒด์ธ๊ฐ€ ํ•˜๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ,

์˜คํžˆ๋ ค ๊ธ‰์ด ํ•˜๋‚˜์ธ ๊ฐ์ฒด! ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋‹ค.

 

๐Ÿ‘‰ ์•„๋ž˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์ถฉ์กฑ ์กฐ๊ฑด์ด๋‹ค.

  • ์ „๋‹ฌ ์ธ์ž๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

์œ„์˜ ๋‚ด์šฉ์„ ๋ณด๋ฉด ์ข€ ์–ด๋ ค์›Œ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ,,

ํ•œ ๋งˆ๋””๋กœ ์š”์•ฝํ•˜์ž๋ฉด, ๊ทธ๋ƒฅ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

(๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์—์„œ ๋ณ€์ˆ˜, ์ƒ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์˜ ์กฐ๊ฑด์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค.)

 

์ด์ œ ์—ฌ๊ธฐ์„œ ์งš์–ด์•ผ ํ•  ์ ์€, Swift๋Š” ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋ผ๋Š” ์ !

(์Šค์œ„ํ”„ํŠธ์˜ ์–ธ์–ด์  ํŠน์„ฑ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์š”๊ธฐ๐Ÿ‘‡์—์„œ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.)

2021.06.09 - [๐Ÿ“ Swift Note/๐Ÿ“‹ Concept Summary] - [Swift] ์Šค์œ„ํ”„ํŠธ์˜ ์–ธ์–ด์  ํŠน์„ฑ

 

[Swift] ์Šค์œ„ํ”„ํŠธ์˜ ์–ธ์–ด์  ํŠน์„ฑ

๋‚˜๋Š” ์Šค์œ„ํ”„ํŠธ ์–ธ์–ด์˜ ๊ฐœ๋… ๊ณต๋ถ€ ์ด์ „์—, ๋ƒ…๋‹ค ๋ฌธ์ œ ํ’€์ด๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ฉฐ ํ•„์š”ํ•œ ํ•จ์ˆ˜๋‚˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๋“ค์„ ๊ทธ๋•Œ ๊ทธ๋•Œ ์ฐพ์•„๋ณด๋Š” ์‹์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ํ™•์‹คํžˆ ์ง„๋„

seolhee2750.tistory.com

 

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๋Š” ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋กœ, ํ•จ์ˆ˜๋ฅผ ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ!

 


์ฐธ๊ณ 

๋Œ“๊ธ€