์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์๋ณด๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (ES5)
๋งํ(http://www.marpple.com)์ CTO ์ ์ธ๋๋์ด ์๋ ค์ฃผ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ฐ์ข ์ ๋๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ๋ง๋ค์ด๊ฐ๋ฉฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์๊ณผ ์ฝ๋ฉ์ ์ฆ๊ฑฐ์์ ๋๋ ์ ์์ต๋๋ค.
์๊ฐ์ 13,492๋ช
๋์ด๋ ์ด๊ธ
์๊ฐ๊ธฐํ ๋ฌด์ ํ

ใ์ฝํ๋ฆฐ ๋ฉํฐํจ๋ฌ๋ค์ ์ดํฐ๋ ์ด์ ใ์ ใ๋ฉํฐํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐใ์ ๋ถ๋ก์ผ๋ก, ๋ณธ์์ ์ผ๋ถ ๋ด์ฉ์ ์ฝํ๋ฆฐ ์ธ์ด์ ํนํํ์ฌ ํ์ด๋ธ ์๋ฃ์ ๋๋ค. ๋ฉํฐํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐ์ ํน์ ์ธ์ด์ ๊ตญํ๋์ง ์๋ ์ธ์ด ๋ ๋ฆฝ์ ์ธ ๊ฐ๋ ์ผ๋ก, ํ๋์ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ๋ก ์ด์ ๊ธฐ์ ์ ๋๋ค.
๋ณด๋ฌ๊ฐ๊ธฐ: https://github.com/marpple/kotlin-multi-paradigm-iteration
ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ์ดํฐ๋ ์ด์ (Iteration)์ ๋ํด ๊ฐ์ฒด ์งํฅ, ํจ์ํ, ๋ช ๋ นํ ๊ฐ๋ ์ ํตํฉํ๊ณ , ์ด๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋์ํ๊ฒ ํ๋ ๊ท์ฝ์ ์ ๊ณตํฉ๋๋ค. ใ๋ฉํฐํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐใ์์๋ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ค์ฌ์ผ๋ก ํจ์ํยท๋ช ๋ นํยท๋ฆฌ์คํธ ํ๋ก์ธ์ฑยท๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์กฐํฉํด ํ์ฉํ๋ ์ฌ๋ก๋ค์ ์ดํด๋ดค์ต๋๋ค. ์ด๋ฒ์๋ ๋ฉํฐํจ๋ฌ๋ค์ ์ธ์ด์ธ ์ฝํ๋ฆฐ(Kotlin)์ ๋ฉํฐํจ๋ฌ๋ค์ ์ดํฐ๋ ์ด์ ์ ์ค์ฌ์ผ๋ก ๋ฉํฐํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์์ฉ ๋ฅ๋ ฅ์ ๋์ฑ ํ์ฅํด๋ณด๊ณ ์ ํฉ๋๋ค.
์ฝํ๋ฆฐ์ ๋ฉํฐํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค. ์ค๋ผ์ผ๋ฆฌ ๋ฏธ๋์ด์ ๋ถ์ฌ์ฅ์ด์ ์ฌ๋ฌ ๊ธฐ์ ์์ ์ ์ ์์ธ ๋ง์ดํฌ ๋ฃจํค๋ฐ์ค๋ ์ต๊ทผ ๊ทธ์ ๊ธ์์ "์ฐ๋ฆฌ๋ ํจ์ํ, ๊ฐ์ฒด ์งํฅ, ๋ช ๋ นํ ํจ๋ฌ๋ค์์ ์ ๊ณตํ๋ ๋ฉํฐํจ๋ฌ๋ค์ ์ธ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฒ์ ๋ํด ๋ฐฐ์์ผ ํ๋ค"๋ฉด์ "๋ง์ ํด๋ค์ด ๊ฐ์ ๋์๊ณ ์ด์ ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ์ ์ฌ์ฉํ ์ง๋ฅผ ๋ฐฐ์ธ ์ฐจ๋ก๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ ์ค๋ซ๋์ ๊ฐ๊ฐ ํน๋ณํ ๊ณ ์ ํ๊ณ ์ฌ์ง์ด ๊ฐ๋ฑ ์์ ์๋ ํจ๋ฌ๋ค์๋ค์ ์์ด์ผ ํ ๋๋ค"๋ผ๊ณ ํ์ต๋๋ค.
์ด๋ฌํ ํ๊ฒฝ์ด ๊ฐ์ถฐ์ง ์ง๊ธ, ์ด๋ ํ์ชฝ ํจ๋ฌ๋ค์๋ง ์ฌ์ฉํ๋ ๊ฒ์ ์ด์ฉ๋ฉด ํฐ ๊ธฐํ๋ฅผ ๋์น๋ ๊ฒ์ผ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ์ค์๋ ํจ์ํ์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ด ์ฐ์ธํ ๊ฒฝ์ฐ๊ฐ ์๊ณ , ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ด ๋ ์ฐ์ธํ ๊ฒฝ์ฐ๋ค๋ ์์ต๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ค์ ์ด์ ๋ ์ด์ ํจ์ํ์ด ์ข์์ง, ๊ฐ์ฒด ์งํฅ์ด ์ข์์ง, ์ ์ ํ์ ์ด ์ข์์ง, ๋์ ํ์ ์ด ์ข์์ง ๋ ผ์ํ ํ์๊ฐ ์์ต๋๋ค. ์ธ์ด๋ฅผ ๋ง๋ค๊ณ ํ์ค์ ์ ์ํ๋ ๋จ์ฒด์ ๊ธฐ์ ๋ค์ด ์ด๋ฏธ ํ๋์ ์ธ์ด์ ํ๋ซํผ์์ ์ฌ๋ฌ ํจ๋ฌ๋ค์์ ์ง์ํ๋๋ก ๋ง๋ค์ด์ฃผ์๊ณ , ์ฐ๋ฆฌ๋ ํ๋์ ํ๋ก์ ํธ, ์ฌ์ง์ด๋ ํ๋์ ํจ์ ์์์๋ ์ฌ๋ฌ ํจ๋ฌ๋ค์์ ์กฐํฉํ์ฌ ํ๋ก๊ทธ๋๋ฐํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ฝํ๋ฆฐ์ Iterable, Iterator, Sequence, Flow, Channel ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ํตํด ์ง์ฐ ํ๊ฐ(lazy evaluation)์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ ๊ตํ๊ณ ์ ์ฐํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค๋ ์ ์ด ํน์ง์ ๋๋ค. ์ฌ๊ธฐ์ ํ์ฅ ํจ์์ ํ๋ถํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํผ ํจ์๊ฐ ๊ฒฐํฉ๋์ด, ๋จ์ํ ๋ฆฌ์คํธ ์ํ ์ด์์ ๋ค์ํ ํจํด์ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด๋ ๋์ ์์ค์ ๋ฆฌ์คํธ ํ๋ก์ธ์ฑ์ ์คํํ ์ ์์ต๋๋ค. ์ฝํ๋ฆฐ ํน์ ์ ์ ๊ตํ๊ฒ ๋ง๋ฌผ๋ฆฐ ๊ตฌ์กฐ์ ์ ์ฐํ ํ์ฅ์ฑ, ํ๋ถํ ํธ์ ๊ธฐ๋ฅ๋ค์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์๊ฒ ๋ง์ ์๊ฐ๊ณผ ์ฆ๊ฑฐ์์ ์๊ฒจ์ค๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ผ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ถฉ๋ถํ ํ์ฉํ์ง ๋ชปํ๊ณ ์๋ค๋ฉด, ์ฝํ๋ฆฐ ํ๋ก๊ทธ๋๋ฐ์ด ์ฃผ๋ ์ฆ๊ฑฐ์์ ์จ์ ํ ๋๋ฆฌ๊ณ ์์ง ๋ชปํ ๊ฒ์ผ์ง๋ ๋ชจ๋ฆ ๋๋ค.
ใ๋ฉํฐํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐใ์ ๋ถ๋ก ์ปจํ ์ธ ์ธ ใ์ฝํ๋ฆฐ ๋ฉํฐํจ๋ฌ๋ค์ ์ดํฐ๋ ์ด์ ใ์์๋ ใ๋ฉํฐํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐใ์ ์ผ๋ถ ๋ด์ฉ์ ์ฝํ๋ฆฐ ์ดํฐ๋ฌ๋ธ, ์ดํฐ๋ ์ดํฐ, ์ํ์ค๋ฅผ ๊ฐ์ฒด ์งํฅยทํจ์ํยท๋ช ๋ นํ ํจ๋ฌ๋ค์์ ์ฐ๊ฒฐํ๋ ๊ด์ ์ผ๋ก ํ์ด๋ ๋๋ค. ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ค๊ณ๋ ์ดํฐ๋ ์ดํฐ์ ๋ช ๋ นํ ์คํ์ผ๋ก ์์ฑํ๋ ์ํ์ค์ ๊ด๊ณ๋ฅผ ์์๋ณด๊ณ , ํจ์ํ ํ์ฅ ํจ์๋ก ์ํ์ค์ด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๋ ์ฝ๋๋ฅผ ์ดํด๋ด ๋๋ค. ๋ํ ํจ์ํ ํ์ฅ ํจ์๋ก ์ฐ์ฐ์ ์์ ์ํ์ค๋ฅผ ๋ช ๋ นํ์ผ๋ก ๋ค๋ฃจ์๋ค๊ฐ ๋ค์ ํจ์ํ์ผ๋ก ์ ํํ๋ฉด์, ์ฝํ๋ฆฐ ์ดํฐ๋ ์ด์ ์ด ์ง๋ ํจ๋ฌ๋ค์ ์ ํ ๋ฅ๋ ฅ์ ํ์ธํด๋ด ๋๋ค.
์์ธ๋ฌ ์ํ์ค์ ์ดํฐ๋ ์ดํฐ์ ์ง์ฐ ํ๊ฐ๋ฅผ ๊น์ด ํ์ ํ๊ณ , LISP์ ์ฒ ํ์ ์ฐจ์ฉํด ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ์ตํฉํ๋ ์๊ฐ์ ํ๊ตฌํ๋ฉฐ, ์ด๋ฌํ ๊ธฐ๋ฒ๋ค์ ์ค์ ์์ฉ๋ ฅ์ ๋์ด๋ ๋ด์ฉ๋ ๋ค๋ฃน๋๋ค. ๋ํ ์ ์ฐํ๊ณ ๊ฒฌ๊ณ ํ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ํํ๊ณ ์์ ํ๊ฒ ๋์ํ๋ ์ฝ๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ํ๊ตฌํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉํฐํจ๋ฌ๋ค์ ์ธ์ด ์ฝํ๋ฆฐ์ ๋ค์ํ ๊ฐ๋ฅ์ฑ์ ์ค๊ฐํ๊ณ , ์ํํธ์จ์ด ๊ณตํ๊ณผ ํ๋ก๊ทธ๋๋ฐ์ ์ฆ๊ฑฐ์์ ํ์ธต ๊น์ด ๋๋ฆด ์ ์๋ ๊ณ๊ธฐ๊ฐ ๋๊ธธ ๋ฐ๋๋๋ค.์๋ ํ์ธ์.
ํจ์ํ ES6+์ ํ์ํธ์ธ ์์ฉํธ ๊ฐ์ข๋ฅผ ์คํํ์ด์. 6์ 18์ผ๊น์ง ํ ์ธ ์ค์ด์์.
https://www.inflearn.com/course/ํจ์ํ_ES6_์์ฉํธ
ํจ์ํ ES6+ 1ํธ๋ ํจ๊ป ์คํ ๊ธฐ๋ ํ ์ธ ์ค์ ๋๋ค.
https://www.inflearn.com/course/functional-es6
ํจ์ํ ES6+ 3ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ์์ ์ ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
์๋ ํ์ธ์. ์ ์ธ๋์ ๋๋ค.
์ ๊ฐ์๋ฅผ ๋ค์ด์ฃผ์ ์ฌ๋ฌ๋ถ ์ ๋ง ๊ณ ๋ง์ต๋๋ค.
์ ๊ฐ ์ง๊ธ๊น์ง ๋ ํธ์ ๊ฐ์๋ฅผ ๋ง๋ค์๋๋ฐ์.
1. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์๋ณด๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (๋ฌด๋ฃ)
- https://www.inflearn.com/course/ํจ์ํ-ํ๋ก๊ทธ๋๋ฐ
2. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ JavaScript ES6+
- https://www.inflearn.com/course/functional-es6
์ด ๋ฒ์ ํ์ ํธ์ธ 'ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ JavaScript ES6+ ์์ฉํธ'์ ์ ์ํ๊ฒ ๋์์ต๋๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ป๊ฒ ์์ฉํ๊ณ , ์ดํฐ๋ฌ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋๊น์ง ์ธ ์ ์๋์ง ๋ค์ํ๊ฒ ์ค๋นํ์ผ๋ ๋ง์ ๊ด์ฌ ๋ถํ๋๋ฆฝ๋๋ค.
ํ์ฌ 6๊ฐ์ ์น์ ๊น์ง ์์ฑ ๋์์ด์.
๋ฏธ๋ฆฌ ๊ตฌ๊ฒฝํ๊ณ ์ถ์ผ์ ๋ถ์ ์ฝ๋๋ ๋ณด์ค ์ ์์ต๋๋ค.
https://github.com/indongyoo/functional-javascript-02
์ ์์ด ์๋ฃ๋๋๋๋ก ๋ ๊ณต์ง๋๋ฆฌ๋๋ก ํ ๊ป์.
๊ฐ์ฌํฉ๋๋ค.






