함수 조합기란 함수를 조합하여 제어 로직처럼 작동시킬 수 있는 고계 함수를 의미합니다. 이번에는 조합기들 중 가장 많이 사용되는 몇가지만 알아보겠습니다.
항등 (I-조합기)
항등 조합기는 주어진 인수와 똑같은 값을 반환합니다.
const identity = a => a
항등 조합기는 다음의 경우 사용됩니다.
- 무인수 코드를 작성 할때, 함수 인수를 평가하는 시점에 데이터를 고계 함수에 제공
- 함수 조합기의 흐름을 단위 테스트하면서 단순한 함수 결과에 대해 단언하고자 할 때
- 캡슐화한 형식에서 데이터를 함수형으로 추출하고자 할 때
탭 (K-조합기)
탭 조합기는 코드 추가 없이 공형 함수(콘솔 로깅, HTML 페이지 쓰기)를 연결하여 합성할 때 유용합니다. 자신을 함수에 넘기고 자신을 돌려 받습니다.
const tap = fn => a => {fn(a); return a;}
함수를 받고 인자 a를 받아 함수에 a를 실행하고 다시 a를 리턴합니다.
선택 (OR-조합기)
선택 조합기는 함수 호출시 기본 응답을 제공하는 단순 조건 로직을 수행합니다. 함수 2개를 인수로 받아 값이 있으면 첫 번째 함수의 결과를, 그렇지 않으면 두번째 함수의 결과를 반환합니다.
const alt = (fn1, fn2) => val => fn1(val) || fn2(val)
순차열 (S-조합기)
순차열 조합기는 함수 순차열을 순회합니다. 2개 혹은 그 이상의 함수를 인수로 받아 동일한 값에 대해 각 함수를 차례로 실행하는 함수를 반환합니다.
const seq = (...fns) => val => fns.forEach(fn => fn(val))
이를 이용하면 서로 연관되어 있지만 독립적인 일련의 연산을 수행할 수 있습니다. 순차열 조합기는 차례로 수행할 뿐 값을 반환하지는 않습니다.
포크(조인) 조합기
포크 조합기느 하나의 자원을 두가지 방법으로 처리후 그 결과를 다시 조합합니다.
const fork = (join, fn1, fn2) => val => join(fn1(val), fn2(val))
예를 들어 숫자 배열의 평균을 구하는 함수를 다음과 같이 짤 수 있습니다.
const divide = (x, y) => x/y
const sumArray = arr => arr.reduce((acc,val) => acc + val, 0)
const length = arr => arr.length
const getAverage = fork(divide, sumArray, length)
const numbers = [20, 30, 40, 60]
const average = getAverage(numbers)
'함수형 프로그래밍' 카테고리의 다른 글
| 함수형 자바스크립트 (6-1) - 함수자, 모나드를 이용한 예외처리 (0) | 2022.10.09 |
|---|---|
| 함수형 자바스크립트 (4) - 부분 적용, 커링 (0) | 2022.08.28 |
| 함수형 자바스크립트 (2) - 자바스크립트와 함수형 프로그래밍 (0) | 2022.08.26 |
| 함수형 자바스크립트 (1) - 함수형으로 사고하기 (0) | 2022.08.23 |