Software Engineering

고차함수(Higher order function) in Javascript

JO_turn 2020. 11. 14. 17:45

자바스크립트에는 일급객체(first-class citizen)가 존재한다.

//일급객체 중 하나가 함수이다.

 

일급객체의 특징

변수에 할당(assignment)할 수 있다.

//함수 표현식

다른 함수의 인자(argument)로 전달될 수 있다.

다른 함수의 결과로써 리턴될 수 있다.

//함수를 데이터 다루듯이 다룰 수 있다.

//변수에 저장할 수 있기 때문에 배열의 요소, 객체의 속성 값으로 저장하는 것 또한 가능하다.

 

고차함수란 함수를 인자로 받거나 함수를 리턴하는 함수를 말한다.

이때 다른 함수(caller)의 인자로 전달되는 함수를 콜백함수(callback function)라고 한다.

 

콜백함수를 전달받은 함수(caller)는 콜백함수를 호출(invoke)할 수 있다.

caller함수는 조건에 따라 콜백함수의 실행 여부를 결정할 수 있고, 여러 번 실행할 수 있다.

 

고차함수 예제

function double(num) {
  return num * 2;
 }
//수를 2배로 return하는 함수 선언

function doublenum(callback, num) {
  return callback(num);
}
//다른함수를 인자로 받는 함수 선언

doublenum(double, 4); //8
//함수 double을 인자로 받아서 실행
//doublenum = caller function
//double = callback fuction

let variable = double;
//변수 variavle에 double 함수할당

variable(2); //4

function adder(num) {
  return function(num2) {
    return num + num2
  }
}
//다른 함수의 결과를 return하는 함수 선언

adder(3)(2); // 5

function doubleAdder(callback, num) {
  let doubled = callback(num);
  
  return function(num) {
    return doubled + num;
  }
}

doubleAdder(double, 3)(2); // 8
//doubleeAdder는 함수 double을 콜백함수로 받고, 
//그 결과값에 num을 더하는 고차함수다.

각각의 작업을 하는 별도의 함수들을 인자로 받아 모든 작업을 하나의 함수로 할 수 있다.

즉, 객체지향의 특징 중 추상화(abstraction)가 가능하다

 

'Software Engineering' 카테고리의 다른 글

node.js module 사용법  (0) 2020.11.14
동기(Synchronous), 비동기(Asynchronous)  (0) 2020.11.14
HTML  (0) 2020.11.12
Linked List in Date structure  (4) 2020.11.10
Queue in Date structure  (0) 2020.11.07