참고
MDN - 일급함수
함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현한다. 예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 매개변수로 제공하거나, 함수가 함수를 반환할 수 있으며, 변수에도 할당할 수 있다.
즉! 함수를 일급 객체로 간주한다는 뜻이다.
일급 객체에 대해 썼던 과거 블로그!
정리하고 넘어가자면, 1급 객체의 조건은 다음과 같다.
- 변수나 데이터에 할당 가능
- 객체의 인자로 넘기기 가능
- 객체의 리턴값으로 리턴 가능
const square = function (num) {
return num * num
}
함수 표현식을 생각하면 된다.
이 특성 때문에 callback 함수가 사용 가능해진다.
function square(num) {
return num * num;
}
// func는 매개변수임, 이름은 아무거나 지정해도 상관없음
function squareNum(func, number) {
return func(number);
}
let result = squareNum(square, 3)
const squareFactory = (func)=>{
return (num)=>{
func(num)
}
}
const factory = squareFactory(square)
factory(3) // 9
위의 예시에서 볼 수 있었지만 함수가 일급 객체이기 때문에 할 수 있는 일들이 생겼다. 그것들에 대해 더 작성할 것이다.
함수가 인자로 함수를 받거나 함수를 리턴하는 함수
위에서 구현헀던 이 코드를 보면 된다.
const squareFactory = (func)=>{
return (num)=>{
func(num)
}
}
const factory = squareFactory(square)
factory(3) // 9
squareFactory 함수는 함수를 인자로 받아 새로운 함수를 리턴하는 고차함수다.
인자로 들어가는 함수!
router.get('/', (req,res)=>{
...
})