고차함수를 알아보기 전에 알아볼것이 있다.
자바스크립트에서는 특별한 대우를 받는 일급 객체(first-class citizen)이 있다.
대표적으로 함수가 있는데, 자바스크립트에서 함수는 아래와 같이 취급된다.
고차 함수는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다.
함수는 변수에 저장할 수 있으며 함수를 담은 변수를 인자로 전달받을 수 있다. 또한 함수 내부에서 변수 자체에 함수를 할당 할 수도 있다.
function double(n) {
return n * 2;
}
function num(func, n) {
return func(n)
}
let result = num(double, 2);
console.log(result); // 4
⭐️ 함수 num은 double 함수와 숫자를 인자로 받아 4를 출력한다.
⭐️ 함수 double은 num의 콜백 함수이다.
⭐️ 콜백 함수란
다른 함수의 인자(argument)로 전달되는 함수를 콜백함수라고 하는데, 어떤 작업이 완료되었 을 떄 호출하는 경우가 많아, 답신 전화를 뜻하는 콜백이라는 이름이 붙여졌다. 콜백함수는 아예 호출하지 않을 수도 있고, 여러번 실행할 수 있고, 특정작업이 완료된 후에 호출하는 경우 도 있다.
function add (addNum){
return function (num) {
return num + addNum;
};
}
let result = add(2)(5);
console.log(result); // 7
⭐️ add 함수는 다른 함수를 리턴하는 고차함수로 인자 한개를 받아서 함수(익명함수)를 리턴하고, 리턴되는 함수(익명함수)는 인자 한개를 받아서 addNum과 더한 값을 리턴한다.
추상화란 복잡한 어떤 것들을 압축해서 핵심만 추출한 상태로 만드는 것으로, 추상화의 관점에서 고차함수가 갖는 이점이 있다.
CPU는 0과 1만 이해하지만, 코드가 해석되고 복잡한것들은 자바스크립트가 대신해주기에 우리는 자바스크립트 문법을 올바르게 사용하는 것만으로도, 다양한 프로그램을 비교적 쉽게 작성할 수 있는데 이처럼 문제해결이 더 쉬워지는 것이 추상화의 이점이다.
반복되는 로직은 별도의 함수로 작성하는것이 추상화의 좋은 사례로, 추상화의 관점에서 함수를 보게 되면 함수는 사고, 또는 논리의 묶음이기 때문이다.
함수는 값을 전달받아 값을 리턴하고, 값에대한 로직은 감춰져있으며 값의 수준에서 추상화는 단순히 값을 받아 처리하는 수준이다.
하지만 고차함수를 사용했을 때 이수준을 사고의 추상화(함수를 전달받아 처리하는 수준) 수준으로 끌어 올릴수 있는데 고차함수는 함수를 전달받거나 함수를 리턴하고 함수에 대한 로직은 감춰져 있기 때문에 추상화의 수준이 높아지는 만큼 생산성도 높아지게 된다.