고차함수(higher order function)
는 함수를 인자(argument)
로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다.
함수
는 변수
에 저장할 수 있고, 함수
는 함수
를 담은 변수
를 인자
로 전달받을 수 있다.
마찬가지로, 함수 내부에서 변수
에 함수
를 할당
할 수 있고, 함수
는 이 변수
를 리턴할 수 있다.
여기서 변수
에 할당하지 않고 함수를 바로 이용할 수 있다. 어떤 고차 함수
에 함수를 인자
로 전달하고, 고차 함수는 함수 자체를 리턴
한다.(변수가 빠졌을 뿐, 동일하게 동작함) 이때 다른 함수(caller)
의 인자(argument)
로 전달되는 함수를 콜백 함수(callback function)
라고 한다.
콜백 함수를 전달받은 고차 함수는, 함수 내부에서 이 콜백 함수를 호출(invoke)할 수 있다.caller
는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있다. 아예 호출하지 않을 수도 있고,여러 번 실행할 수도 있다.
'함수를 리턴하는 함수'
는 커리 함수
라고 한다. 정확하게 구분하자면, 고차함수가 커리 함수를 포함한다.
//함수를 인자로 받는 함수 -> 콜백 함수
//함수를 리턴하는 함수 -> 커리 함수
'함수를 리턴하는 함수'
와'함수를 인자로 받는 함수'
모두, 용어를 고차 함수
로 사용해도 상관은 없다.
다른 함수를 인자로 받는 경우
-->
함수 B
는 다른 함수를 인자로 받는 고차 함수
이다.
함수 B
의 첫 번째 인자 func에 함수가 들어올 경우, 함수 func는 함수 B의 콜백 함수
이다.
위와 같은 경우, 함수A
는 함수B
의 콜백 함수
이다.
함수를 리턴하는 경우
-->
함수 A
는 다른 함수를 리턴하는 고차 함수
이다.
A
는 인자 한 개를 입력받아서 함수(익명 함수)
를 리턴한다.
리턴되는 익명 함수
는 인자 한 개를 받아서 i
와 더한 값을 리턴한다.
A
는 함수이므로 함수 호출 기호 '()
'를 사용할 수 있다.
-->
함수 B
는 고차 함수
이다.
함수 B
의 인자 func
는 함수 B
의 콜백 함수
이다.
함수 A
는 함수 B
의 콜백으로 전달되었다.
B(5, A)
는 함수이므로 함수 호출 기호 '()
'를 사용할 수 있다.
B
가 리턴하는 함수를 변수에 저장할 수 있다.(일급 객체)