210810

정현진·2021년 8월 11일

코딩일기

목록 보기
15/18

TIL

고차함수

고차함수 이해하기

자바스크립트에서 특별한 대우를 받는 일급 객체(first-class citizen)가 있는데, 대표적인 일급 객체 중 하나가 함수이다.

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

함수를 변수에 할당할 수 있기 때문에, 함수를 배열의 요소나 객체의 속성값으로 저장할 수 있다. 이는 함수를 데이터(string, number, boolean, array, object)를 다루듯이 다룰 수 있다는 걸 의미한다.
함수 표현식은 변수에 할당한 다음 사용할 수 있다.
위의 함수 표현식(function expression)은 함수 선언식(function declaration)과 다르게 호이스팅(Hoisting)이 적용되지 않는다.

  • 호이스팅은 선언된 위치와 관계없이 어디서든 함수를 사용할 수 있도록 한다.
  • 코드가 실행되는 과정에서 함수 선언부를 코드의 최상단으로 끌어올리는 것처럼 보이게 한다.

함수는 변수에 저장된 데이터를 인자로 받거나, 리턴 값으로 사용할 수 있다. 함수도 변수에 저장될 수 있기 때문에 함수를 인자로 받거나, 리턴 값으로 사용할 수 있다.

고차 함수(higher order function)는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다. 함수는 변수에 저장할 수 있고, 함수를 담은 변수를 인자로 전달받을 수 있다. 마찬가지로, 함수 내부에서 변수에 함수를 할당할 수 있고, 함수는 이 변수를 리턴할 수 있다. 여기서 변수에 할당하지 않고 함수를 바로 이용할 수 있는데, 어떤 고차 함수에 함수를 인자로 전달하고, 고차 함수는 함수 자체를 리턴한다. 변수가 빠졌을 뿐, 동일하게 동작한다. 이때, 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 한다. 콜백 함수를 전달받은 고차 함수는, 함수 내부에서 이 콜백 함수를 호출(invoke) 할 수 있고, caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있다. 아예 호출하지 않을 수도 있고, 여러 번 실행할 수도 있다.


내장 고차함수 이해하기

자바스크립트에는 기본적으로 내장된 고차함수가 여럿 있는데, 그중에서 배열 메소드들 중 일부가 대표적인 고차함수에 해당한다.
배열의 filter 메소드는, 모든 배열의 요소 중에서 특정 조건을 만족하는 요소를 걸러내는 메소드이다. 예를 들어 number 타입을 요소로 갖는 배열에서 짝수만을 걸러내거나, 18 보다 작은 수만을 걸러낼 수 있다. string 타입을 요소로 갖는 배열에서, 길이가 10 이하인 문자열만 걸러내거나, 'korea'만 걸러낼 수도 있다.

걸러내는 기준이 되는 특정 조건은 filter 메소드의 인자로 전달된다. 이때, 전달되는 조건은 함수의 형태이다. filter 메소드는, 걸러내기 위한 조건을 명시한 함수를 인자로 받기 때문에 고차함수이다. filter 메소드는 배열의 요소를, 인자로 전달되는 콜백 함수에 다시 전달한다. 콜백 함수는 전달받은 배열의 요소를 받아 함수를 실행하고, 콜백 함수 내부의 조건에 따라 참(true) 또는 거짓(false)을 리턴해야 한다. 적어도 filter 메소드는 이런 함수를 기대하고 있다.

[Tomorrow](https://urclass.codestates.com/384593f8-529d-49af-9f04-c89ed17296ba?playlist=514]

0개의 댓글