일급객체

개발 log·2021년 9월 16일
1

JS 지식

목록 보기
17/36
post-thumbnail

일급객체란 무엇일까

보통 단어의 뜻을 알기위해서는 원어를 들여다보는 편이 좋다.

일급객체의 원어는 first-class object이다

이는 1급 시민을 뜻하는 first class citizen에서 기원한 단어인데 1급 시민이란 자유롭게 거주하고 일 할 수 있고, 출입국의 자유를 가지며 투표의 자유를 가지는 시민을 의미한다.

이처럼 일급객체란 다른 객체들에게 적용 가능한 연산을 모두 지원하는 객체를 뜻한다.




일급객체로 명명하기 위해서는 충족해야하는 조건들이 있는데 아래와 같다.

  1. 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다.
  2. 변수나 자료구조에 저장할 수 있다.
  3. 함수의 매개변수에 전달할 수 있다.
  4. 함수의 반환값으로 사용할 수 있다.

자바스크립트의 함수는 아래와 같이 위의 조건을 모두 충족하므로 일급객체다.

// 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
profile
프론트엔드 개발자

0개의 댓글