JS - 고차함수

김도영·2022년 5월 9일
0
post-thumbnail

고차함수란?

고차 함수(higer order function)란 함수를 인자(aurgument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수를 말한다. 함수는 변수에 저장할 수 있고, 함수를 담은 변수를 인자로 전달 받을 수 있으며, 함수 내부에서도 변수에 함수를 할당할 수 있다. 그리고 함수는 이 변수를 리턴할 수 있다. 고차 함수는 변수가 빠졌을 뿐, 함수 자체를 리턴 하고 동일하게 동작한다. 이때 다른 함수(caller)의 인자로 전달되는 함수를 콜백 함수(callback funtion)라고 한다. 콜백 함수를 전달받은 고차함수는 함수 내에서 호출(invoke)할 수 있다.

커리 함수

'함수를 리턴하는 함수'로 이 방법을 고안해 낸 논리학자 하스켈 커리(Haskell curry)의 이름을 따 커리함수라고 한다. 여기서 정확하게 구분짓자면 고차함수가 커리함수를 포함한다.

다음의 예시가 있다.

  • 다른 함수를 인자로 받는 경우
  • function double(number) {
      return number * 2;
    }
    function doubleNum(func, number) {
      return func(number);
    }
    /*
    -함수 doubleNum은 다른 함수를 인자로 받는 고차함수이다.
    -함수 doubleNum의 첫 번째 인자 func에 함수가 들어올 경우,
     함수 func는 함수 doubleNum의 콜백함수이다.
    -아래와 같은 경우, 함수 double은 함수 doubleNum의 콜백함수이다.
    */
    let output = dobuleNum(double, 4);
    console.log(output); // -> 8
  • 함수를 리턴하는 경우
  • function adder(add) {
      return function (number) {
        return number + add;
      };
    }
    /*
    -함수 add는 다른 함수를 리턴하는 고차함수이다.
    -add는 인자 하나를 입력받아 함수(익명)를 리턴한다.
    -리턴되는 익명함수는 인자 하나를 받아서 add와 더한값을 리턴한다.
    */
    //adder(5)는 함수이므로 함수 호출 연산자 '()'를 사용할 수 있다.
    let output = adder(5)(3); // -> 8
    console.log(output); // -> 8
    
    //adder가 리턴하는 함수를 변수에 저장할 수 있다.
    // javasciprt에서 함수는 일급개체이기 때문이다.
    const add3 = adder(3);
    output = add3(2);
    console.log(output); // -> 5
  • 함수를 인자로 받고, 함수를 리턴하는 경우
  • function double(number) {
      return number * 2;
    }
    
    function doubleAdder(add, func) {
      const doubled = func(add);
      return function (number) {
        return number + doubled;
      };
    }
    /*
    -함수 doubleAdder는 고차함수이다.
    -함수 doubleAdder의 인자 func는 함수 doubleAdder의 콜백함수이다.
    -함수 double은 함수 doubleAdder의 콜백으로 전달됐다.
    */
    
    doubleAdder(5, double)(3); // -> 13
    
    //doubleAdder가 리턴하는 함수를 변수에 저장할 수 있다.
    const addTwice3 = doubleAdder(3, double);
    addTwice(2); // -> 8
    profile
    Blockchain Developer

    0개의 댓글