일급객체(first-class citizen)

여동희·2023년 2월 13일
0

JavaScript에는 특별한 대우를 받는 일급 객체(first-class citizen)가 있다.
대표적인 것이 바로 함수이다. 아래는 이러한 함수의 3가지 특징이다

일급 객체의 3가지 특징

  • 변수에 할당(assignment) 할 수 있다.
const func = function () {
  console.log('hi');
}

이러한 특징으로 함수를 배열의 요소나 객체의 속성값으로 저장할 수 있으며, 함수를 데이터(string, number, boolean, array, object) 처럼 다룰 수 있다.
변수에 할당 했을 때의 또다른 예제

/*
 * 아래는 변수 square에 함수를 할당하는 함수 표현식입니다.
 * JavaScript에서 함수는 일급 객체이기 때문에 변수에 할당할 수 있습니다.
 *
 * 함수 표현식은 할당 전에 사용할 수 없습니다.
 * square(7); // --> ReferenceError: Can't find variable: square
 */

const square = function (num) {
  return num * num;
};

// 변수 square에는 함수가 할당되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있습니다.
output = square(7);
console.log(output); // --> 49
  • 다른 함수의 전달인자(argument)로 전달될 수 있다.
    다른 함수에 인자로 전달되는 함수를 콜백함수라고 하며, 아래의 예시에서 콜백함수는 sayHello 이다.
function sayHello() {
  return "Hello, ";
}
function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}
// greeting() 함수의 인자로 sayHello() 함수 전달
greeting(sayHello, "JavaScript!"); // Hello, JavaScript!
  • 다른 함수의 결과로서 리턴될 수 있다.
    함수를 반환하는 함수를 고차함수라고 한다.
function sayHello() {
  return function() { // 함수를 변수처럼 취급하는 첫번째 특징으로인해 반환도 가능하다.
    console.log("Hello!");
  }
}
// 변수를 사용했을 때
const sayHello = function() {
  return function() {
    console.log("Hello!");
  }
}
const myFunc = sayHello(); // 만약 sayHello()를 직접 호출하면 반환된 함수를 호출하지 않고, 함수 자체를 반환하기 때문에 반환된 함수를 다른 변수에 저장하여 사용해야 한다.
myFunc(); // Hello!

반환된 함수를 그대로 호출했을 때

profile
프론트엔드 개발자 준비생

0개의 댓글