[JS] 일급 객체란?

yeji kang·2023년 8월 29일
0

javascript

목록 보기
11/11

일급 객체란?

자바스크립트의 함수는 일급 객체입니다.

  • 일급 객체에 대해 정리하고
  • JS에서 함수가 일급 객체로서의 특성이 무엇인지 예시와 함께 알아봅시다.

✅ 일급 객체

일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.

출처 : wiki/일급_객체

✅ 일급 객체의 특성

다음과 같은 조건을 만족하는 객체를 일급 객체라고 합니다.

  1. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
  2. 함수의 매개변수에 전달할 수 있다.
  3. 함수의 반환값으로 사용할 수 있다.

✅ 코드 예시

위 특성과 함께 예시를 함께 봅시다.

✔ 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.

  • 함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미입니다.
  • 객체는 값이므로 함수는 값과 동일하게 취급할 수 있습니다.
// 함수를 increase 라는 변수에 저장.
const increase = function (num) {
  return ++num;
};

const decrease = function (num) {
  return --num;
};

// 함수는 객체에 저장할 수 있다.
const predicates = { increase, decrease } ;

✔ 함수의 매개변수에 전달할 수 있다.

//  변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
const greet = function(name) {
  return `Hello, ${name}!`;
};

console.log(greet("Alice")); // 출력: Hello, Alice!

//  함수를 다른 함수의 인자로 전달하기
function processGreeting(greetingFunction, name) {
  return greetingFunction(name);
}

const result = processGreeting(greet, "Bob");
console.log(result); // 출력: Hello, Bob!

✔ 함수의 반환값으로 사용할 수 있다.

// 함수의 반환값으로 사용할 수 있다.
function multiplier(factor) {
  return function(number) {
    return number * factor;
  };
}

const double = multiplier(2);
console.log(double(5)); // 출력: 10

✅ 일급 함수와 클로저

일급 객체를 학습하다 보면 자주 등장하는 개념이 클로저입니다.
위키에서도 '클로저'란 용어가 나옵니다. 아래와 같이 클로저는 자바스크립트에서만 사용되는 기술이 아닙니다. 클로저에 대해 간단히 정리해보겠습니다. 클로저는 다음 포스팅으로 더 자세히 다뤄보겠습니다.

일급객체_예제_일급함수_클로저

✔ 일급 함수

일급 함수란 함수를 일급 객체로 취급하는 것을 말한다. 자바스크립트의 경우 함수도 객체로 표현하기 때문에 일급 객체 및 일급 함수라고 부른다.

✔ 클로저

클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.

  • 클로저는 일급 함수의 특별한 케이스로 볼 수 있으며, 함수가 일급 객체로서의 특성을 좀 더 깊게 이해하고 활용하는 데 중요한 개념입니다. 클로저는 일급 함수의 특성을 활용하여 함수가 자신이 생성된 렉시컬 환경의 변수에 계속 접근할 수 있는 메커니즘입니다.
  • 클로저는 아래와 같은 이유로 일급 함수와 밀접한 관련이 있습니다.

✔ 클로저와 일급 함수의 밀접한 관련

  1. 변수의 유지: 클로저를 통해 함수는 자신이 생성될 때의 범위(스코프) 내의 변수에 접근할 수 있습니다. 이로 인해 함수 내에서 외부 변수의 값을 계속 유지하면서 활용할 수 있습니다.

  2. 일급 함수의 활용: 클로저를 활용하면 함수를 반환할 때 그 함수가 반환된 시점의 컨텍스트(변수 등)를 기억합니다. 이로 인해 반환된 함수는 클로저를 통해 해당 컨텍스트에 접근할 수 있습니다.

  3. 캡슐화와 프라이빗 변수: 클로저를 사용하면 비공개(private) 변수와 함수를 만들 수 있습니다. 이를 통해 모듈 패턴과 같이 외부에서 접근할 수 없는 데이터를 구현할 수 있습니다.

0개의 댓글