ํจ์ ์ฒด์ธ๊ณผ ์ง์ฐ ์คํ
JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ๊ฑฐ์ jQuery ๋ค์์ผ๋ก ๋ง์ด ์ฌ์ฉํ์ง ์์๊น ์ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ underscore ๋๋ lodash ๋ผ๋ ๊ฒ์ด ์๋ค. (๋ ๋ผ์ด๋ฌ๋ฆฌ๋ ์ฐจํ ํฉ์น๋ ๊ฒ์ด ๋ ผ์๋๊ณ ์๋ค.)
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ค์ํ ๋ฐ์ดํฐ๋ค์ ์ฒด์ธ ํํ๋ก ์คํ ํ ์ ์๊ฒ ํด ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์จ ๋ก์ง์ ๊น๋ํ๊ฒ ์ ์ง์ํค๋๋ฐ ์ข์ ์ญํ ์ ํด ์ค๋ค. JavaScript ๊ธฐ๋ณธ ํจ์์๋ ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๋ map, reduce ๊ฐ์ ๊ฒ์ด ์์ง๋ง, lodash์ underscore๊ฐ ์กฐ๊ธ ๋ ํธํ๊ฒ ์ฌ์ฉ ํ ์ ์๊ณ , ์ถ๊ฐ๋ก ๋ค์ํ ์ ํธ๋ฆฌํฐ๋ค์ด ํฌํจ๋์ด ์์ด์ ์ฐ๋ฆฌ ํ์ฌ์์๋ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉํ๊ณ ์๋ค.
๊ทธ ์ค lodash์๋ ์ง์ฐ ์คํ(Lazy Evaluation) ๊ธฐ๋ฒ์ด ํฌํจ๋์๋๋ฐ, ์ด์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํด๋ณด๊ณ ์ ํ๋ค.
๋ฐฐ์ด์ ์ฒ๋ฆฌํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๋ค์๊ณผ ๊ฐ์ด for ๋ฌธ ๊ฐ์ ๋ฃจํ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ lodash์ map๊ณผ filter๋ฅผ ์ด์ฉํด์ ํจ์ํ ํด์ฒด์ธ ๊ธฐ๋ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
์ด ๊ธฐ๋ฒ์ด ์ต์ํ์ง ์๋ค๋ฉด ์ฒ์์ ์ฝ๊ฐ ์ดํดํ๊ธฐ ์ฝ์ง ์์ ์ ์์ง๋ง, for ๋ฃจํ์ ๋นํด ๊ฐ๊ฐ์ ๋ก์ง์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๊ฐ ๋์ด ์์ผ๋ฏ๋ก, ์ฐจํ ๋๋ฒ๊น ์ ํ๊ฑฐ๋ ๋ก์ง์ ์ถ๊ฐ/์์ ํ ๋ ํจ์ฌ ์ฝ๊ณ ํธํ๊ฒ ํ ์ ์๋ค.
๋ค๋ง, ๊ฐ๊ฐ์ map/filter ํจ์๋ง๋ค ๋ฃจํ๋ฅผ ํ ๋ฒ์ฉ ๋๊ณ , ๋ ๊ฐ๊ฐ ๋ฃจํ๋ฅผ ๋ ๋ ๋ง๋ค ๋ฐฐ์ด์ ์๋ก ์์ฑํ๋ฏ๋ก, ์ํฉ์ ๋ฐ๋ผ ์คํ์๋๊ฐ ๊ธ๊ฒฉํ ๋๋ ค์ง๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋ํ๊ฒ ์ก์๋จน๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ง์ฐ ์คํ์ด๋ผ๋ ๊ธฐ๋ฒ์ด ์๊ฒผ๋๋ฐ, lodash์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๋ฐ, ์ฒซ ํจ์ ์ฌ์ฉ์ lodash ์ _.map(numbers, function) ๋์ ์ _(numbers).map(function) ์ด์ ๊ฐ์ด lodash์ ์์ฑ์๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค ํจ์ ์ฒด์ธ์ ์ฌ์ฉํ๊ณ , ํจ์์ฒด์ธ์ ๋ง์ง๋ง์ .value() ๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํจ์์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฐ๊ฐ์ ํจ์๋ค์ด ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ค์ ์ฒ๋ฆฌํ ๋ค์ ๋ค์ ์ฒด์ธ์ผ๋ก ๋์ด๊ฐ๋ ๊ฒ์ด ์๋๋ผ, ์์ ํ๋๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ค์ ์ฒด์ธ์ผ๋ก ๋๊ธฐ๋ ๋ฐฉ์์ผ๋ก ์คํ ๋ฐฉ์์ด ๋ณํ๋ค.
์ฆ, map์์ ์ฒซ๋ฒ์งธ ์์์ 1์ ๋ํ๊ณ filter ์์ 2๋ณด๋ค ํฐ ๊ฐ์ธ ๊ฒฝ์ฐ๋ง ๋ค์ map ์์ ์์น์ ๋ฆฌํด. ๊ทธ ๋ค์ ๋๋ฒ์งธ ์์๋ฅผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ๋ ๊ทธ ๋ค์ ์ธ๋ฒ์งธ ์์๋ฅผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ. ์ด๋ฐ ๋ฐฉ์์ผ๋ก for ๋ฌธ๊ณผ ๊ฐ์ ํํ๋ก ๋ฃจํ๋ฅผ ๋๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์์ 3๊ฐ๊ฐ ์๋ 3๊ฐ์ ํจ์ ์ฒด์ธ์ ์ต๋ 9๋ฒ(์ฌ๊ธฐ์๋ 8๋ฒ)์ ๋ฃจํ๋ฅผ ๋๋ ๋ฐ๋ฉด, ์ง์ฐ ์คํ์ผ๋ก ์คํํ ํจ์ ์ฒด์ธ์ ์์์ ๊ฐฏ์๋งํผ์ธ 3๋ฒ์ ๋ฃจํ๋ง ๋๊ฒ ๋์ด ์คํ ์๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์๊ฒ ๋๋ค.
์ฐธ๊ณ ๋ก, ๋งจ ๋ง์ง๋ง ์ฒด์ธ์ reduce ๋ฑ์ ๋ฃ์ผ๋ฉด value๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
๋ํ ๋ค์์ฒ๋ผ ํจ์ ์ฒด์ธ์ ๋ค์ด๊ฐ๋ ํจ์๋ค์ ๋ชจ๋ ๋ ๋ฆฝ ํจ์๋ก ๋นผ์ ์กฐ๊ธ ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๊น์ด ํ์์ผ๋ก ๋ง๋ค๋ฉด, ๋ก์ง์ด ๋ณต์กํ ๊ฒฝ์ฐ๋ผ๋ ํจ์ฌ ๋ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ก ๋ง๋ค ์ ์๋ค.
๊ธ์ ์ฐ๊ณ ๋ ๋ค์ ๊ตฌ๊ธ๋ง์ ํด ๋ดค๋๋ Lazy Evaluation์ ๋ํ ํจ์ฌ ๋ ์ฌ์ด ์ค๋ช ์ด ์์๋ค. -_-a ๋ค์ ๊ธ์ ๋ณด๋ฉด ํจ์ฌ ๋ ๋ช ํํ๊ฒ ์ดํด๊ฐ ๋ ๋ฏ. Introducing Lazy Evaluation









