함수와 일급 객체
일급 객체로서의 함수
다음 조건을 만족하는 객체를 일급 객체라고 한다.
- 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다.
- 변수나 자료구조등에 저장할 수 있다.
- 함수의 매개변수로 전달할 수 있다.
- 함수의 반환값으로 사용할 수 있다.
자바스크립트의 함수는 위의 조건들을 모두 만족하므로 일급 객체이다.
함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미고, 값을 사용할 수 있는 곳이라면 어디서든지 리터럴로 정의할 수 있다는 것이다.
일급 객체로서 함수가 가지는 가장 큰 특징은 함수의 매개변수로 전달할 수 있고, 반환값으로도 사용할 수 있다는 것이다.
함수가 일급 객체로 취급되는 5가지 경우에 대해 알아보자.
변수에 변수를 할당
자바스크립트에서 함수는 값으로 취급되기 때문에, 다른 변수와 마찬가지로 변수에 할당할 수 있다.
const sayHello = function() {
console.log('Hello!');
};
sayHello(); // "Hello!" 출력
함수를 인자로 다른 함수에 전달
함수를 다른 함수에 인자로 전달할 수 있다. 매개변수로써 쓰이는 함수를 콜백 함수라고 한다.
function callFunction(func) {
func();
}
const sayHello = function() {
console.log('Hello!');
};
callFunction(sayHello); // "Hello!" 출력
함수 반환
함수가 다른 함수를 반환할 수 있다. 함수 팩토리나 클로저를 작성하는데 사용된다.
function createAdder(num) {
return function(x) {
return x + num;
}
}
const addFive = createAdder(5);
console.log(addFive(10)); // 15 출력
객체의 프로퍼티로 함수 할당
객체의 프로퍼티 값으로 함수를 할당할 수 있다.
const person = {
name: 'Sanghyeon',
sayHello: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
person.sayHello(); // "Hello, my name is Sanghyeon" 출력
배열의 요소로 함수 할당
함수는 배열의 요소로도 넣을 수 있다.
const myArray = [
function(a, b) {
return a + b;
},
function(a, b) {
return a - b;
}
];
console.log(myArray[0](5, 10)); // 15 출력
console.log(myArray[1](10, 5)); // 5 출력
참조
- 모던자바스크립트 DeepDive
- 내일배움캠프 JS 문법 종합반 강의자료