HOF는 High-Order-Function
의 약자로, 고차함수라고 부른다.
그럼 어떤 걸 고차함수라고 부를까?
고차함수가 되기 위해서는 다음의 조건 중 최소한 하나를 만족해야 한다.
- 하나 이상의 함수를 인자로 받는다.
- 함수를 리턴한다.
이런 고차함수는 주변에서 많이 찾아볼 수 있는데, 그 예시들이 바로 자바스크립트에 내장된 배열 메서드들이다. Filter
, Map
, Reduce
등이 있다.
Map
함수를 잘 보면, 배열의 각 요소에 적용할 패턴을 함수를 통해 적용시키는 것을 볼 수 있다. Fiter
와 Reduce
도 마찬가지로 함수를 인자로 받아 패턴을 추상화했다.
라이브러리들 중 lodash
의 함수들도 HOF
로 만들어진 것들이 많다. 그리고 특히 React
에서 이 HOF
를 적극적으로 활용하고 있는데 함수형 컴포넌트에 HOF
를 적용시켜서 나온 것이 바로 HOC High-Order-Component
이다.
HOF
가 함수를 이용해서 새로운 함수를 합성할 수 있으면, HOC
는 컴포넌트를 이용해서 새로운 컴포넌트로 변환할 수 있다. 고차 컴포넌트는 Redux
의 connect
나 Relay
의 createFragmentContainer
와 같은 서드 파티 React
라이브러리에서 흔하게 볼 수 있으므로 사용법에 익숙해지는 것이 좋을 것 같다.