์๋ฐ์คํฌ๋ฆฝํธ ์ดํฐ๋ ์ดํฐ ํฌํผ ์คํธ๋ฆผ ํจ์ ์ต์ ํ๋ฅผ ํ๊ตฌํฉ๋๋ค. ์ด๋ ์ฑ๋ฅ ํฅ์์ ์ํด ์ฐ์ฐ์ ๊ฒฐํฉํ๋ ๊ธฐ์ ์ ๋๋ค. ์๋ ๋ฐฉ์๊ณผ ๊ทธ ์ํฅ์ ์์๋ณด์ธ์.
์๋ฐ์คํฌ๋ฆฝํธ ์ดํฐ๋ ์ดํฐ ํฌํผ ์คํธ๋ฆผ ํจ์ ์ต์ ํ: ์ฐ์ฐ ๊ฒฐํฉ
ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์ ๋ฐ์ดํฐ ์ปฌ๋ ์
์ ๋ค๋ฃจ๋ ๊ฒ์ ํํ ์์
์
๋๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์์น์ map, filter, reduce์ ๊ฐ์ ์ดํฐ๋ ์ดํฐ์ ํฌํผ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฐ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ฐ์ฐ์ ๋ฌด๋ถ๋ณํ๊ฒ ์ฐ๊ฒฐํ๋ฉด ์ฑ๋ฅ ๋นํจ์จ์ฑ์ ์ด๋ํ ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์ดํฐ๋ ์ดํฐ ํฌํผ ์คํธ๋ฆผ ํจ์ ์ต์ ํ, ํนํ ์ฐ์ฐ ๊ฒฐํฉ์ด ์ค์ํด์ง๋๋ค.
๋ฌธ์ ์ดํดํ๊ธฐ: ๋นํจ์จ์ ์ธ ์ฒด์ด๋
๋ค์ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
const numbers = [1, 2, 3, 4, 5];
const result = numbers
.map(x => x * 2)
.filter(x => x > 5)
.reduce((acc, x) => acc + x, 0);
console.log(result); // ์ถ๋ ฅ: 18
์ด ์ฝ๋๋ ๋จผ์ ๊ฐ ์ซ์๋ฅผ ๋ ๋ฐฐ๋ก ๋ง๋ค๊ณ , 5 ์ดํ์ธ ์ซ์๋ฅผ ๊ฑธ๋ฌ๋ธ ๋ค์, ๋จ์ ์ซ์๋ค์ ํฉ์ฐํฉ๋๋ค. ๊ธฐ๋ฅ์ ์ผ๋ก๋ ์ ํํ์ง๋ง, ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ ์ค๊ฐ ๋ฐฐ์ด์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์
๋๋ค. ๊ฐ map๊ณผ filter ์ฐ์ฐ์ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๋ฉฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฒ๋ฆฌ ์๊ฐ์ ์๋ชจํฉ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ์
์ ๊ฒฝ์ฐ ์ด๋ฌํ ์ค๋ฒํค๋๋ ์๋นํด์ง ์ ์์ต๋๋ค.
๋นํจ์จ์ ์ธ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฌ๋ฌ ๋ฒ์ ์ํ: ๊ฐ ์ฐ์ฐ์ ์ ์ฒด ์ ๋ ฅ ๋ฐฐ์ด์ ์ํํฉ๋๋ค.
- ์ค๊ฐ ๋ฐฐ์ด ์์ฑ: ๊ฐ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํฉ๋๋ค.
ํด๊ฒฐ์ฑ : ์คํธ๋ฆผ ํจ์ ๊ณผ ์ฐ์ฐ ๊ฒฐํฉ
์คํธ๋ฆผ ํจ์ (๋๋ ์ฐ์ฐ ๊ฒฐํฉ)์ ์ฌ๋ฌ ์ฐ์ฐ์ ๋จ์ผ ๋ฃจํ๋ก ๊ฒฐํฉํ์ฌ ์ด๋ฌํ ๋นํจ์จ์ฑ์ ์ค์ด๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ต์ ํ ๊ธฐ์ ์ ๋๋ค. ์ค๊ฐ ๋ฐฐ์ด์ ์์ฑํ๋ ๋์ , ํจ์ ๋ ์ฐ์ฐ์ ๊ฐ ์์๋ฅผ ํ ๋ฒ๋ง ์ฒ๋ฆฌํ๋ฉฐ ๋ชจ๋ ๋ณํ ๋ฐ ํํฐ๋ง ์กฐ๊ฑด์ ๋จ์ผ ํจ์ค์์ ์ ์ฉํฉ๋๋ค.
ํต์ฌ ์์ด๋์ด๋ ์ผ๋ จ์ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ์คํํ ์ ์๋ ๋จ์ผ์ ์ต์ ํ๋ ํจ์๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ข ์ข ํธ๋์ค๋์๋ ์ ์ฌํ ๊ธฐ์ ์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค.
์ฐ์ฐ ๊ฒฐํฉ์ ์๋ ๋ฐฉ์
์ด์ ์์ ์ ์ฐ์ฐ ๊ฒฐํฉ์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ์ค๋ช
ํด ๋ณด๊ฒ ์ต๋๋ค. map๊ณผ filter๋ฅผ ๋ณ๋๋ก ์ํํ๋ ๋์ , ๋ ๋ณํ์ ๋์์ ์ ์ฉํ๋ ๋จ์ผ ์ฐ์ฐ์ผ๋ก ๊ฒฐํฉํ ์ ์์ต๋๋ค.
์ด๋ฅผ ๋ฌ์ฑํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋จ์ผ ๋ฃจํ ๋ด์์ ๋ก์ง์ ์๋์ผ๋ก ๊ฒฐํฉํ๋ ๊ฒ์ด์ง๋ง, ์ด๋ ๊ธ๋ฐฉ ๋ณต์กํด์ง๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ๋ ์ฐ์ํ ํด๊ฒฐ์ฑ ์ ํธ๋์ค๋์๋ ์๋์ผ๋ก ์คํธ๋ฆผ ํจ์ ์ ์ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํจ์ํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
๊ฐ์ ํจ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์์ (์์ฐ ๋ชฉ์ ):
์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค ๋ฐฐ์ด ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํธ๋ฆผ ํจ์ ์ ์ง์ํ์ง ์์ง๋ง, ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฐฐ์ด ์ฐ์ฐ์ ํจ์ ๋ฒ์ ์ ์ ๊ณตํ๋ `streamfusion`์ด๋ผ๋ ๊ฐ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ํด ๋ด ์๋ค.
// ๊ฐ์์ streamfusion ๋ผ์ด๋ธ๋ฌ๋ฆฌ
const streamfusion = {
mapFilterReduce: (array, mapFn, filterFn, reduceFn, initialValue) => {
let accumulator = initialValue;
for (let i = 0; i < array.length; i++) {
const mappedValue = mapFn(array[i]);
if (filterFn(mappedValue)) {
accumulator = reduceFn(accumulator, mappedValue);
}
}
return accumulator;
}
};
const numbers = [1, 2, 3, 4, 5];
const result = streamfusion.mapFilterReduce(
numbers,
x => x * 2, // map ํจ์
x => x > 5, // filter ํจ์
(acc, x) => acc + x, // reduce ํจ์
0 // ์ด๊ธฐ๊ฐ
);
console.log(result); // ์ถ๋ ฅ: 18
์ด ์์ ์์ `streamfusion.mapFilterReduce`๋ map, filter, reduce ์ฐ์ฐ์ ๋จ์ผ ํจ์๋ก ๊ฒฐํฉํฉ๋๋ค. ์ด ํจ์๋ ๋ฐฐ์ด์ ํ ๋ฒ๋ง ์ํํ๋ฉฐ, ๋จ์ผ ํจ์ค์์ ๋ณํ๊ณผ ํํฐ๋ง ์กฐ๊ฑด์ ์ ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
ํธ๋์ค๋์: ๋ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์
ํธ๋์ค๋์๋ ์คํธ๋ฆผ ํจ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ ์ผ๋ฐ์ ์ด๊ณ ์กฐํฉ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ํธ๋์ค๋์๋ ๋ฆฌ๋์ฑ ํจ์๋ฅผ ๋ณํํ๋ ํจ์์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฐ์ฐ์ ์ฆ์ ์คํํ์ง ์๊ณ ๋ณํ ํ์ดํ๋ผ์ธ์ ์ ์ํ ์ ์์ด ํจ์จ์ ์ธ ์ฐ์ฐ ๊ฒฐํฉ์ด ๊ฐ๋ฅํด์ง๋๋ค.
ํธ๋์ค๋์๋ฅผ ์ฒ์๋ถํฐ ๊ตฌํํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ง๋ง, Ramda.js๋ transducers-js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํธ๋์ค๋์๋ฅผ ํ๋ฅญํ๊ฒ ์ง์ํฉ๋๋ค.
๋ค์์ Ramda.js๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๋ค:
const R = require('ramda');
const numbers = [1, 2, 3, 4, 5];
const transducer = R.compose(
R.map(x => x * 2),
R.filter(x => x > 5)
);
const result = R.transduce(transducer, R.add, 0, numbers);
console.log(result); // ์ถ๋ ฅ: 18
์ด ์์ ์์:
R.compose๋map๊ณผfilter์ฐ์ฐ์ ํฉ์ฑ์ ์์ฑํฉ๋๋ค.R.transduce๋R.add๋ฅผ ๋ฆฌ๋์ฑ ํจ์๋ก,0์ ์ด๊ธฐ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ํธ๋์ค๋์๋ฅผ ์ ์ฉํฉ๋๋ค.
Ramda.js๋ ๋ด๋ถ์ ์ผ๋ก ์ฐ์ฐ์ ๊ฒฐํฉํ์ฌ ์คํ์ ์ต์ ํํ๊ณ , ์ค๊ฐ ๋ฐฐ์ด ์์ฑ์ ํผํฉ๋๋ค.
์คํธ๋ฆผ ํจ์ ๊ณผ ์ฐ์ฐ ๊ฒฐํฉ์ ์ด์
- ์ฑ๋ฅ ํฅ์: ์ํ ํ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ค์ฌ ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ์คํ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์๋น ๊ฐ์: ์ค๊ฐ ๋ฐฐ์ด ์์ฑ์ ํผํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋ฒํค๋๋ฅผ ์ต์ํํฉ๋๋ค.
- ์ฝ๋ ๊ฐ๋ ์ฑ ์ฆ๊ฐ: Ramda.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋ ์ ์ธ์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง ์ ์์ต๋๋ค.
- ํฅ์๋ ์กฐํฉ์ฑ: ํธ๋์ค๋์๋ ๋ชจ๋์์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๋ณต์กํ ๋ฐ์ดํฐ ๋ณํ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
์คํธ๋ฆผ ํจ์ ์ ์ธ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ
์คํธ๋ฆผ ํจ์ ์ ๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค์์ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค:
- ๋๊ท๋ชจ ๋ฐ์ดํฐ์ : ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ค๊ฐ ๋ฐฐ์ด์ ํผํจ์ผ๋ก์จ ์ป๋ ์ฑ๋ฅ ์ด๋์ด ์ค์ํด์ง๋๋ค.
- ๋ณต์กํ ๋ฐ์ดํฐ ๋ณํ: ์ฌ๋ฌ ๋ณํ ๋ฐ ํํฐ๋ง ์กฐ๊ฑด์ ์ ์ฉํ ๋ ์คํธ๋ฆผ ํจ์ ์ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ : ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์คํธ๋ฆผ ํจ์ ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
ํ๊ณ ๋ฐ ๊ณ ๋ ค ์ฌํญ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ: ์คํธ๋ฆผ ํจ์ ์ ๊ตฌํํ๋ ค๋ฉด Ramda.js๋ transducers-js์ ๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ํ๋ก์ ํธ์ ์์กด์ฑ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
- ๋ณต์ก์ฑ: ํธ๋์ค๋์๋ฅผ ์ดํดํ๊ณ ๊ตฌํํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ผ๋ฉฐ, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ๋ํ ํ์คํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
- ๋๋ฒ๊น : ํจ์ ๋ ์ฐ์ฐ์ ์คํ ํ๋ฆ์ด ๋ ๋ช ์์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ ์ฐ์ฐ์ ๋๋ฒ๊น ํ๋ ๊ฒ๋ณด๋ค ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ํญ์ ํ์ํ ๊ฒ์ ์๋: ์์ ๋ฐ์ดํฐ์ ์ด๋ ๊ฐ๋จํ ๋ณํ์ ๊ฒฝ์ฐ, ์คํธ๋ฆผ ํจ์ ์ ์ฌ์ฉํ๋ ์ค๋ฒํค๋๊ฐ ์ด์ ๋ณด๋ค ํด ์ ์์ต๋๋ค. ์คํธ๋ฆผ ํจ์ ์ด ์ ๋ง๋ก ํ์ํ์ง ํ๋จํ๊ธฐ ์ํด ํญ์ ์ฝ๋๋ฅผ ๋ฒค์น๋งํนํ์ธ์.
์ค์ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
์คํธ๋ฆผ ํจ์ ๊ณผ ์ฐ์ฐ ๊ฒฐํฉ์ ๋ค์์ ํฌํจํ ๋ค์ํ ๋ถ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค:
- ๋ฐ์ดํฐ ๋ถ์: ํต๊ณ ๋ถ์, ๋ฐ์ดํฐ ๋ง์ด๋, ๋จธ์ ๋ฌ๋์ ์ํ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ.
- ์น ๊ฐ๋ฐ: API๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๊ณ ํํฐ๋งํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ํ์. ์๋ฅผ ๋ค์ด, ์ ์์๊ฑฐ๋ API์์ ๋๋์ ์ํ ๋ชฉ๋ก์ ๊ฐ์ ธ์ ์ฌ์ฉ์ ์ ํธ๋์ ๋ฐ๋ผ ํํฐ๋งํ ๋ค์ UI ๊ตฌ์ฑ ์์์ ๋งคํํ๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. ์คํธ๋ฆผ ํจ์ ์ ์ด ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: ํ๋ ์ด์ด ์์น, ๊ฐ์ฒด ์์ฑ, ์ถฉ๋ ๊ฐ์ง์ ๊ฐ์ ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌ.
- ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ : ์ฃผ๊ฐ, ๊ฑฐ๋ ๊ธฐ๋ก, ์ํ ํ๊ฐ์ ๊ฐ์ ๊ธ์ต ๋ฐ์ดํฐ ๋ถ์. ๋๊ท๋ชจ ์ฃผ์ ๊ฑฐ๋ ๋ฐ์ดํฐ์ ์ ๋ถ์ํ์ฌ ํน์ ๊ฑฐ๋๋ ๋ฏธ๋ง์ ๊ฑฐ๋๋ฅผ ๊ฑธ๋ฌ๋ด๊ณ ๋จ์ ๊ฑฐ๋์ ํ๊ท ๊ฐ๊ฒฉ์ ๊ณ์ฐํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- ๊ณผํ ์ปดํจํ : ๊ณผํ ์ฐ๊ตฌ์์ ๋ณต์กํ ์๋ฎฌ๋ ์ด์ ๋ฐ ๋ฐ์ดํฐ ๋ถ์ ์ํ.
์์ : ์ ์์๊ฑฐ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (๊ธ๋ก๋ฒ ๊ด์ )
์ ์ธ๊ณ์ ์ผ๋ก ์ด์๋๋ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์์ํด ๋ณด์ธ์. ์ด ํ๋ซํผ์ ๋ค์ํ ์ง์ญ์ ๋๊ท๋ชจ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌํ์ฌ ๊ณตํต์ ์ธ ๊ณ ๊ฐ ์ ์๋ฅผ ํ์ ํด์ผ ํฉ๋๋ค. ๋ฐ์ดํฐ์๋ ์ฌ๋ฌ ์ธ์ด๋ก ๋ ๋ฆฌ๋ทฐ, 1์ ์์ 5์ ๊น์ง์ ํ์ , ํ์์คํฌํ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๋ค์ ๋จ๊ณ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค:
- ํ์ ์ด 3์ ๋ฏธ๋ง์ธ ๋ฆฌ๋ทฐ๋ฅผ ํํฐ๋งํฉ๋๋ค (๋ถ์ ์ ๋ฐ ์ค๋ฆฝ์ ํผ๋๋ฐฑ์ ์ง์ค).
- ์ ์ ๋ถ์์ ์ํด ๋ฆฌ๋ทฐ๋ฅผ ๊ณตํต ์ธ์ด(์: ์์ด)๋ก ๋ฒ์ญํฉ๋๋ค (์ด ๋จ๊ณ๋ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์๋ชจํฉ๋๋ค).
- ๊ฐ ๋ฆฌ๋ทฐ์ ์ ๋ฐ์ ์ธ ์ ์๋ฅผ ํ์ ํ๊ธฐ ์ํด ์ ์ ๋ถ์์ ์ํํฉ๋๋ค.
- ์ ์ ์ ์๋ฅผ ์ง๊ณํ์ฌ ๊ณตํต์ ์ธ ๊ณ ๊ฐ ์ฐ๋ ค ์ฌํญ์ ํ์ ํฉ๋๋ค.
์คํธ๋ฆผ ํจ์ ์์ด๋ ์ด๋ฌํ ๊ฐ ๋จ๊ณ๊ฐ ์ ์ฒด ๋ฐ์ดํฐ์ ์ ์ํํ๊ณ ์ค๊ฐ ๋ฐฐ์ด์ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์คํธ๋ฆผ ํจ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ฐ์ฐ์ ๋จ์ผ ํจ์ค๋ก ๊ฒฐํฉํ์ฌ, ํนํ ์ ์ธ๊ณ ๊ณ ๊ฐ์ ์๋ฐฑ๋ง ๊ฐ ๋ฆฌ๋ทฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๋์์ ์ ๊ทผ ๋ฐฉ์
์คํธ๋ฆผ ํจ์ ์ด ์๋นํ ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์จ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๋ค๋ฅธ ์ต์ ํ ๊ธฐ์ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค:
- ์ง์ฐ ํ๊ฐ(Lazy Evaluation): ๊ฒฐ๊ณผ๊ฐ ์ค์ ๋ก ํ์ํ ๋๊น์ง ์ฐ์ฐ ์คํ์ ์ง์ฐ์ํต๋๋ค. ์ด๋ฅผ ํตํด ๋ถํ์ํ ๊ณ์ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํผํ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ (Memoization): ๋น์ฉ์ด ๋ง์ด ๋๋ ํจ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ฌ ์ฌ๊ณ์ฐ์ ํผํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ: ๋น๋ฉดํ ์์
์ ์ ํฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉค๋ฒ์ญ ํ
์คํธ์
Array๋์Set์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. - WebAssembly: ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๊ฒฝ์ฐ, ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด WebAssembly ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณด์ธ์.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ์ดํฐ๋ ์ดํฐ ํฌํผ ์คํธ๋ฆผ ํจ์ ์ต์ ํ, ํนํ ์ฐ์ฐ ๊ฒฐํฉ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค. ์ฌ๋ฌ ์ฐ์ฐ์ ๋จ์ผ ๋ฃจํ๋ก ๊ฒฐํฉํจ์ผ๋ก์จ ์ํ ํ์, ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ ์คํ ์๊ฐ์ ๋จ์ถํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ๊ฐ์์ํต๋๋ค. ์คํธ๋ฆผ ํจ์ ์ ๊ตฌํํ๋ ๊ฒ์ด ๋ณต์กํ ์ ์์ง๋ง, Ramda.js๋ transducers-js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด ์ต์ ํ ๊ธฐ์ ์ ํ๋ฅญํ๊ฒ ์ง์ํฉ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌํ๊ฑฐ๋, ๋ณต์กํ ๋ฐ์ดํฐ ๋ณํ์ ์ ์ฉํ๊ฑฐ๋, ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ํ ๋ ์คํธ๋ฆผ ํจ์ ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณด์ธ์. ๊ทธ๋ฌ๋ ์คํธ๋ฆผ ํจ์ ์ด ์ ๋ง๋ก ํ์ํ์ง ํ๋จํ๊ธฐ ์ํด ํญ์ ์ฝ๋๋ฅผ ๋ฒค์น๋งํนํ๊ณ , ์ถ๊ฐ๋๋ ๋ณต์ก์ฑ๊ณผ ์ด์ ์ ๋น๊ต ํ๊ฐํด์ผ ํฉ๋๋ค. ์คํธ๋ฆผ ํจ์ ๊ณผ ์ฐ์ฐ ๊ฒฐํฉ์ ์๋ฆฌ๋ฅผ ์ดํดํจ์ผ๋ก์จ, ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฅํ ์ ์๋ ๋ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ ์ข์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.