또 다른 프로그래밍 패러다임 중 하나이다.
함수가 하나의 일만 하도록 잘게 나눈다.
이를 통해 테스트를 쉽게 할 수 있으며, 소프트웨어 변경에 대한 영향을 최소한으로 줄일 수 있다.
값이 변경되지 않는다.
함수 외부의 값을 변경하거나, 외부 세계의 의존적이지 않은 코드를 가리켜 "참조투명성"이라고 말한다.
이러한 특징들로 입력값에 대한 결과를 쉽게 예측할 수 있다.
또, 문제가 생겼을 때 바로 알 수 있다는 이점이 있다.
쉽게 말해, 함수를 다루는 함수이다.
고계 함수는 함수를 인자로 전달받아 함수를 결과로 반환한다.
자바스크립트의 함수는 일급 객체로 변수에 담아 인자로 전달, 반환이 가능하다.
const calc = (a, b, mul) => mul(a, b);
const multiplier = (a, b) => a * b;
// calc 함수는 multiplier 라는 함수를 인수로 받는다.
console.log(calc(5, 9, multiplier)); // 45
/**
* 위 함수를 차례대로 보면,
* calc(5, 9, multiplier)
* multiplier(5, 9)
* 5 * 9
*/
자바스크립트에서는 map
, filter
, reduce
와 같은 고계 함수를 이용해 빈번한 for
과 while
의 사용을 줄일 수 있다.
// map
const arr = [1, 2, 3, 4, 5];
const result = arr.map((n) => n * 2);
console.log(result); // [ 2, 4, 6, 8, 10 ]
//filter - 조건에 맞는 값을 return한다.
const arr = [1, 2, 3, 4, 5];
const result = arr.filter((n) => n > 2);
console.log(result); // [ 3, 4, 5 ]
//reduce - 간단하게 배열에 있는 모든 값을 더 할 수 있다.
const arr = [1, 2, 3, 4, 5];
const result = arr.reduce((prev, curr) => (prev += curr), 0);
console.log(result); // 15
일급 객체(일급 시민)란? (What is 'First Class Object'?)
컴퓨터 프로그래밍 언어에서 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. - 위키백과
다음의 조건을 만족한다.
- 매개변수가 될 수 있다.
- 변수나 데이터에 담을 수 있다.
- 비교의 대상이 될 수 있다.