๋ชฉ์ฐจ
JS์ ์กด์ฌํ๋ ์ปค๋ง์ ๋ํด์ ์์๋ณด์.
1. ์ปค๋ง์ด๋?
์ปค๋ง์ ํจ์์ ํจ๊ป ์ฌ์ฉํ๋ ๊ณ ๊ธ๊ธฐ์ ๋ก, JS ๋ฟ ์๋๋ผ ๋ค๋ฅธ ์ธ์ด์์๋ ์ฌ์ฉํ ์ ์๋ ๊ธฐ์ ์ด๋ค.
ํ์ํ ์ธ์๋ณด๋ค ์ ์ ์์ ์ธ์๋ฅผ ๋ฐ์ผ๋ฉด, ๋๋จธ์ง ์ธ์๋ฅผ ์ธ์๋ก ๋ฐ๋ ๋ค๋ฅธ ํจ์๋ฅผ ๋ฐํํ๋ค.
์ฆ, ํ ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ์ธ์๊ฐ ์์ง ๋ ์ค๋น ๋์์ ๊ฒฝ์ฐ
ํ์ฌ ์กด์ฌํ๋ ์ธ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ ์ปค๋ง์ผ๋ก ์์ฑํ ์ ์๋ค.
์์ 1)
์๋๋ ์ผ๋ฐ์ ์ผ๋ก ํจ์๋ฅผ ์์ฑํ ๊ฒฝ์ฐ์ด๋ค.
function mulTwoTerm (a, b, c, d) {
return (a + b) * (c + d);
}
const mulTwoTerm2 = (a, b, c, d) => (a + b) * (c + d);
console.log(
mulTwoTerm(1, 2, 3, 4),
mulTwoTerm2(1, 2, 3, 4),
);
>>> 21 21
์ด๋ฌํ ๊ฒฝ์ฐ ํจ์ ํธ์ถ ์ ํ ๋ฒ์ 4๊ฐ์ ์ธ์๋ฅผ ๋ชจ๋ ๋ฐ์ ํ ๊ฐ์ ๋ฐํํ๋ค.
์์ 2)
์๋๋ ์ปค๋ง์ผ๋ก ํจ์๋ฅผ ์์ฑํ ๊ฒฝ์ฐ์ด๋ค.
function curryMulTwoTerm (a){
return function (b) {
return function (c) {
return function (d) {
return (a + b) * (c + d);
}
}
}
}
const curryMulTwoTerm2 = a => b => c => d => (a + b) * (c + d);
console.log(
curryMulTwoTerm(1)(2)(3)(4),
curryMulTwoTerm2(1)(2)(3)(4),
);
>>> 21 21
ํธ์ถ ์ ์ผ๋ฐ์ ์ธ ํจ์์ ๋ค๋ฅธ ๊ฒ์ ์ ์ ์๋ค.
๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ ๋ฌํ ๋ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋ ํ๋์ฉ ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ฅผ ํ์ฉํ๋ ์์๋ฅผ ์ข ๋ ์ดํด๋ณด์.
const curryMulTwoTermA = curryMulTwoTerm(1);
const curryMulTwoTermB = curryMulTwoTerm(1)(2);
const curryMulTwoTermC = curryMulTwoTerm(1)(2)(3);
console.log(curryMulTwoTermA);
console.log(curryMulTwoTermB);
console.log(curryMulTwoTermC);
>>>
ƒ (b) {
return function (c) {
return function (d) {
return (a + b) * (c + d);
}
}
}
>>>
ƒ (c) {
return function (d) {
return (a + b) * (c + d);
}
}
>>>
ƒ (d) {
return (a + b) * (c + d);
}
์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ ํจ์์ ์ธ์๋ณด๋ค ์ ๊ฒ ์ ๋ฌ์ ํ ๊ฒฝ์ฐ
๊ฐ๊ฐ์ ๋จ๊ณ ๋ณ ํจ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ฅผ ์ด์ด์ ์ถ๊ฐ๋ก ๊ฐ์ ์ ๋ฌํ๋ฉด
console.log(
curryMulTwoTermA(2)(3)(4),
curryMulTwoTermB(3)(4),
curryMulTwoTermC(4)
);
>>> 21 21 21
๋ชจ๋ ๊ฐ์ ๊ฐ์ ๋ฐํํ๋๋ก ๊ฐ์ ์ ๋ฌํ ์์์ด๋ค.
์ด์ฒ๋ผ ํจ์ ์คํ์ ํ์ํ ๋ชจ๋ ์ธ์๋ฅผ ํ ๋ฒ์ ๋ฐ์ ์ ์๋ ๊ฒฝ์ฐ
์ปค๋ง์ ํตํด ์์ฑํ ํจ์๋ฅผ ํ์ฉํ ์ ์๋ค.
'๐ | WEB DEV > Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JS_๊ธฐ์ (2)_ IIFE(์ฆ์ ์คํ ํจ์ ํํ) (0) | 2023.03.16 |
---|---|
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (22)_ ๋งค๊ฐ๋ณ์ (๊ธฐ๋ณธ๊ฐ, arguments, ๋๋จธ์ง ๋ณ์, ์ด์์ ์ธ ํจ์?) (0) | 2023.03.12 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (21)_ ์ผ๊ธ ๊ฐ์ฒด (0) | 2023.03.11 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (20)_ for ๋ฃจํ+ (0) | 2023.03.08 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (19)_ case๋ฌธ, ๊ฐ์ฒด ํ์ฉ ๋ณํ case๋ฌธ (0) | 2023.03.07 |
๋๊ธ