(์ดํ ์ถ์ฒ :
- https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
- https://sungjk.github.io/2017/07/17/fp.html
)
- ๋๋ค ๋์ (ฮป-calculus, lambda-calculus)์ ์ํฅ์ ๋ฐ์ ํ์
๋๋ค ๋์ (ฮป-calculus, lambda-calculus)
(์ดํ ์ถ์ฒ :
)
- ๋ณ์์ ๋ค์ ๋ฐ์ธ๋ฉ๊ณผ ๋์ ์ ๋ฐฉ๋ฒ์ ์ด์ฉํด ํจ์ ์ ์, ํจ์ ์ ์ฉ, ๊ท๋ฉ์ ํจ์ ์ถ์ํ๋ฅผ ์ํํ๊ณ ์ํ ์ฐ์ฐ์ ํํํ๋ ํ์ ์ฒด๊ณ
- ํจ์์ ํํ
- ํจ์๊ฐ ๋ฐ๋์ ์ด๋ฆ์ ๊ฐ์ง ํ์๊ฐ ์์
- ํจ์์ ์ ๋ ฅ ๋ณ์๊ฐ ์ด๋ฆ์ ๊ฐ์ง ํ์ ์์
- ๋ ๊ฐ ์ด์์ ์ ๋ ฅ์ ๋ฐ๋ ํจ์๋ ํ๋์ ์ ๋ ฅ์ ๋ฐ์ ๋๋ค๋ฅธ ํจ์๋ฅผ ์ถ๋ ฅํ๋ ํจ์๋ก ๋ค์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์์ ํจ์ (Pure function)๋ฅผ ์กฐํฉํด ๊ณต์ ์ํ (shared state), ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ (mutable data) ๋ฐ ๋ถ์์ฉ (side-effects)์ ํผํด ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ํ๋ก์ธ์ค
- ์์ ํจ์ (Pure function)
- ์ํ์ ํจ์
- ์ฐธ์กฐ ํฌ๋ช ์ฑ (referential transparency)
- ๊ฐ์ ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ฉด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํ
- ํ๋ก๊ทธ๋จ์ ์ํ๊ฐ์ ๋ฐ๊พธ๋ ๋ถ์์ฉ ์์ c.f. ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ
- ์์ ํจ์ (Pure function)
์ฐธ์กฐ ํฌ๋ช
์ฑ (referential transparency)
(์ดํ ์ถ์ฒ :
- ํ๋ก๊ทธ๋จ์ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ฒฐ๊ณผ ๊ฐ์ผ๋ก ํจ์ ํธ์ถ์ ๋์ฒดํ ์ ์์
- ์ปดํ์ผ๋ฌ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ก๊ทธ๋จ ๋์์ ์ฌ์์ฑ ์์คํ ์ผ๋ก์จ ์ถ๋ก ๊ฐ๋ฅ -> ๋ณ๋ ฌ์ฑ์ ์๋จ์ผ๋ก ํ๋ ์ฝ๋์ ์ต์ ํ ๊ฐ๋ฅ
์ํ์ ํจ์
(์ดํ ์ถ์ฒ :
- X๋ ์งํฉ์ด๋ฉฐ ์ ์์ญ์ด๋ผ๊ณ ํจ
- Y๋ ์งํฉ์ด๋ฉฐ ๊ณต์ญ์ด๋ผ๊ณ ํจ
- f(x)๋ X x Y์ ๋ถ๋ถ์งํฉ
- X์ ์์์ ์์ x์ ๋ํด f(x)์ธ Y์ y๊ฐ ์ ์ผํ๊ฒ ์กด์ฌ
๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ
(์ดํ ์ถ์ฒ :
)
- ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ฐ๋ ๊ฐ๋ (ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ)
- ํ๋ก๊ทธ๋จ์ ์ํ์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ๊ตฌ๋ฌธ์ ๊ด์ ์์ ์ฐ์ฐ ์ค๋ช
-
๊ณต์ ์ํ (shared state)
- ๊ณต์ ๋ฒ์ (shared scope) ๋ด ๋ณ์, ๊ฐ์ฒด ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋๋ ๋ฒ์ ๊ฐ ์ ๋๋๋ ์์ฑ
- ํด๋น ํจ์๊ฐ ์ฌ์ฉํ๊ฑฐ๋ ์ํฅ์ ๋ฏธ์น๋ ๋ชจ๋ ๊ณต์ ๋ณ์ ํ์คํ ๋ฆฌ๋ฅผ ์์์ผ ํจ
- ํจ์ ํธ์ถ ํ์ด๋ฐ์ ์ข ์์
-
๋ถ๋ณ์ฑ (Immutability)
- ๊ฐ์ฒด ์์ฑ ํ ์์ ํ ์ ์๋ ๊ฐ์ฒด
scala์valc.f.javascript์const
- ๊ฐ์ฒด ์์ฑ ํ ์์ ํ ์ ์๋ ๊ฐ์ฒด
-
์ต๋ช ํจ์ (anonymous function)
-
๊ณ ์ฐจ ํจ์ (high order function)
(์ดํ ์ถ์ฒ :)
- ํ๋ ์ด์์ ํจ์๋ฅผ ์ธ์๋ก ๊ฐ์ง
- ํจ์๋ฅผ ๊ฒฐ๊ณผ๋ก ๋ฐํ
- ์ฌ์ฌ์ฉ์ฑ
- ์ผ๊ธ ๊ฐ์ฒด (First-class function)๋ก์์ ํจ์
์ผ๊ธ ๊ฐ์ฒด (First-class function)
(์ดํ ์ถ์ฒ :
)
- ํจ์ ์์ฒด๋ฅผ ์ธ์๋ก ๋ค๋ฅธ ํจ์์ ์ ๋ฌ, ๋ค๋ฅธ ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฆฌํด, ํจ์๋ฅผ ๋ณ์์ ํ ๋นํ ์ ์๋ ํจ์
- ๋ฌด์ด์ ๋ฒ์น์ด ๋ฌด๋์ง๋ฉฐ ๋ณ๋ ฌํ ํ์ํ๋ ํจ์ํ์ ๋ณธ์ง์ ์ผ๋ก ์ด์ ์ ํฉ (https://learnbydoing.ml/2017/07/27/%EC%99%9C-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%84-%EC%A3%BC%EB%AA%A9%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B0%80/)
