일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.
출처 : wiki/일급_객체
다음과 같은 조건을 만족하는 객체를 일급 객체라고 합니다.
위 특성과 함께 예시를 함께 봅시다.
// 함수를 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
일급 객체를 학습하다 보면 자주 등장하는 개념이 클로저입니다.
위키에서도 '클로저'란 용어가 나옵니다. 아래와 같이 클로저는 자바스크립트에서만 사용되는 기술이 아닙니다. 클로저에 대해 간단히 정리해보겠습니다. 클로저는 다음 포스팅으로 더 자세히 다뤄보겠습니다.
일급 함수란 함수를 일급 객체로 취급하는 것을 말한다. 자바스크립트의 경우 함수도 객체로 표현하기 때문에 일급 객체 및 일급 함수라고 부른다.
클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.
변수의 유지: 클로저를 통해 함수는 자신이 생성될 때의 범위(스코프) 내의 변수에 접근할 수 있습니다. 이로 인해 함수 내에서 외부 변수의 값을 계속 유지하면서 활용할 수 있습니다.
일급 함수의 활용: 클로저를 활용하면 함수를 반환할 때 그 함수가 반환된 시점의 컨텍스트(변수 등)를 기억합니다. 이로 인해 반환된 함수는 클로저를 통해 해당 컨텍스트에 접근할 수 있습니다.
캡슐화와 프라이빗 변수: 클로저를 사용하면 비공개(private) 변수와 함수를 만들 수 있습니다. 이를 통해 모듈 패턴과 같이 외부에서 접근할 수 없는 데이터를 구현할 수 있습니다.