์๋ ํ์ธ์ 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(_:_:))
์ด๋ ๊ฒ ์์๋ฅผ ํตํด ์ผ๊ธ๊ฐ์ฒด์ ๋ํด์ ์์๋ณด์๋๋ฐ์.
์ผ๊ธ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ ์ฐจ ํจ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๊ตฌํํ ์ ์๋ ์ฅ์ ์ด ์์ต๋๋ค.
๊ณ ์ฐจํจ์์ ์ฝ๋ฐฑํจ์์ ๋ํด์๋ ๋์ค์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ๋ฆฌํ๋๋ก ํ๊ฒ ์ต๋๋ค.
ํน์๋ผ๋ ๊ถ๊ธํ์ ์ ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
'๐ฅ Computer Science > Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๐ป Programming] Clean Code - ์๋ฏธ์๋ ์ด๋ฆ์ ์จ๋ผ (0) | 2021.06.13 |
---|---|
[๐ป Programming] Clean Code - ๊นจ๋ํ ์ฝ๋๋? (feat.์จ์ผํ๋ ์ด์ ) (0) | 2021.06.13 |
[CS] TDD(Test-Driven-Development)๋? (0) | 2021.06.07 |
[CS] F.I.R.S.T ์์น์ด๋? (feat.UnitTest) (0) | 2021.06.07 |
[Programming] SOLID ์์น์ด๋? (feat.iOS ๊ฐ๋ฐ์) (2) | 2021.03.04 |
๋๊ธ