728x90
반응형
함수의 합성
함수를 조합하여 새로운 함수를 만드는 것으로
앞 함수의 결과를 다음 함수가 순차적으로 사용하는 것
const add2 = (num) =>{
return num+2;
}
const multiply3 = (num) =>{
return num*3;
}
// 합성하여 사용
multiply3(add2(num)); //21
const add2Multiply3 = (num) => multiply3(add2(num));
add2Multiply3(5) // 21
// 함수 합성 없이 하나의 함수로 구현할 수 있다
const add2Multiply3 = (num) =>{
num = num+2; // add2()
num = num*3; // multiply3()
return num;
}
add2AndSquare(5); // 21
함수의 합성의 필요성
요구사항 각각의 결과와 합성한 값 모두 필요할 경우,
이미 제공되고 있는 서비스에서 유지보수를 통해 합성 값이 필요할 경우 등
합성 함수는 코드의 재활용성을 높여줄 수 있다 (중복된 기능을 덜 만들 수 있음)
합성 함수에 사용된 각각의 함수들이 순수 함수(하나의 기능만을 가진)여야 늘 일관된 값을 반환할 수 있다
array.reduce()를 활용한 합성 함수
reduceRight()는 오른쪽 인자 부터 사용
reduce()는 왼쪽 인자 부터 사용
const compose = (...funcs) => {
return (initialVal) => funcs.reduceRight((val, fn) =>
fn(val), initialVal)
};
// multiply3(add2(num)); reduceRight() 가 조금 더 직관적인 것 같다
compose(multiply3, add2)(5); // 21
const pipe = (...funcs) =>
(initialVal) => funcs.reduce((val, fn) =>
fn(val), initialVal);
// multiply3(add2(num));
pipe(add2, multiply3)(5); // 21
반응형
'프로그래밍 언어 > JS' 카테고리의 다른 글
JavaScript) cannot convert undefined or null to object (0) | 2022.04.03 |
---|---|
JavaScipt) in 연산자 (0) | 2022.03.25 |
JavaScript) 함수형과 절차형 프로그래밍 (0) | 2022.03.22 |
JavaScipt) 클로저 (0) | 2022.03.18 |
JavaScript) 커링(currying)과 렉시컬 환경 (0) | 2022.03.16 |
댓글