๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ Computer Science/Programming

[CS] ์ผ๊ธ‰ ๊ฐ์ฒด๋ž€?

by Fomagran ๐Ÿ’ป 2021. 5. 12.
728x90
๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!

 

ํด๋กœ์ ธ์— ๋Œ€ํ•ด์„œ ์ •ํ™•ํžˆ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ์•Œ์•„๋ณด๋˜ ์™€์ค‘์— "ํด๋กœ์ ธ๋Š” ์ผ๊ธ‰๊ฐ์ฒด์ด๋‹ค" ๋ผ๋Š” ๋ง์—์„œ

 

์ผ๊ธ‰๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ์•„๋ณด๊ณ  ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”!


First-Class-Object(์ผ๊ธ‰ ๊ฐ์ฒด)

 

์ผ๊ธ‰ ๊ฐ์ฒด๋ž€ ๋ฌด์—‡์ผ๊นŒ?๐Ÿง

 

์œ„ํ‚ค๋ฐฑ๊ณผ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

"์ผ๊ธ‰ ๊ฐ์ฒด๋ž€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์— ์ผ๋ฐ˜์ ์œผ๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋ณดํ†ต ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๊ธฐ, ์ˆ˜์ •ํ•˜๊ธฐ, ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๊ธฐ์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•  ๋•Œ ์ผ๊ธ‰ ๊ฐ์ฒด๋ผ๊ณ  ํ•œ๋‹ค."

 

์ฆ‰, ํ•จ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ๊ณ  ๋ฆฌํ„ด๊ฐ’์œผ๋กœ๋„ ์“ฐ์ผ ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์ผ๊ธ‰ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

 

1960๋…„๋Œ€, ์˜๊ตญ์˜ ์ปดํ“จํ„ฐ ๊ณผํ•™์ž ํฌ๋ฆฌ์Šคํ† ํผ ์ŠคํŠธ๋ž˜์น˜๊ฐ€ ์ฒ˜์Œ ์ด ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์–ธ๊ธ‰ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

 


1. ํ•จ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ a์™€ b๋ฅผ ๋”ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

func firstClassObject(_ a:Int,_ b:Int) -> Int {
    return a+b
}

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜์ž์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

let aPlusB = firstClassObject(1, 2)

2. ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด a์™€ b ๊ทธ๋ฆฌ๊ณ  aPlusB ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” argumentAPlusB๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ 

 

argumentAPlusB์— firstClassObject๋ฅผ ์ธ์ˆ˜๋กœ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

func paramAPlusB(a:Int,b:Int,aPlusB:(Int,Int)->Int) {
   print(aPlusB(a,b))
}

paramAPlusB(a: 1, b: 2, aPlusB:firstClassObject(_:_:))

3. ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

func returnAPlusB(a:Int,b:Int)-> Int {

    return firstClassObject(a, b)
}

returnAPlusB(a: 1, b: 2)

(๋‹ค์Œ๊ณผ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๊ฐ’์œผ๋กœ ๋ฐ›์œผ๋ฉด์„œ ๋™์‹œ์— ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์˜ˆ์‹œ๋ฅผ ์œ„ํ•ด...)

func returnAndParamAPlusB(a:Int,b:Int,aPlusB:(Int,Int)->Int) -> Int {
    
    return aPlusB(a,b)
}

returnAndParamAPlusB(a: 1, b: 2, aPlusB: firstClassObject(_:_:))

์ด๋ ‡๊ฒŒ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์ผ๊ธ‰๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”.

 

์ผ๊ธ‰๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ ์ฐจ ํ•จ์ˆ˜์™€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ณ ์ฐจํ•จ์ˆ˜์™€ ์ฝœ๋ฐฑํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ๊ตฌ์ฒด์ ์œผ๋กœ ์ •๋ฆฌํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํ˜น์‹œ๋ผ๋„ ๊ถ๊ธˆํ•˜์‹  ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€