Higher-Order Function
About
Higher-Order Function : 고차함수
고차함수란, 함수를 다루는 함수를 말한다.
함수를 다룬다
함수를 다룬다는 것은 다음과 같은 것을 말한다.
함수를 인자로 받아 대신 실행하는 함수
함수를 리턴하는 함수
함수를 인자로 받아서 또 다른 함수를 리턴하는 함수
사실상 함수형 프로그래밍의 절반은 '고차 함수를 적극적으로 활용하는 프로그래밍'이라고 할 수 있다.
유명한 고차함수들로는 Underscore.js의 _.map
, _.filter
, _.reduce
이 있다. (혹은 ES6의 그것)
Example
함수를 인자로 받아 대신 실행하는 함수
여기서
add
와sub
은 일반 함수다. 함수를 인자로 받거나 함수를 리턴하지 않기 때문이다.callWith10
은 고차 함수다. 함수를 받아 내부에서 대신 실행하기 때문이다.func
라는 이름의 인자로add
나sub
함수를 받아, 인자로 받았던val
과 함께 10을 인자로 넘기면서 대신 실행한다.
함수를 리턴하는 함수
constant
함수는 실행 당시 받았던 10이라는 값을 받아 내부에서 익명 함수를 클로저로 만들어 val
을 기억하게 만든 후 리턴한다.
리턴된 함수에는 always10
이라는 이름을 지어주었고, always10
을 실행하면 항상 10을 리턴한다. constant
처럼 함수를 리턴하는 함수도 고차 함수다.
함수를 대신 실행하는 함수를 리턴하는 함수
이번엔 위의 두 예시를 조합해서 함수를 대신 실행하는 함수를 리턴하는 함수를 만들어본다.
callWith
가 callWith10
이 아닌 callWith
가 되어 숫자가 아닌 값도 활용할 수 있다.
Summary
함수형 프로그래밍은 함수에 인자를 언제 어떻게 적용할 것인가, 함수를 인자로 언제 어떻게 적용할 것인가, 인자로 받은 함수를 언제 어디서 평가할 것인가 등에 대한 이야기이기도 하다.
응용형 함수, 부분 적용(partial application), 커링(currying), 고차 함수(higher-order function) 등은 모두 인자와 관련된 함수형 프로그래밍의 특징들이다.
Last updated