본문 바로가기
Javascript

[자바스크립트] 1급 객체 first-class object

by 검소한달걀 2023. 11. 24.

 

1급 객체란,

다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.

-wikipedia

 

1급 객체의 조건

  1. 무명의 리터럴로 생성 가능 (=런타임에 생성이 가능)
  2. 변수나 자료구조(객체, 배열 등)에 저장 가능
  3. 함수의 매개변수에 전달 가능
  4. 함수의 반환값으로 사용 가능

 


 

1. 무명의 리터럴로 생성 가능 ( = 런타임에 생성이 가능)

 

const forward = (count) => {
  return ++count;
};

const back = function(count) {
  return --count;
};

 

함수 작성 시 함수명 없이 바로 변수에 저장할 수 있다.

 

2. 변수나 자료구조(객체, 배열 등)에 저장 가능

 

const distance = { forward, back };

const distanceArray = [ forward, back ];

 

변수나 자료구조에 함수를 저장할 수 있다.

 

4. 함수의 반환값으로 사용 가능 + 3. 함수의 매개변수에 전달 가능

 

function distanceCounter(num) {
  let count = 0;

  return function () {
    count = num(count);
    return count;
  };
}

const forwardResult = distanceCounter(distance.forward);
console.log(forwardResult()); // 1
console.log(forwardResult()); // 2

const backResult = distanceCounter(distance.back);
console.log(backResult()); // -1
console.log(backResult()); // -2

 

함수는 매개변수에게 함수를 전달할 수 있다.

 


 

일급 객체 함수는 객체와 동일하게 사용할 수 있다는 의미

-> 값을 사용할 수 있는 곳이라면 어디든지 리터럴로 정의 가능하고 런타임에 함수 객체로 평가된다.

 

 

함수 객체와 일반 객체의 차이

-> 일반 객체와 다르게 함수 객체는 호출 가능

-> 일반 객체와 다르게 함수 고유의 프로퍼티를 소유 (name, length 등)