[Java Script] 고차 함수

June hyoung Park·2020년 9월 25일
0

JavaScript

목록 보기
13/18

일급 객체

프로그래밍에서의 일급 객체(First-class citizens)란 다음과 같은 특성을 갖고있다.

변수에 할당(assignment)할 수 있다.
다른 함수의 인자(argument)로 전달될 수 있다.
다른 함수의 결과로서 리턴될 수 있다.

자바스크립트에서 함수는 일급 객체이므로 값처럼 인자로 전달할 수 있으며 반환할 수도 있다. 이는 함수를 데이터(string, number, boolean, array, object)를 다루듯이 다룰 수 있다는 걸 의미하며, 값 처럼 함수의 인자로 전달할 수 있으며 반환할 수도 있다.

고차 함수 (Higher Order Function)

고차 함수(higher order function)란 함수를 인자로 받거나 함수를 리턴하는 함수를 말한다. 이 때 함수의 인자로 전달되는 함수를 콜백 함수(callback function)라고 하며, 고차 함수는 인자로 받은 콜백 함수를 필요한 시점에 호출하거나 클로저를 생성하여 반환한다.

// ===================   
// example 1
// ===================
function double(num) {
  return num * 2;
}

function doubleNum(func, num) {// 함수를 인자로 전달받고 함수를 반환하는 고차 함수
  return func(num);
}
console.log(doubleNum(double, 4)); // -> 8

/* doubleNum은 다른 함수를 인자로 받는 고차 함수다. 
doubleNum의 첫 번째 인자 func에 함수 double이 들어올 경우, 
double은 함수 doubleNum의 콜백 함수이다. */




// ===================   
// example 2
// ===================

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

// doubleAdder가 리턴하는 함수를 변수에 저장할 수 있다.. (일급 객체)
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8

고차 함수는 외부 상태 변경이나 가변 데이터를 피하고 불변성(Immutability)을 지향하는 함수형 프로그래밍에 기반을 두고 있으며, 순수 함수(Pure function)와 보조 함수의 조합을 통해 로직 내에 존재하는 조건문과 반복문을 제거하여 복잡성을 해결하고 부수 효과(Side effect)를 최대한 억제하여 상태 변경을 피하려는 프로그래밍 패러다임이다.

또한 유용하게 사용해왔던 Array.prototype.map, Array.prototype.filter, Array.prototype.reduce 메서드 처럼 배열을 순회하며 배열의 각 요소에 대하여 인자로 주어진 콜백함수를 실행하는 메서드들 또한 Array 객체에 내장되어있는 고차함수이다.

profile
Take me home~~~~

0개의 댓글