커링함수

미마모코딩·2023년 5월 29일
0

기본기연습

목록 보기
2/2

커링이란?

함수의 분해기법이다.

다수의 인자를 가지는 함수 대신, 하나의 인자를 가지는 연속된 함수들의 중첩이다.

부분적용 : 함수의 인자 일부를 고정한 새로운 함수를 생성한다.

우리는 기본적인 일반함수를 사용 할 때 다음과 같이 사용한다.


function fn(x,y){
 return x + y
}
fn(1,2)

하지만 위 함수를 커링으로 바꾸면 함수를 쪼개는 작업이라고 보면 된다.

function curriedFn(x){
 return function(y){
  return x + y
}
}
함수가 함수를 리턴하고 마지막으로 최종 값을 리턴한다.

arrow로도 만들어보자.

const curriedFn2 = x => y => x + y

위와같이 x를 매개변수로 받고 함수 자체 즉 => y 부분을 리턴한다.

위 함수를 우리는 const curriedFn2 = (x) => {
   return (y) => {
 }
} 와 같은 형식으로 변환하여 볼 줄 알아야 한다.

위와 같은 함수를 호출할 때에는 
curriedFn(1)(2)
curriedFn2(1)(2)로 호출 할 수 있다.


위에서 부분적용에 대한 설명을 보면 함수의 인자 일부를 고정한 새로운 함수를 생성한다고 적혀있다.

어떤 의미냐면 우리가 curriedFn를 호출할때에는 curriedFn(1)(2)로 호출했다.
최종 리턴을 하려면 y값인 2까지 넘어와야 리턴이 될 것이다.

또한 내가 함수에 전달하려는 인자들을 한꺼번에 제공하지 않아도 된다는 것이다 .

위 설명에서 응용한 코드를 한 번 보자

function makeCoffee(roastType){
  return function(sugar){
   return function(cream){
    retrun log(`Coffee,${roastType},sugar:${sugar},cream:${cream}`)
  }
 }
}

const mediumRoast = makeCoffee("Medium Roast")

const order1 = mediumRoast(1)(2) // Coffee, MediumRoast,sugar:1,cream:2
const order1 = mediumRoast(2)(3) // Coffee, MediumRoast,sugar:2,cream:3

위와같이 커링함수를 만들었다.

mediumRoast 함수는 우리가 makeCoffee안에 roastType을 고정함 함수로 슈가랑 크림의 매개변수만 전달한다면 항상 일정하게 roastType을 유지한 함수가 만들어지는 것이다.

const order1 = mediumRoast(1)(2) // Coffee, MediumRoast,sugar:1,cream:2
위코드는 바로 커링함수를 이용해서 특정값을 고정한 부분적용 패턴을 사용한 예시코드이다.

위와같은 커링함수를 공부하면서 함수를 어떻게 더 효율적으로 사용할 수 있을지에 대한 공부가 필요할거같다.

0개의 댓글