반응형
이번 포스팅에서는 일급 객체(First Class Object)와 일급 함수(First Class Function)에 대해 알아보고자 한다.
프로그래밍 언어를 공부하다 보면 "일급 객체" 혹은 "일급 함수"라는 말을 많이 듣게 된다. 과연 어떠한 객체 혹은 함수에게 "일급"이라는 표현을 사용하는 것일까? 우리는 특정 조건을 만족하는 객체들을 "일급 객체"라고 부른다.
컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(First Class Object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.
출처 : https://ko.wikipedia.org/wiki/일급_객체
다시 한번 일급 객체의 특성을 나열해보면 다음과 같다.
- 무명의 리터럴로 생성할 수 있다.
- 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
- 함수의 매개변수에 전달할 수 있다.
- 함수의 반환값으로 사용할 수 있다.
자바스크립트의 함수는 위의 조건을 만족하기에 일급 객체가 되고 " 일급 함수 " 란 함수를 일급 객체로 취급하는 것을 일컫는다. 함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미이고 객체는 값이므로 이는 결국 함수를 값과 동일하게 취급할 수 있다는 말이 된다. 간단히 말해, "함수"라는 대상이 "값"으로서 사용될 수 있다고 생각하면 된다. 예제 코드를 보면서 좀 더 이해해보도록 하자.
👉 변수에 함수 할당
// 1. 함수는 무명의 리터럴로 생성할 수 있다.
// 2. 함수는 변수에 저장할 수 있다.
const add = function (num1, num2) {
return num1 + num2;
}
// 2. 함수는 객체에 저장할 수 있다.
const calculator = { add }
👉 함수에 인자로 전달
// 3. 함수의 매개변수에 전달할 수 있다.
function sayHello() {
return "Hello, ";
}
function greeting(message, name) {
console.log(message() + name);
}
// `sayHello`를 전달인자로 `greeting` 함수에 전달
greeting(sayHello, "JavaScript!"); // Hello, JavaScript!
👉 함수 반환
function helloWorld() {
return () => {
console.log("Hello, world!");
}
}
프로그래밍 언어는 해당 언어의 함수들이 다른 변수처럼 다루어질 때 일급 함수를 가진다고 한다. 그리고 자바스크립트의 함수는 변수에 값으로서 할당될 수 있고, 다른 함수들에 인자로 전달되며, 다른 함수에 의해 반환될 수도 있다. 앞으로는 자바스크립트 함수를 마주칠 때마다 다음 문구가 무의식적으로 떠올랐으면 한다.
JavaScript의 함수는 일급 함수다!!
반응형
'JavaScript' 카테고리의 다른 글
JavaScript - this? this! (0) | 2023.10.26 |
---|---|
JavaScript - 불변성(Immutability) (2) | 2023.10.23 |
JavaScript - 전역(global)변수 , 지역(local)변수 (0) | 2022.02.04 |
JavaScript ES6 - 템플릿 리터럴 , 객체 리터럴 , 구조분해 할당 (0) | 2022.01.27 |
JavaScript - DOM (2) (0) | 2022.01.12 |