JavaScript에서 함수는 일급 객체(First-Class Object)로 취급됩니다.
이는 함수가 다른 객체와 동일한 방식으로 다루어질 수 있음을 의미합니다.
일급 객체의 특성
변수에 할당 가능: 함수를 변수에 할당할 수 있습니다.
const greet = function() {
console.log("안녕하세요!");
};
함수의 인수로 전달 가능: 함수를 다른 함수의 인수로 전달할 수 있습니다.
function executeFunction(fn) {
fn(); // 전달받은 함수를 실행
}
executeFunction(greet); // "안녕하세요!" 출력
함수의 반환값으로 사용 가능: 함수를 다른 함수에서 반환할 수 있습니다.
function createGreeter(greeting) {
return function(name) {
console.log(`${greeting}, ${name}!`);
};
}
const sayHello = createGreeter("안녕하세요");
sayHello("홍길동"); // "안녕하세요, 홍길동!" 출력
객체의 프로퍼티로 저장 가능: 함수를 객체의 프로퍼티로 저장할 수 있습니다.
const person = {
name: "홍길동",
greet: function() {
console.log(`안녕하세요, 저는 ${this.name}입니다.`);
}
};
person.greet(); // "안녕하세요, 저는 홍길동입니다." 출력
함수 표현식과 함수 선언
JavaScript에서 함수는 두 가지 방식으로 정의할 수 있습니다.
함수 선언과 함수 표현식.
두 방식 모두 함수가 일급 객체임을 보여줍니다.
함수 선언
const add = function(a, b) {
return a + b;
};
함수 표현식
const add = function(a, b) {
return a + b;
};
고차 함수 (Higher-Order Functions)
일급 객체로서의 함수의 중요한 응용 중 하나는 고차 함수입니다.
고차 함수는 다른 함수를 인수로 받거나, 함수를 반환하는 함수입니다.
function map(array, callback) {
const result = [];
for (let i = 0; i < array.length; i++) {
result.push(callback(array[i]));
}
return result;
}
const numbers = [1, 2, 3];
const squares = map(numbers, function(num) {
return num * num;
});
console.log(squares); // [1, 4, 9] 출력
클로저 (Closure)
function makeCounter() {
let count = 0; // private variable
return function() {
count++;
return count;
};
}
const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
댓글