[JS] 고차함수(higher order function)

특별한 대우를 받는 함수

  • 자바스크립트에서 특별한 대우를 받는 것 → 일급 객체(first-class citizen)
  • 그 중 하나가 함수!
    • 변수에 할당(assignment)할 수 있다.
    • 다른 함수의 인자(argument)로 전달될 수 있다.
    • 다른 함수의 결과로서 리턴될 수 있다.

고차 함수란(higher order function)

  • 함수를 인자(argument)로 받거나 함수를 리턴하는 함수
  • 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)
  • caller - 조건에 따라 콜백 함수의 실행 여부를 결정할 수도 있고, 여러 번 실행도 가능
  • invoke - 콜백 함수를 전달받은 함수가 콜백 함수를 호출 하는 것
  • 커리 함수 - 함수를 리턴하는 함수 *논리학자 하스켈 커리의 이름을 따라 만든 이름

다른 함수를 인자로 받는 경우

function double(num) {
  return num * 2;
}

function doubleNum(func, num) {
  return func(num);
}

let output = doubleNum(double, 4);
console.log(output); // -> 8
  • 함수 doubleNum → 고차 함수
  • 함수 func → 함수 doubleNum의 콜백 함수
  • 함수 double → 함수 doubleNum의 콜백 함수

함수를 리턴하는 경우

function adder(added) {
  return function (num) {
    return num + added;
  };
}

let output = adder(5)(3); // -> 8
console.log(output); // -> 8

const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5
  • 함수 adder → 고차함수
  • adder → 인자 한개를 입력받아서 익명 함수를 리턴
  • 리턴되는 익명 함수 → 인자를 받아서 added와 더한 값을 리턴
  • adder(added)는 함수이므로 함수 호출 연산자 '()'를 사용 가능
  • *adder가 리턴하는 함수를 변수에 저장할 수 있다. ← 함수는 일급 객체이기 때문

함수를 인자로 받고, 함수를 리턴하는 경우

function double(num) {
  return num * 2;
}

function doubleAdder(added, func) {
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  };
}

doubleAdder(5, double)(3); // -> 13

const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8
  • 함수 doubleAdder → 고차함수
  • 함수 func → 함수 doubleAdder의 콜백 함수
  • 함수 double → 함수 doubleAdder의 콜백 함수

내장 고차함수

filter 메소드

  • 배열의 filter 메소드는 배열의 요소 중 특정 조건을 만족하는 요소들만을 걸러내는 메소드.
  • 걸러내는 기준이 되는 특정 조건은 함수 형태로 filter 메소드의 인자로 전달되어야 함
  • filter 메소드는 인자로 전달되는 콜백 함수에 배열의 요소를 다시 전달
  • 콜백 함수는 전달받은 배열의 요소를 받아 (조건에 따라) 참(true) 또는 거짓(false)을 리턴해야 함
  • 배열의 각 요소가
  • 특정 논리(함수)에 따르면, 사실(boolean)일 때
  • 따로 분류한다(filter).

map 메소드

  • 배열의 각 요소가
  • 특정 논리(함수)에 의해
  • 다른 요소로 지정(map) 된다.

reduce 메소드

  • 배열의 각 요소를
  • 특정 응축 방법(함수)에 따라
  • 원하는 하나의 형태로
  • 응축한다(reduction).

좋은 웹페이지 즐겨찾기