Front-end/JavaScript

JS FP 5편 - 함수형 프로그래밍의 핵심기술(Hof, clusure, currying)

파리외 개발자 2023. 3. 10. 23:33

HOF - 고계함수

 

JS 클로저 3편 - HOF(고계함수, Higher Order Function)

HOF hof는 여러 상황에 유동적으로 대응할 수 있는 일반화된 함수를 말한다. 기본적인 함수가 전편에서 설명했던 first class의 기능을 가질 때 HOF로 만들어질 수 있다. 로그인 기능을 예시로 HOF를 만

developefeel.tistory.com

//HOF
const hof = () => () => 5;
hof()();

const hoF = (fn) => fn(5);
hoF(function a(x) {
  return x;
});

고계함수는 함수를 인자로 받고 함수를 리턴한다.

위 코드에서 hof는 인자로 받은 함수에 5라는 인자를 전달하여 리턴한다.

그리고 전달된 함수 a는 인자값을 그대로 리턴하므로

결과는 5이다.

 

Closure - 클로져

 

JS 클로저 5편 - Closure(함수 커링에서의 클로저 현상)

커링에서의 함수 생명주기 function a() { let grandpa = "grandpa"; return function b() { let father = "father"; return function c() { let son = "son"; return `${grandpa} > ${father} > ${son}`; }; }; } a()()(); a함수 (변수 : grandpa, 리턴값

developefeel.tistory.com

//Closure
const closure = function () {
  let private = 1;
  return function getNum() {
    return private;
  };
};

const getnumber = closure();
getnumber(); //1

클로져는 리턴되는 내장함수를 다른 변수에 저장해

저장된 시점의 함수상태를 유지하는 것이다.

위 코드에서 private의 값이 변화하더라도

1인 시점에 저장되었으므로 getnumber는 계속해서 1을 리턴한다.

 

Currying - 커링

 

JS 클로저 4편 - Currying(함수 커링 기법)

Currying 커링은 두 개 이상의 인자를 받는 함수의 구조를 분리하여 인자를 받는 중간에 개입할 수 있게 하는 방법이다. const multiplyBy = function (num1) { return function (num2) { return num1 * num2; }; }; const multip

developefeel.tistory.com

//currying
const multiply = (a, b) => a * b;
multiply(5, 3);

const curriedMultiply = (a) => (b) => a * b;
curriedMultiply(5)(3);

const curriedMultiplyBy5 = curriedMultiply(5);
curriedMultiplyBy5(3); //15

커링은 인자를 나눠서 받아서 

첫 번째 인자의 값을 기억하여 사용하는 방식이다

위 코드에서는 5를 인자로 전달한 상태의 값을 저장한 곳에

마지막 인자인 3을 전달하면 연산이 마무리되는 것이다.