FUNCTION AS VALUE

고차 함수와 커링은 인자 추론을 단계별로 좁힌다

함수를 값으로 넘기는 순간 콜백의 입력·출력 타입이 API 계약이 되고, 커링은 먼저 고정한 인자가 뒤 함수의 타입을 결정한다.

01

원 함수

filterBy(min, value)처럼 두 인자를 한 번에 받는 함수를 준비한다.

(number, User) → boolean
02

기준 고정

filterByAge(20)는 min을 먼저 고정하고 User를 기다리는 함수를 반환한다.

partial application
03

배열 적용

users.filter(filterByAge(20))에서 콜백 타입이 User → boolean으로 맞아야 한다.

콜백 계약
04

조합 확장

map, filter, sort 콜백을 조립할 때 각 반환 타입이 다음 단계 입력이 된다.

처리 흐름
callback too wide
콜백 인자가 any로 열림 입력 T와 반환 R을 제네릭으로 연결하지 않으면 오류가 호출부 밖으로 밀린다.
strictFunctionTypes 확인
lost this
메서드를 콜백으로 넘기며 this가 끊김 화살표 함수나 bind로 문맥을 고정하거나 순수 함수로 분리한다.
class method 한계
over-curry
단계가 많아 호출 의도가 흐려짐 도메인 기준을 재사용할 때만 커링하고 일회성 로직은 명시 호출이 낫다.
가독성 기준
async HOF
Promise 반환을 filter가 처리하지 못함 비동기 predicate는 Promise.all 후 동기 필터처럼 별도 단계로 나눈다.
truthy Promise 버그

타입 확인 기준

부분 적용 결과 첫 호출 뒤 반환 타입이 다음 인자 하나를 받는 함수인지 확인한다.
콜백 반환 filter는 boolean, map은 새 값, reduce는 accumulator 타입을 정확히 돌려야 한다.
테스트 데이터 빈 배열, 단일 요소, 타입이 섞인 입력에서 추론과 런타임 결과를 함께 본다.