β¨ Curry ν¨μλ?
ν¨μλ₯Ό λ°ν(return)νλ κ³ μ°¨ν¨μμ μΌμ’ μ΄λ€.
μ΄λ, λ°νλλ ν¨μλ₯Ό ν΄λ‘μ (Closure)λΌκ³ μΉνκΈ°λ νλ€.
function curry(func) { // curry() λ 컀리ν¨μμ΄λ€
return (function closure(something){ // callback() λ ν΄λ‘μ μ΄λ€
return (console.log(something))
})
}
β¨ Currying(컀λ§)μ΄λ?
μ¬λ¬ κ°μ 맀κ°λ³μλ₯Ό λ¨μΌ νΈμΆμ μ²λ¦¬νλ ν¨μλ₯Ό, κ°κ°μ 맀κ°λ³μκ° κ°λ³λ‘ νΈμΆλ μ μλλ‘ λ³ννλ μμ μ 컀λ§(Currying)μ΄λΌκ³ νλ€.
function sum(a, b) { // μΌλ° ν¨μ sum() μ 컀λ§νμ¬ λ³νν΄λ³΄λλ‘ νλ€.
return a + b;
}
function curry(func) { // func μμλ 컀λ§μ ν ν¨μκ° λ€μ΄μ€κ² λλ€.
return function(a) {
return function(b){
return func(a, b);
}
}
}
let curriedSum = curry(sum);
// curriedSum μ νκ²½ μμλ sum μ΄ μ μ₯λμλ€.
// curriedSumμλ curry(sum)μ νΈμΆκ°μΈ function(a)κ° μ μ₯λμ΄ μλ€.
let firstNum = curriedSum(1);
// a λΌλ 맀κ°λ³μ μμ 1μ΄ μΈμλ‘ λ€μ΄κ°κ² λμλ€.
// firstNumμ νκ²½ μμλ sum κ³Ό 1 μ΄ μ μ₯λμλ€.
// firstNumμλ function(a) μ νΈμΆκ°μΈ function(b)κ° μ μ₯λμ΄ μλ€.
let secondNum = firstNum(2);
// b λΌλ 맀κ°λ³μ μμ 2κ° μΈμλ‘ λ€μ΄κ°κ² λμλ€.
// function(b) μ νΈμΆκ°μ func(a, b) μμΌλ―λ‘, sum(1, 2)κ° μ€νλμ΄ λ°νλλ€.
// sum(1, 2) μ κ²°κ³Όκ°μ 3μ΄λ€.
console.log(secondNum) // 3
// μ΄ κ³Όμ μ λ€μκ³Όλ κ°λ€.
console.log(curriedSum(1)(2) // 3
μμ μμ μμ curriedSum λλ firstNum μ²λΌ μ΅μ’ κ°μ΄ λ°νλκΈ° μ΄μ , μΈμκ° κ³ μ λ νκ²½μ μ κ·Όν μ μλ ν΄λ‘μ λ₯Ό "partial" μ΄λΌκ³ μΉνλ€.
⨠컀λ§μ μ₯μ
ν¨μμ μ¬λ¬ κ°μ μΈμκ° μ λ¬λ κ²½μ°, νΉμ κ°μ "κ³ μ "μν΄μΌλ‘μ¨ ν¨μμ λ³λμ±μ μ€μ΄κ³ μμ μ±μ λμΌ μ μλ€. λν, κΈ° μμ±λ ν¨μλ₯Ό μ½κ² μ¬μ¬μ©ν μ μλ€.
β¨ λ§λ¬΄λ¦¬
μ¬λ¬ κ°μ ν¨μλ₯Ό μ€μ²©ν΄μ μ¬μ©νλ©΄ ꡬννκ³ μ νλ κΈ°λ₯ λλ μ½λμ ν¨μ¨μ±μ λμΌ μ μμ κ²μ΄λ€.
μκ³ λ¦¬μ¦μ ν λ μμ±νλ ν¨μμλ λ€μ λ€λ₯Έ μ κ·Όμ΄ νμνλ©°, μ λ¬λ κ²μΌλ‘ μμλλ μΈμμ λ³λμ±μ νΉνλ λ κ³ λ €ν΄μΌ ν κ²μ΄λ€.
μ°Έκ³ μλ£
'π» DEV > Javascript & NodeJS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Javascript] Async ν¨μμ Await (0) | 2021.05.27 |
---|---|
[Javascript] Promise (νλ‘λ―Έμ€) (0) | 2021.05.27 |
[Javascript] λΉλκΈ°, λκΈ° ν¨μ (Asynchronous, Synchronous) λ? (0) | 2021.05.27 |
[Javascript] Class (0) | 2021.05.13 |
[Javascript] κ°μ²΄μ Deep Copy (κΉμ 볡μ¬) (0) | 2021.05.09 |
λκΈ