티스토리 뷰
✅ JavaScript의 함수는 1급 객체(First Class Object)입니다. 그렇다면 1급 객체란 무엇인지, 왜 중요한지에 대해 살펴보겠습니다.
📌 1급 시민(First Class Citizen)
- 1급 객체란, 1급 시민의 조건을 충족하는 객체입니다. 따라서 1급 객체를 알아보기 전 1급 시민의 개념부터 알아 볼 필요가 있습니다.
1급 시민이란, 함수를 변수처럼 사용할 수 있다. 라는 의미로 해석할 수 있으며, 조건은 아래와 같습니다.
* 단, 함수와 변수를 동일한 개념으로 생각하면 안됩니다.
- 변수에 담을 수 있습니다.
- 함수의 인자(Parameter)로 전달할 수 있습니다.
- 함수의 반환 값으로 전달할 수 있습니다.
// 예시
let numValue = 1; // [1] 충족
function addNum(param){ // [2] 충족
let addValue = param + 1;
return addValue; // [3] 충족
}
console.log(addNum(numValue)); // [2] 충족
위 예시처럼 대부분의 프로그래밍 언어에서는 숫자/문자형은 1급 시민의 조건을 충족합니다.
JavaScript에서는 기본 자료형( Number, String, Boolean, Null, Undefined, Symbol, Object-(Function, Array) )이 1급 시민의 조건을 충족합니다.
📌 1급 객체(First Class Object)
- 1급 객체는 1급 시민의 조건을 충족하는 객체를 뜻합니다.
- JavaScript에서는 객체는 1급 시민의 조건을 모두 충족하기 때문에, 1급 객체입니다.
let user = { id: '1급 객체' } // [1. 변수에 담을 수 있습니다.]
function setUser (param) { // [2. 함수의 인자로 전달할 수 있습니다.]
let tempUser = param;
tempUser.pwd = 'q1w2e3r4';
return tempUser; // [3. 함수의 반환 값으로 전달할 수 있습니다.]
}
console.log(setUser(user)) // { id: '1급 객체', pwd: 'q1w2e3r4' }
- JavaScript에서 함수는 prototype을 통해 객체를 상속받아 사용합니다.
- 따라서 함수도 객체로 취급하고 있기 때문에 함수도 1급 객체(함수)라고 칭합니다.
- 단 1급 함수는 1급 시민의 조건과 더불어 추가적인 조건들이 존재합니다.
- 런타임 시 생성이 가능해야 합니다.
- 익명 생성이 가능해야 합니다.
// [1. 변수에 담을 수 있습니다.]
let add = function addFn(a,b) {
return a + b;
}
// [익명 생성이 가능해야합니다.]
let add2 = function(a,b) {
return a + b;
}
// [2. 함수의 인자로 전달할 수 있습니다.]
let add3 = function(func) {
return func(); // [3. 함수의 반환 값으로 전달할 수 있습니다.]
}
console.log(add3(()=>add2(10,20))); // 30 [2. 함수의 인자로 전달할 수 있습니다.]
📌 함수가 1급 객체인 것이 중요한 이유
- 고차 함수를 만들 수 있습니다.
함수를 인자 또는 매개변수로 받거나 함수를 리턴하는 함수를 말합니다.
JavaScript의 Array.prototype(배열)에서 자주 사용하는
.forEach(), .map(), .find(), .findIndex(), .filter(), .reduce(), .sort(), .some(), .every()
가 있습니다.
- 콜백을 사용할 수 있습니다.
함수를 다른 함수의 인자로서 사용하는 것을 말합니다.
콜백이 유용한 이유는, 콜백 함수만 바꿔주면 하나의 함수를 여러 가지로 응용할 수 있기 때문입니다.
function add2(a, b) {
return a + b;
}
function add3(a, b, c){
return a + b + c;
}
function addNumber(addFn) {
return "합계 : " + addFn
}
console.log(addNumber(add2(1, 2))); // 합계 : 3
console.log(addNumber(add3(10, 20, 30))); // 합계 : 60
/* addNumber함수는 고차함수, 인자로 전달된 add2, add3함수는 콜백함수 !! */
🤔 정리 !
- JavaScript에서는 기본 자료형은 1급 시민의 조건을 충족합니다.
[ 1급 시민의 조건 ]
- 변수에 담을 수 있습니다.
- 함수의 인자(Parameter)로 전달할 수 있습니다.
- 함수의 반환 값으로 전달할 수 있습니다.
- 1급 객체란 1급 시민의 조건을 충족하는 객체입니다.
[ 1급 함수가 중요한 이유 ]
- 고차 함수를 만들 수 있습니다. (함수를 인자 또는 매개변수로 받거나 함수를 리턴하는 함수)
- 콜백을 사용할 수 있습니다. (함수를 다른 함수의 인자로서 사용하는 것)
🔗 참고한 글
'JavaScript' 카테고리의 다른 글
JS - 동작원리와 비동기처리 (1) | 2022.11.11 |
---|---|
JS - 쓰로틀링(throttling)과 디바운싱(debouncing) (0) | 2022.09.08 |
Default Export / Named Export ? (2) | 2022.07.27 |
정규 표현식 (Regular Expression) (3) | 2022.07.18 |
시맨틱 웹(Semantic Web) ? (2) | 2022.07.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바스크립트 비동기 동작원리
- 1급 시민
- 렌더링 속도 개선
- 1급 함수
- next.js 환경변수
- 시맨틱 웹
- useRef
- react
- 함수형 컴포넌트
- javascript
- debouncing
- rewrites
- vue
- next.js에 .gitignore가 적용되지 않을 때
- Virtual Scroll
- React로 쓰로틀링 디바운싱 구현
- 가상스크롤
- programmers
- 매겨변수와 인자
- 자바스크립트 동작원리
- zustand
- redux
- 호이스팅
- 목표 일기
- Next.js
- 타입스크립트
- 1급 객체
- redirects
- typescript
- array
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함