고차 함수(Higher-Order Function)이란 함수를 인자로 받거나 함수를 반환하는 함수입니다. 먼저 알아두어야 할 것은 자바스크립트가 선언형 프로그래밍로 분류되는 함수형 프로그래밍(Functional Programming)이라는 것입니다. 함수형 프로그래밍에서는 함수를 1급 시민(First-Class Citizen)으로 인식한다고 설명되는데, 1급 객체로 인식하고 있다는 뜻이 됩니다. 이는 함수를 다음과 같이 변수에도 할당하는 것을 가능하게 합니다.
const square_func = function(x) {
return x * x;
}
square(5); // Output : 25
이러한 특징을 통해 함수를 인자로 받거나 함수를 반환하는 함수인 고차 함수가 정의될 수 있습니다. 이번 글에서는 자바스크립트에 내장되어 있는 고차 함수들인 ① Array.prototype.map(), ② Array.prototype.filter(),
③ Array.prototype.reduce() 메서드들에 대해서 알아보겠습니다.
① Array.prototype.map()
// Syntax
const array_new = array_old.map(callbackFunc);
// Example
const array_ex = [1, 3, 5, 6];
console.log(array_ex.map((x) => x * 2); // Output : [2, 6, 10, 12]
callbackFunc는 array_old의 각 요소에 적용할 함수입니다. callbackFunc는 3개의 인자 element, index, array를 가지고 있습니다. 각 인자의 의미는 다음과 같습니다.
- element : 현재 작업 중인 요소 (필수 인자)
- index : 현재 작업 중인 요소의 인덱스
- array : map()을 호출한 배열
const array_ex = [1, 3, 5, 6];
array_ex.map((ele, ind, arr) => {
console.log(ele, ind, arr);
};
② Array.prototype.filter()
filter() 메서드는 호출하는 배열의 모든 요소들 중에서 주어진 조건을 통과하는 요소들로 구성된 새로운 배열을 반환합니다. 사용 구문과 예시는 다음과 같습니다.
// Syntax
const array_new = array_old.filter(callbackFunc);
// Example
const numbers = [10, 4, 15, 7, 9, 13];
console.log(numbers.filter((element) => element < 10)); // Output : [4, 7, 9]
callbackFunc는 array_old의 각 요소에 적용할 함수입니다. 이 함수는 결과 값으로 truthy 값이나 falsy 값을 반환하는 함수여야 합니다. callbackFunc가 받는 인자의 경우, map() 메서드와 동일하게 element, index, array 3개의 인자를 가지고 있습니다.
③ Array.prototype.reduce()
reduce() 메서드는 호출하는 배열의 모든 요소에 함수를 적용하는데, 각 요소의 연산 결과를 다음 연산에 사용하여 마지막 결과 값으로는 하나의 값을 반환하게 됩니다. 사용 구문과 예시는 다음과 같습니다.
// Syntax
const value_new = array_old.reduce(callbackFunc, initialValue);
// Example
const numbers = [1, 2, 3, 4];
const init_val = 5;
const result = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, init_val)
console.log(result); // Output : 15
- accumulator : 이전까지의 연산 결과 값 (필수 인자)
- currentValue : 현재 작업 중인 요소 (필수 인자)
- index : 현재 작업 중인 요소의 인덱스
- array : reduce()을 호출한 배열
** 세 개의 메서드들은 모두 원본 배열을 바꾸지 않는 것을 알 수 있습니다. 이는 자바스크립트가 변수나 객체를 변경하지 않고 프로그램을 수행하는 함수형 프로그래밍(Functional Programming)임을 보여주는 특징 중 하나입니다.
'Frontend > Javascript' 카테고리의 다른 글
[JavaScript] getElement* 와 querySelector (0) | 2024.01.31 |
---|---|
[JavaScript] every(), some() 메서드 (0) | 2023.09.11 |
[JavaScript] 화살표 함수 (Arrow Function) (0) | 2023.09.06 |
[JavaScript] 즉시 실행 함수 (IIFE) (0) | 2023.09.04 |
[JavaScript] 프로토타입 (Prototype) (0) | 2023.08.20 |