프로그래밍 공부/Javascript

고차함수 / TIL 17일차

Kevinkb 2021. 9. 14. 23:03

TIL

일급 객체(first-class citizen)의 세 가지 특징

자바스크립트에도 특별한 대우를 받는 일급 객체(first-class citizen)가 있습니다. 대표적인 일급 객체 중 하나가 함수입니다. (자바스크립트가 나온 시점을 고려했을 때,) 자바스크립트에서 함수는 아래와 같이 특별하게 취급됩니다.

  1. 변수에 할당할 수 있다.
  2. 다른 함수의 인자로 전달될 수 있다.
  3. 다른 함수의 결과로서 리턴될 수 있다.

 
함수를 변수에 할당할 수 있기 때문에, 함수를 배열의 요소나 객체의 속성값으로 저장할 수 있다. 이는 함수를 데이터(string, number, boolean, array, object)를 다루듯이 다룰 수 있다는 걸 의미한다.


고차 함수(higher-order function)

고차 함수(higher order function)는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다. 이때 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 한다. 자바스크립트 내장 고차함수는 forEach, find, filter, map, reduce, sort, some, every 등이 있고 mdn에서 자세한 내용을 확인하는게 좋다. 아래에선 filter의 예시만 살펴본다.

filter

모든 배열의 요소 중 특정 조건을 만족하는 요소를 걸러내는 메소드. filter는 배열의 요소를 콜백 함수에 전달하고 콜백 함수 내부 조건에 따라 true 값을 리턴하는 요소만 가진 배열을 리턴한다.

// filter 동작 방식
Array.prototype.filter = function(func) {
    const arr = this;
    const newArr = []
    for(let i = 0; i < arr.length; i++) {
      if (func(arr[i]) === true) {
        newArr.push(this[i])
      }
    }
    return newArr;
}

추상화(abstraction)

복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것. 추상화를 통해 고민거리가 줄어들고 문제 해결이 더 쉬워진다. 따라서 생산성의 향상된다. 함수를 작성하는 것 또한 추상화의 좋은 사례이다. 함수는 사고 또는 논리의 묶음이고 함수를 통해 복잡한 로직을 쉽게 사용할 수 있다. 함수의 추상화를 한 단계 더 높인 것이 고차함수이다. 고차함수는 보다 많은 것을 추상화하고 있기에 생산성도 더욱 향상된다.