First-class Function
💡 First-class Function(일급함수)란?
프로그래밍 언어는 해당 언어의 함수들이 다른 변수처럼 다루어질 때 일급 함수라고 한다.
Javascript는 위의 해당 언어중 하나로, Javascript에서 사용되는 함수는 일급 함수라고 할 수 있을 것 같다.
아래와 같은 3가지 조건을 만족해야 일급함수라고 할 수 있다.
- 함수를 변수에 할당 가능하다.
- 다른함수에 매개변수로 함수를 전달 할 수 있다. (콜백함수)
- 함수를 반환 할 수 있다. (고차함수)
1. 함수를 변수에 할당 가능하다.
// 1. 함수를 func라는 변수에 할당
const func = () => {
return 'Test'
}
// 2. 변수를 사용해 호출할 수 있다.
func()
2. 다른함수에 매개변수로 함수를 전달 할 수 있다. (callback함수)
아래 예제1. 처럼 Javascript에서 제공하는 내장함수 setTimeout()를 사용 할 때,
첫번째 인자로 () => { console.log("Hello world") }
라는 함수를 인자로 호출하고 있는 것을 확인 할 수 있다.
// 예제 1.
setTimeout(() => {
console.log('Hello world')
}, 1000)
아래 예제 2. 에서는 함수 sayHello를 전달인자로 greeting 함수에 전달 하고 있는 것을 확인 할 수 있다.
// 예제 2.
function sayHello() {
return 'Hello, '
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name)
}
// 함수 sayHello를 전달인자로 greeting 함수에 전달 할 수 있다.
greeting(sayHello, 'World!') // Hello, World!
📗 다른 함수에 전달인자로 전달하는 함수를 콜백 함수라고 한다. 여기서 sayHello()는 콜백 함수이다.
3. 함수를 반환 할 수 있다. (고차함수)
아래 예제에서, sayHello 함수로부터 함수 (str2) => { console.log(str1 + str2); }
를 반환하고 있다.
자바스크립트에서 함수들은 값들로서 다루어질 수 있기 때문에 함수를 반환할 수 있다.
function sayHello(str1) {
return (str2) => {
console.log(str1 + str2)
}
}
// helloFn 에 (str2) => { console.log(str1 + str2); }라는 함수가 할당됨
const helloFn = sayHello('Hello, ')
// Hello, world!가 출력됨
helloFn('world!')