일급객체란 무엇일까
보통 단어의 뜻을 알기위해서는 원어를 들여다보는 편이 좋다.
일급객체의 원어는 first-class object
이다
이는 1급 시민을 뜻하는 first class citizen
에서 기원한 단어인데 1급 시민이란 자유롭게 거주하고 일 할 수 있고, 출입국의 자유를 가지며 투표의 자유를 가지는 시민을 의미한다.
이처럼 일급객체란 다른 객체들에게 적용 가능한 연산을 모두 지원하는 객체를 뜻한다.
일급객체로 명명하기 위해서는 충족해야하는 조건들이 있는데 아래와 같다.
자바스크립트의 함수는 아래와 같이 위의 조건을 모두 충족하므로 일급객체다.
// 1. 함수는 무명의 리터럴로 생성할 수 있다.
// 2. 함수는 변수에 저장할 수 있다.
// 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.
const increase = function (num) {
return ++num;
};
const decrease = function (num) {
return --num;
};
// 2. 함수는 객체에 저장할 수 있다.
const predicates = { increase, decrease};
// 3. 함수의 매개변수에 전달할 수 있다.
// 4. 함수의 반환값으로 사용할 수 있다.
function makeCounter(predicate) {
let num = 0;
return function() {
num = predicate(num);
return num;
};
}
// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const increaser = makeCounter(predicates.increase);
console.log(increaser()); // 1
console.log(increaser()); // 2
// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const decrease = makeCounter(predicates.decrease);
console.log(decreaser()); // -1
console.log(decreaser()); // -2