[TIL] 고차함수

송인선·2022년 7월 21일
0

TIL

목록 보기
4/16

Today I learn...

고차함수

📌 일급 객체

자바스크립트의 일급 객체 ---> 함수

  • 변수에 할당(assignment) 할 수 있다.
  • 다른 함수의 전달인자(argument)로 전달될 수 있다.
  • 다른 함수의 결과로서 리턴될 수 있다.

📌 고차함수의 이해

  • 콜백 함수(callback function) : 다른 함수(caller)의 전달인자(argument)로 전달되는 함수

    --> 콜백 함수를 전달받은 고차 함수는, 함수 내부에서 이 콜백 함수를 호출할 수 있고, 조건에 따라 콜백 함수의 실행 여부를 결정할 수도 있다!

  • 커링 함수 : 함수를 리턴하는 함수 (클로저와 비슷)

  • 함수를 인자로 받고 함수를 리턴하는 함수 예시

function double(num) {
  return num * 2;
}

function doubleAdder(added, func) {
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  };
}

/*
 * 함수 doubleAdder는 고차 함수
 * 함수 doubleAdder의 인자 func는 함수 doubleAdder의 콜백 함수
 * 함수 double은 함수 doubleAdder의 콜백으로 전달
 */

// doubleAdder(5, double)는 함수이므로 함수 호출 기호 '()'를 사용
doubleAdder(5, double)(3); // -> 13

// doubleAdder가 리턴하는 함수를 변수에 저장 가능 (일급 객체)
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8

내장 고차함수

  1. JavaScript에 기본적으로 내장된 고차 함수 중에서 배열 메서드들 일부가 대표적인 고차 함수에 해당
  2. 이 메서드들은 새로운 배열을 만들며, 기존 배열을 변경하지 않는다
  3. 함수를 인자로 받기 때문에 고차함수!

📌 filter

  • 배열의 각 요소가 / 특정 논리(함수)에 따르면, 사실(true)일 때 / 따로 분류(filter)
  • true로 리턴되는 값만 필터링하여 새로 배열을 만들어냄

📌 map

  • 배열의 각 요소가 / 특정 논리(함수)에 의해 / 다른 요소로 지정(map)
  • 기존 배열에 함수를 적용하여 새로 배열을 만들어냄. 반복문과 비슷

📌 reduce

  • 배열의 각 요소를 / 특정 방법(함수)에 따라 / 원하는 하나의 형태로 / 응축 (reduction)
  • 시작값을 정할수 있음. 정하지 않으면 배열의 첫 번째 요소가 시작값이 됨
  • arr.reduce(acc, cur) --> acc: 누적값 cur: 현재값

고차함수의 중요성

📌 고차함수의 추상화

HOFs: High Order Functions
추상화 : 복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것,
--> 생산성(productivity)의 향상

함수 또한 추상화다!💡

  • 값 수준의 추상화: 단순히 값(value)을 전달받아 처리하는 수준
  • 사고의 추상화: 함수(사고의 묶음)를 전달받아 처리하는 수준

고차 함수 : 함수를 전달받거나 함수를 리턴한다 => 사고(함수)에 대한 복잡한 로직은 감추어져 있다 => 사고 수준에서의 추상화

고차함수는 함수보다 더 높은 차원의 추상화 수준이다~~

profile
캣닙같은 마성의 개발자

0개의 댓글