본문 바로가기
프로그래밍 언어/JS

JavaScript) 함수의 합성(function composition)

by nomfang 2022. 3. 22.
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
반응형

댓글