자바스크립트에는 일급객체(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 |