일급 함수와 고차 함수

2024. 3. 10. 14:35함수형 프로그래밍

일급 객체

일급 객체의 조건

  • 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다.
  • 변수나 객체, 배열에 저장할 수 있다.
  • 함수의 매개변수에 전달할 수 있다.
  • 함수의 반환값으로 사용할 수 있다.
  const add5 = a => a + 5;
  log(add5);
  log(add5(5));

  const f1 = () => () => 1;
  log(f1());

  const f2 = f1();
  log(f2);
  log(f2());

함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미이다.

객체는 값이므로 함수는 값으로 다룰 수 있다. 이것은 조합성과 추상화의 도구로 사용된다.

 

고차 함수

일급 함수의 특징을 살려 함수를 값으로 다루는 함수를 고차함수라고 한다.

고차함수는 크게 두가지 유형으로 나눌 수 있다.

첫번째는 함수를 인자로 받아서 실행하는 함수이다.

const apply1 = (f) => f(1);
const add2 = (a) => a + 2;
console.log(apply1(add2));
console.log(apply1((a) => a - 1));

const times = (f, n) => {
  let i = -1;
  while (++i < n) f(i);
};

function print(k) {
  console.log(k);
}

times(print, 3);
times((a) => console.log(a), 3);

 

두번째는 함수를 만들어 리턴하는 함수로 클로저를 만들어서 리턴하는 함수이다.

클로저는 중첩 함수가 상위 스코프의 식별자를 참조하고 있고 중첩 함수가 외부 함수보다 더 오래 유지되는 경우를 의미한다.

const addMaker = (a) => (b) => a + b;
const add10 = addMaker(10);
console.log(add10(5));
console.log(add10(10));

 

'함수형 프로그래밍' 카테고리의 다른 글

코드를 값으로 다루기  (0) 2024.03.19
map, filter, reduce  (0) 2024.03.11
제너레이터  (0) 2024.03.10
이터러블/이터레이터 프로토콜  (0) 2024.03.10