-
Javascript "일급 객체로서의 함수"TIL 2024. 1. 4. 20:55728x90
자바스크립트에서 함수는 일급 객체 (First-Class Object) 라고 불린다.
그래서 함수를 객체처럼 여러가지의 방식으로 다룰 수 있다.
일반 객체와 다르게 함수는 특별한 능력을 가지고 있다.
일급객체 (First-Class Object)란 다른 객체들에 일반적으로
적용 가능한 연산을 모두 지원하는 객체를 말한다.함수가 일급 객체로 취급되기 때문에, 우리는 함수를 유연하게 사용 가능하다.
아래는 함수가 일급 객체로 취급되는 5가지의 경우에 대해 학습한 내용이다.
(1) 변수에 함수를 할당
✅ 함수는 변수에 할당할 수 있다. 함수는 값으로 취급되기에, 다른 변수와 마찬가지로 변수에 할당 가능하다.
변수에 할당된 함수는 나중에 사용 가능하다.
const sayHello = function() { console.log( "Hello !" ); }; sayHello(); // "Hello !" 출력
(2) 함수를 인자로 다른 함수에 전달
✅ 함수는 다른 함수에 인자로 전달될 수 있다. 함수가 값으로 취급되기 때문에, 다른 함수의 인자로 전달 가능하다.
이것은 콜백(callback)이나 고차 함수(higher-order function)를 작성하는 데 사용된다.
🚩 콜백 함수는 어떤 함수의 매개변수로 쓰이는 함수를 말한다.
🚩 고차 함수는 함수를 인자로 받거나, 함수를 출력으로 반환하는 함수를 말한다.
🚩 콜백 함수 = 고차 함수
function callFunction(func) { func(); } const sayHello = function() { console.log('Hello!'); }; callFunction(sayHello); // "Hello!" 출력
(3) 함수를 반환
✅ 함수는 다른 함수에서 반환될 수 있다. 함수는 값으로 취급되기에, 다른 함수에서 반환할 수 있다.
function createAdder(num) { return function(x) { return x + num; } } const addFive = createAdder(5); console.log(addFive(10)); // 15 출력
(4) 객체의 프로퍼티로 함수를 할당
✅ 함수는 객체의 프로퍼티로 할당될 수 있다. 객체의 메소드로 함수를 호출 가능하다.
const person = { name: 'John', sayHello: function() { console.log(`Hello, my name is ${this.name}`); } }; person.sayHello(); // "Hello, my name is John" 출력
(5) 배열의 요소로 함수를 할당
✅ 함수는 배열의 요소로 할당될 수 있다. 이것은 함수를 배열에서 사용할 수 있게 한다.
const myArray = [ function(a, b) { return a + b; }, function(a, b) { return a - b; } ]; console.log(myArray[0](5, 10)); // 15 출력 console.log(myArray[1](10, 5)); // 5 출력
새로운 함수를 반환하는 함수를 작성하면, 함수를 조합하여 더 복잡한 기능을 구현할 수 있다.
function multiplyBy(num) { return function(x) { return x * num; } } function add(x, y) { return x + y; } const multiplyByTwo = multiplyBy(2); const multiplyByThree = multiplyBy(3); const result = add(multiplyByTwo(5), multiplyByThree(10)); // 40 출력
자바스크립트에서 함수는 일급 객체로 취급되기에, 함수를 매우 유연하게 사용할 수 있다.
또한, 함수를 조합하여 더 복잡한 기능을 구현할 수 있고
코드를 더욱 간결하게 작성할 수 있으며, 유지 보수가 쉬워진다.
728x90'TIL' 카테고리의 다른 글
Javascript "실행컨텍스트(콜 스택)" (0) 2024.01.08 Javascript "Map" 과 "Set" (0) 2024.01.05 Javascript "ES6"문법 (1) 2024.01.03 Javascript의 "배열(Array)" (1) 2024.01.02 Javascript의 "객체(Object)" (1) 2023.12.30