1급 객체

이재민·2025년 6월 22일

자바스크립트

목록 보기
20/23

자바스크립트를 제대로 이해하기 위해서는 '1급 객체(First-Class Object)'라는 개념을 알아야 한다.

1급 객체의 정의

프로그래밍 언어에서 어떤 요소가 다음 세 가지 조건을 만족할 때, 이를 '1급 객체'라고 한다.

  • 변수나 데이터 구조(배열, 객체 등)에 할당 가능하다.
  • 함수의 파라미터로 전달할 수 있다.
  • 함수의 반환값으로 사용될 수 있다.

자바스크립트에서 함수는 이 모든 조건을 충족하므로 1급 객체로 간주된다.

1. 변수나 데이터 구조에 할당 가능

자바스크립트에서는 함수를 변수에 할당할 수 있다.

const greet = function(name) {
  return `Hello, ${name}`;
};

console.log(greet("Alice")); // Hello, Alice

또한 배열이나 객체에도 함수를 저장할 수 있다.

const arr = [
  function(a, b) { return a + b; },
  function(a, b) { return a - b; }
];

console.log(arr[0](5, 3)); // 8
console.log(arr[1](5, 3)); // 2

2. 함수의 파라미터로 전달 가능

자바스크립트 함수는 다른 함수에 인자로 전달될 수 있다.

function greet(name, formatter) {
  return formatter(name);
}

function formalGreeting(name) {
  return `안녕하세요, ${name}`;
}

function casualGreeting(name) {
  return `안녕, ${name}!`;
}

console.log(greet("Alice", formalGreeting)); // 안녕하세요, Alice 님
console.log(greet("Bob", casualGreeting)); // 안녕, Bob!

3. 함수의 반환값으로 사용 가능

자바스크립트에서는 함수가 다른 함수를 반환하는 형태로도 사용할 수 있다.

function createMultiplier(x) {
  return function(y) {
    return x * y;
  };
}

const multiplyByTwo = createMultiplier(2);
console.log(multiplyByTwo(5)); // 10

1급 객체로서의 함수가 중요한 이유

자바스크립트가 함수를 1급 객체로 취급하기 때문에 얻는 주요 이점은 다음과 같다.

  • 함수형 프로그래밍: 함수를 인자와 리턴값으로 자유롭게 활용하여 복잡한 로직을 단순화할 수 있다.
  • 콜백 함수: 비동기 프로그래밍이나 이벤트 핸들러와 같은 콜백 함수 구현이 간편해진다.
  • 코드의 재사용성과 유연성 증가: 함수가 독립적인 객체로 다루어지기 때문에 유연한 코드 작성이 가능하다.

etc)

고차 함수(Higher-Order Function)

고차 함수란 다음 중 하나 이상을 만족하는 함수:

  • 하나 이상의 함수를 인자로 전달받는 함수
  • 함수를 반환하는 함수

콜백 함수(Callback Function)

콜백 함수는 다른 함수에 인자로 전달되어 나중에 호출되는 함수

예상 면접 질문

자바스크립트에서 함수가 1급 객체라는 건 무슨 의미인가요?

변수에 할당, 인자로 전달, 리턴값으로 사용이 가능하다는 의미입니다.

고차 함수와 콜백 함수의 차이는 무엇인가요?

고차 함수는 함수를 인자로 받거나 반환하는 함수이고, 콜백 함수는 고차 함수에 인자로 전달되어 나중에 호출되는 함수입니다.

실제 사용 예시는 어떤 게 있나요?

 Array.prototype.map, filter, reduce, setTimeout, addEventListener 등은 모두 고차 함수이며, 이들에 전달되는 함수는 콜백 함수입니다.

출처

https://velog.io/@reveloper-1311/일급-객체First-Class-Object란

https://inpa.tistory.com/entry/CS-👨‍💻-일급-객체first-class-object#1.변수나데이터에담을있어야한다.-1

https://developer.mozilla.org/ko/docs/Glossary/First-class_Function

profile
안녕하세요

0개의 댓글