OOP ๋ค์์ผ๋ก ๋ ์ค๋ฅด๋ ํจ๋ฌ๋ค์์ธ FP์ ๋ํด์ ์์๋ณด์. ๋ฌผ๋ก FP๋ OOP๋ณด๋ค ๋จผ์ ๋ฑ์ฅํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ์๊ธฐ ์ ๋ฑ์ฅํ๊ฒ ๋์์๊น? FP์ ์ฅ์ ๊ณผ ๊ฐ๋ ์ ์ดํดํ๋ฉด์ ์์๊ฐ๋ณด์.
Functional Programming
- ์๋ฃ ์ฒ๋ฆฌ๋ฅผ ์ํ์ ํจ์์ ๊ณ์ฐ์ผ๋ก ์ทจ๊ธ
- ์ํ์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ํผํจ
- ๋ณ์๊ฐ ์๋ค.
- Side-Effect๊ฐ ์์
- ์๋ชป๋ code๋ก ์ธํ ์ค์๋์ ์๋ฏธ๊ฐ ์๋
- ์คํ ๊ฒฐ๊ณผ ์ํ ๋ณํ๋ฅผ ์ผ์ผํค๋ ๋ชจ๋ ๊ฒ
- ํด๋น ์ฝ๋์ ์คํ์ผ๋ก ์ธํด ๊ฒฐ๊ณผ๊ฐ์ ๋ณ๊ฒฝ์ํฌ ์ ์๋ ๋ชจ๋ ๊ฒ
- Function์ด๋?
- ๋ณ์ x์ y์ฌ์ด์ ๊ด๊ณ ๋งคํ(์ฌ์)
- ๋ ์ค๋ฅด๋ Paradigm
- OOP์ดํ ๊ฐ์ฅ ํฐ ํจ๋ฌ๋ค์ ์ค ํ๋
- SDK์๋ ๋ค์ด๊ฐ๋ ๊ฐ๋
- Functional Programming ์คํ์ผ์ ์ฌ์ฉํ๋ค๊ณ ํด์ Functional Programming์ ํ๋ค๊ณ ํ ์ ์์
- ๋์ผํ ๋ฌธ์ ์ ํด๋ฒ์ ๋ํด ์๋ก์ด ์๊ฐ์ด๋ผ ์๊ฐํด์ผ ํจ
- var์ loop๊ฐ ์๋ ์ฝ๋
-
์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ๋ณ์์ loop๊ฐ ์๋ค.
-
์ด ๊ฐ์ ์ ํ๊ณ ๊ตฌ๊ตฌ๋จ ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ณด์.
-
์ด๋ ๊ฒ ์ฌ๊ท๋ก ์ง์ผ ํ๋ค.
- ์ฌ๊ท๋ Stack Overflow๋์ง ์๋? ํจ์์ฝ์ด Stack์ ๊ณ์ ์์ด๋๊น.
- Tail Call Optimization(TCO)
- Tail Call Optimization ์ฌ์ด ์ค๋ช
- ์์ฝ
- Stack์๋ ํจ์๊ฐ ์ข ๋ฃ๋ ๋, ๋์๊ฐ์ผ ํ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๊ทธ๋ฐ๋ฐ, ๋ง์ฝ ํจ์ return ๋ถ๋ถ์ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถ๋ง ํ๊ณ ์ข
๋ฃํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด, ํธ์ถํ ํจ์๋ก ๋์์ฌ ์ด์ ๊ฐ ์๋ค.
- ์ถ๊ฐ ๊ณ์ฐ์ด ํ์์๊ธฐ ๋๋ฌธ
- ์ด๋ฐ ๊ฒฝ์ฐ, ํธ์ถํ ํจ์์ ๋์์ฌ ์ฃผ์๋ฅผ Stack์ ์ ์ฅํ์ง ์์ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ค.
- ์ด๊ฒ์ Tail Call Optimization์ด๋ผ ํ๋ค.
- ์์ฝ
- ์ฌ๊ท๋ Stack Overflow๋์ง ์๋? ํจ์์ฝ์ด Stack์ ๊ณ์ ์์ด๋๊น.
-
๊ฐ์๊ธฐ ๋ฑ, ํ๋ ค๊ณ ํ๋ ๊ฐ์๊ธฐ ๋ฐ๋ณด๊ฐ ๋ ๊ธฐ๋ถ์ด ๋ ๋ค.
-
์ฌ๊ณ ์ ์ ํ์ ํด์ผ ํ๋ค..
-
๊ธฐ๋ณธ์ ์ธ ์ธ ์ข ๋ฅ์ Function
- Pure Function
- ๋์ผํ input์ ๋ํด ํญ์ ๋์ผํ output์ ๋ฐํ
- Parameter์ด์ธ์ ์ฐ์ฐ์ ํ์ํ ์ ๋ณด๊ฐ ์๋ค.
- ๋ณํํ๋ ์ ์ญ ๋ณ์๋ฅผ ๊ฐ์ ธ์์ ์ด๋ค๋๊ฐ ํ๋ ํ์ ๊ธ์ง
- input๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ง ์์
- ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
- Side-Effect๊ฐ ์๋ค.
- ์คํ์ด ์ธ๋ถ์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค.
- Thread์ ์์ ํ๊ณ , ๋ณ๋ ฌ ๊ณ์ฐ์ด ๊ฐ๋ฅํ๋ค.
- Anomymous Function
- Closure, Block
- Higher-Order Function
- Function์ Parameter๋ก ๋ฐ๋ function
- Function์ return value๋ก ์ฌ์ฉํ๋ Function
- Closure๋ฅผ ์ ๋ ฅ๋ฐ๋ Function๋ค์ Higher-Order Function
- ์์