1. 일급객체(First-class Object)란?
일급객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 즉 프로그래밍 언어의 함수가 다른 변수처럼 다루어질 때 일급함수를 가진다고 한다. 일급함수를 가진 언어에서 함수는 다른 함수들에 전달인자로 제공되고, 다른 함수에 의해 반환될 수 있으며, 변수의 값으로서 할당될 수 있다.
자바스크립트는 함수를 객체로 취급하기 때문에, 함수를 매우 유연하게 사용할 수 있다. first-class 라는 단어 그대로 자유롭게 다른 객체들에게 적용 가능한 연산을 지원한다.
일급 객체의 조건은 아래와 같다.
1) 변수나 데이터 구조 안에 객체를 담을 수 있다.
2) 파라미터로 전달할 수 있다.
3) 리턴 값으로 사용할 수 있다.
2. 일급객체로서의 함수 사용
2-1. 변수에 함수를 할당할 수 있다.
- 함수가 나중에 다시 사용될 수 있도록 마치 값처럼 취급된다. 이 특성으로 인해 아래의 기능을 가질 수 있다.
2-2. 함수를 인자로 다른 함수에 전달할 수 있다.
function callFunction(func) {
func();
}
// 콜백함수 : 매개변수로서 쓰이는 함수
// 고차함수 : 함수를 인자로 받거나 리턴하는 함수
-위의 코드에서 func 함수는 고차함수이면서 (함수를 인자로 받음) 콜백함수(매개변수로 쓰임)이다.
2-3. 함수를 반환할 수 있다.
이와 같은 용도를 partial application 이라고 한다. 이는 함수를 반환하는 함수를 만드는데 사용되며 전달된 첫 번째 매개변수가 리턴값에 저장된다.
function createAdder(num) {
return function(x) {
return x + num
}
}
const addFive = createAdder(5); //function(x) {return x + 5}
console.log(addFive(10)); //15
2-4. 객체의 프로퍼티로 할당 가능하다. (method)
var warrior = {
hp: 100,
strength: 20,
attack: function(target) {
target.hp -= this.strength;
}
}
그러나 화살표 함수 객체는 this 바인딩이 불가해 undefined가 뜨기 때문에 주의해야 한다. (아래 코드 참고)
const person = {
name: 'Jone',
age: 31,
isMarried: true,
sayHello: () => {
console.log(`Hello ${this.name}`) //undefined
}
}
person.sayHello();
2-5. 배열의 요소로도 함수를 할당할 수 있다.
const myArr = [
function(a,b) {
return a+b
},
function(a,b) {
return a-b
}
]
console.log(myArr[1](1,2))
reference: https://developer.mozilla.org/ko/docs/Glossary/First-class_Function
'Computer Programming > Javascript' 카테고리의 다른 글
JavaScript 숫자야구 - slice(), splice(), filter()의 차이와 문제점 (0) | 2023.06.13 |
---|---|
자바스크립트 자료구조 Map과 Set Object의 사용 (0) | 2023.06.12 |
JavaScript의 발전 및 특징(+ AJAX | XML 용어 정리) (0) | 2023.06.12 |
🎮 자바스크립트로 2D 게임 개발하기 (블럭맞추기) | canvas, JQuery, localStorage 사용 (0) | 2023.06.06 |
HTML&CSS로 간단한 로그인 페이지 만들기 (1) | 2023.06.01 |