윤시의 블로그

[JavaScript] 일급객체 (First Class Object) 본문

JavaScript

[JavaScript] 일급객체 (First Class Object)

yo09 2025. 3. 12. 09:39

JavaScript에서 일급 객체(First-Class Object)는 "객체로서 함수와 같은 다른 데이터 타입처럼 취급될 수 있는 객체"를 말한다. 함수변수도 일급 객체로 취급된다. 이를 이해하기 위해서는 "객체"라는 개념과 값처럼 다룰 수 있다는 의미를 잘 이해하는 것이 중요하다.

 

1. 객체란 무엇인가?

자바스크립트에서 객체는 프로퍼티(속성)와 메소드(기능)를 가질 수 있는 데이터 구조이다. 객체는 키-값 쌍으로 구성된 데이터 집합이다.

 
const person = {
  name: 'John',
  age: 30,
  greet: function() {
    console.log('Hello!');
  }
};

이 코드에서 person 객체는 name, age, greet라는 프로퍼티를 가지고 있다. 그리고 greet는 함수다.


2. 일급 객체의 특징

  1. 변수에 할당할 수 있다: 다른 값과 마찬가지로 변수에 할당할 수 있다.
  2. 함수의 인자로 전달할 수 있다: 다른 함수의 인자로 전달할 수 있다.
  3. 함수의 반환값으로 사용할 수 있다: 함수에서 결과로 반환할 수 있다.
  4. 객체의 속성으로 사용할 수 있다: 객체의 프로퍼티로 저장할 수 있다.

3. 자바스크립트에서 함수는 왜 일급 객체인가?

자바스크립트에서 함수는 일급 객체다. 즉, 함수는 위 조건들을 모두 만족하며, 이는 함수가 값처럼 다룰 수 있다는 의미다. 예를 들어, 함수는 다른 변수에 할당될 수 있고, 함수의 인자로 전달될 수 있으며, 다른 함수에서 반환값으로 사용할 수 있고, 객체의 프로퍼티로 저장될 수 있다.


4 .함수가 일급 객체임을 보여주는 예제

예시 1: 변수에 함수 할당하기

 
const greet = function() {
  console.log('Hello, World!');
};

greet();  // 'Hello, World!'
  • greet 변수에 익명 함수를 할당했다.
  • 이 익명 함수는 console.log('Hello, World!')를 실행하는 기능을 가지고 있다.
  • 그 후 greet()를 호출하면, greet 변수에 할당된 함수가 실행되어 'Hello, World!'가 출력된다.

이 코드에서 greet는 함수값처럼 다룬다는 점을 보여준다. 함수를 변수에 저장할 수 있다는 것이 바로 일급 객체의 특성이다.

 

 

예시 2: 함수의 인자로 전달하기

function callFunction(fn) {
  fn();
}

callFunction(function() {
  console.log('This is a function!');
});  // 'This is a function!'​
  • callFunction은 fn이라는 매개변수를 받는 함수다. 이 fn은 함수여야 한다.
  • callFunction을 호출할 때, function() { console.log('This is a function!'); }라는 익명 함수를 인자로 전달하고 있다.
  • callFunction 내부에서 fn()을 호출하면, 인자로 전달된 익명 함수가 실행된다.
  • callFunction을 실행하면 'This is a function!'이 출력된다.

이 예제는 함수를 다른 함수의 인자로 전달하는 방법을 보여준다. 함수가 일급 객체이므로 함수를 값처럼 취급하여 다른 함수에 전달할 수 있다는 점을 보여준다.

 

 

예시 3: 함수의 반환값으로 사용하기

function multiply(a) {
  return function(b) {
    return a * b;
  };
}

const double = multiply(2);
console.log(double(5));  // 10
  • multiply 함수는 하나의 매개변수 a를 받아 내부에서 또 다른 함수를 반환한다. 이 반환된 함수는 매개변수 b를 받아 a * b를 반환한다.
  • multiply(2)를 호출하면, a 값이 2로 설정된 내부 함수가 반환된다. 이 반환된 함수는 double 변수에 할당된다.
  • double(5)를 호출하면, a는 2이고, b는 5이므로 2 * 5가 계산되어 10이 반환된다.

이 예제는 함수가 다른 함수를 반환하는 방식이다. multiply 함수에서 반환된 함수새로운 함수로 사용될 수 있다는 점을 보여준다.

 

 

 

예시 4: 객체의 속성으로 함수 사용하기

const obj = {
  greet: function() {
    console.log('Hello from the object!');
  }
};

obj.greet();  // 'Hello from the object!'
  • obj는 객체이고, 그 안에 greet라는 함수가 속성으로 포함되어 있다. 이 greet는 함수다.
  • obj.greet()를 호출하면, obj 객체에 포함된 greet 함수가 실행된다.
  • 이 경우, greet는 객체의 프로퍼티로 저장된 함수로, 객체 내에서 함수를 다룰 수 있음을 보여준다.

이 예제는 함수가 객체의 속성으로 사용될 수 있다는 점을 보여주며, 함수가 값처럼 취급되어 객체에 속성으로 포함될 수 있음을 보여준다.

 


5. 결론

JavaScript에서 함수는 일급 객체이기 때문에, 함수 자체를 값처럼 다룰 수 있다. 변수에 할당하거나, 다른 함수에 전달하거나, 다른 함수의 반환값으로 사용할 수 있다는 점에서 유용한 특징을 가지고 있다. 이런 특성 덕분에 자바스크립트는 유연하고 강력한 함수형 프로그래밍을 가능하게 하며, 콜백 함수, 고차 함수 등을 이용해 다양한 방식으로 문제를 해결할 수 있다.