오늘은 고차함수 그리고 그전에 일급함수에 대해서 적을것이다. 사실 아직도 잘 모르겠다.
내가 보고 듣고 깨달은걸 주저리 주저리 적을것이기 때문에 혹여나 누군가 내 글을 보고 공부를 하려고 한다면 권유는 안할거다.
먼저 최고존엄이신 MDN에서 정의한 일급함수란
"함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현합니다. 예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 매개변수로 제공하거나, 함수가 함수를 반환할 수 있으며, 변수에도 할당할 수 있습니다."
라고 나와있다. 함수 표현식 처럼 함수를 변수에 담아주거나 인자 매개변수로 전달이 가능하다."
즉 변수에 담을 수 있고, 인자나 값으로도 사용이 가능하다는 뜻이다
예를 들자면
const foo = function() {
console.log("foobar");
}
// 변수를 사용해 호출
foo();
// return "foobar"
// ----------------------------------
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// `sayHello`를 `greeting` 함수에 인자로 전달
greeting(sayHello, "JavaScript!");
// return "Hello, JavaScript!"
위는 익명의 함수를 변수에 할당하여 변수에 괄호를 추가하여 함수를 호출한것이고, 아래는 sayHello 라는 함수를 greeting 라는 함수의 인자로 전달해줬다.
위의 예시들이 함수를 어떻게 변수나 인자로 다루는지 보여주는 예시이다.
이처럼 함수를 값으로 다룰수 있는 것을 일급 함수라고 한다.
그러면 고차함수는 무엇인가.
function sayHello() {
return function() {
console.log("Hello!");
}
}
위의 예시가 고차함수이다. js에서는 함수를 변수처럼 취급하기 때문에 함수를 return이 가능하다.
MDN에서는 "함수를 반환하는 함수를 고차 함수라고 부릅니다." 라고 나와있다.
고차함수를 이용하여 다른 함수를 완전히 새로운 함수로 다시 조립하는 방법으로 프로그래밍이 가능하다.