자바스크립트 : 고차함수

nomore·2022년 9월 20일
0

자바스크립트

목록 보기
8/11

오늘의 학습목표

  • 일급 객체(first-class citizen)의 세 가지 특징을 설명할 수 있다.
  • 고차 함수(higher-order function)에 대해 설명할 수 있다.
  • 고차 함수를 자바스크립트로 작성할 수 있다.

일급객체 개요


흔히 비행기에서는 좌석은 크게 퍼스트클래스 이코노미 클래스가 있다 좌석에 따라 제공받는 혜택은 각자 다르다
자바스크립트에는 퍼스트 클래스처럼 특별한 대우를 받는 일급 객체(first-class citizen)가 있다.
대표적인 일급 객체 중 하나가 바로 '함수'이다.
javaScript에서 함수는 아래와 같이 특별하게 취급된다.

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

함수를 변수에 할당할 수 있기에, 함수를 배열의 요소나 객체의 속성값으로 저장할 수 있다.
그리고 함수를 데이터(string, number, boolean, array, object)처럼 다룰 수 있다.

const square = function (num) {
  return num * num;
};

// 변수 스퀘어에는 함수가 할당되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있다.
output = square(7);
console.log(output); // --> 49

고차 함수의 이해

고차 함수(higher order function)는 함수를 전달인자로 받을 수 있고, 함수를 리턴할 수 있는 함수이다.
다른 함수(caller)의 전달인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 한다.
콜백 함수는 어떤 작업이 완료되었을 때 호출하는 경우가 많아서, 답신 전화를 뜻하는 콜백 함수라는 이름이 붙여졌다.

콜백 함수를 전달받은 고차 함수(caller)는, 함수 내부에서 이 콜백 함수를 호출(invoke)할 수 있고, 조건에 따라 콜백 함수의 실행 여부를 결정할 수도 있습니다. 아예 호출하지 않을 수도 있고, 여러 번 실행할 수도 있습니다. 특정 작업의 완료 후에 호출하는 경우는 이후에 충분히 접할 수 있습니다.
// 함수 내부에서 이 콜백 함수를 호출(invoke)할 수 있고, 아예 호출하지 않을 수도있고, 여러번 실행 할 수도 있다.

'함수를 리턴하는 함수'는 모양새가 특이한 만큼, 부르는 용어가 따로 있습니다. '함수를 리턴하는 함수'를 고안해 낸 논리학자 하스켈 커리(Haskell Curry)의 이름을 따, 커링 함수라고 합니다. 따로 커링 함수라는 용어를 사용하는 경우에는, 고차 함수라는 용어를 '함수를 전달인자로 받는 함수'에만 한정해 사용하기도 합니다. 그러나 정확하게 구분하자면, 고차 함수가 커링 함수를 포함합니다. 이번 유닛부터는 '함수를 리턴하는 함수'와 '함수를 전달인자로 받는 함수' 모두, 고차 함수로 사용합니다.

내장 고차함수

학습목표

배열 내장 고차 함수 filter에 대해서 이해할 수 있다.
filter에 대한 이해를 기반으로, 나머지 내장 고차 함수를 학습할 수 있다.
filter, map, reduce, forEach, find, sort, some, every
고차 함수를 쓰는 이유를 설명할 수 있다.
고차 함수를 활용하여 프로그램을 작성할 수 있다.

자바스크립트에는 기본적으로 내장된 고차 함수가 여럿 있다.
그중 배열 매서드 중 일부가 고차함수가 해당된다고 한다.

배열의 filter 메서드는,
!! 모든 배열의 요소 중에서 특정 조건을 만족하는 요소를 걸러내는 메서드
여기서 걸러내는 기준이 되는 특정 조건은 filter 메서드의 전달인자로 전달된다. 이때 전달되는 조건은 함수의 형태라고 한다.

filter 메서드는 배열의 요소를 콜백 함수에 다시 전달합니다. 콜백 함수는 전달받은 배열의 요소를 받아 함수를 실행하고, 콜백 함수 내부의 조건에 따라 참(true) 또는 거짓(false)을 리턴해야 합니다.

Filter 메서드 활용시 과정

  • 배열의 각 요소가
  • 특정 논리(함수)에 따르면, 사실(true)일 때
  • 따로 분류합니다(filter).

map 매서드 활용시 과정

  • 배열의 각 요소가
  • 특정 논리(함수)에 의해
  • 다른 요소로 지정(map) 됩니다.

reduce 매서드 활용시 과정

  • 배열의 각 요소를
  • 특정 방법(함수)에 따라
  • 원하는 하나의 형태로
  • 응축합니다. (reduction)

고차함수와 추상화

추상화?
복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것이 추상화

값의 추상화, 함수의 추상화

추후 다시 리팩토링 하자.

0개의 댓글