커링
어떤 함수의 예상되는 여러 개의 매개변수보다 적은 수의 매개변수를 받아서 매개변수가 완전히 채워지지 않은 함수가 실행되지 않고 넘겨지다가 모든 매개변수가 채워지면 그때서야 실행되는 기법
const sum = ( a, b) =>{ return a + b }
sum(10,20) //30
//커링, 다중인수를 갖는 함수를 단일 인수를 갖는 함수열로 전환
const sum = (a) => (b) => { return a + b }
sum(10)(20) //30
이렇게 씀으로서 함수의 재사용성을 높일 수 있고 타인이 작성한 함수를 수정하지 않고 사용할때 유용하다.
+0716 수정내용
ex) 홈페이지 가입시에 전화번호 입력 같은곳에 010을 미리 바인딩 시켜놓고 써볼수 있을것 같다.
const phoneNum = (first) => (second) => (third) => {
console.log("전화번호는 : " + first + "-" + second + "-" + third);
};
let firstPhone = phoneNum("010")
console.log(firstPhone(1234)(5678)) // 전화번호는 : 010-1234-5678
함수합성
함수 합성은 함수들을 조합하여 새로운 함수를 만드는 것이다.
const add5 = (num) => num+5;
const mul5 = (num) => num*5;
const add5AndMul5 = (num) => mul5(add5(num));
const pipe = require("ramda").pipe; //ramda 라이브러리 사용
const testAdd5Mul5 = pipe(add5, mul5)
console.log(add5AndMul5(5)); //50
console.log(testAdd5Mul5(5,5)); //50
함수 합성한 모습
다만 갑자기 6을더한후 5의제곱을 곱하고싶으면 기존 함수를 활용하여 만들수 있다.
const add5 = (num) => num+5; //기존 선언된 함수
const square = (num) => num*num;
const add5andSqaure = (num) => sqaure(add5(num)); //add5를 재활용하는 모습
const add5andSquarePipe = pipe(add5, square) // ramda의 pipe를 이용한 모습
console.log(add5andSqaure(5)); // 100
console.log(add5andSquarePipe(5,5)); // 100
위와 같이 코드를 재활용하여 쓸수 있다.
+수정내용
좀더 가시적으로 표현할수있는 Ramda라이브러리를 사용하여 만들어보자.
이어서 3편에 모나드와 클로저 기술하겠습니다
'JS' 카테고리의 다른 글
뉴스 API를 이용하여 뉴스 검색기 만들기 (1) (4) | 2022.08.04 |
---|---|
함수형 프로그래밍 3탄 (0) | 2022.07.19 |
함수 표현식과 선언식 (0) | 2022.07.15 |
IIFE (0) | 2022.07.13 |
함수형 프로그래밍 1탄 (0) | 2022.07.07 |