본문 바로가기
STUDY/javascript

자바스크립트의 커링(Currying)에 대해서 알아보자

by 3급우사기 2024. 11. 4.

이건 커리(curry)

커링이란


커링(Currying)은 함수형 프로그래밍에서 나오는 개념. 쉽게 말해서, 함수의 인자를 한 번에 다 받지 않고 나눠서 받게 만드는 과정. 원래 인자가 3개 들어가는 함수라면, 얘를 3단계로 나눠서 하나씩 받을 수 있게 만드는 거임. 한마디로, 함수가 함수(계속 다른 함수)를 반환하면서 인자를 조금씩 받아 나가는 형태

 

예시


예를 들어, 숫자 두 개를 더하는 `add` 함수가 있다고 쳐보자.

function add(a, b) {
  return a + b;
}
console.log(add(2, 3)); // 5


이건 평범한 덧셈 함수. `add(2, 3)` 이렇게 호출하면 `5`라는 값이 바로 반환되지만 커링 형태로 바꾸면 어떤 느낌이냐면...

function curriedAdd(a) {
  return function(b) {
    return a + b;
  };
}
console.log(curriedAdd(2)(3)); // 5


첫 번째 함수 `curriedAdd`에 `2`를 넣으면 `function(b) { return a + b; }` 이게 반환되면서 또 다른 함수를 준다. 그리고 다시 거기에 `3`을 넣으면 최종 값 `5`가 반환됨. 

 

커링이 필요한 이유

 

1. 재사용성 증가: 예를 들어 특정 값이 정해져 있는 경우, 함수를 미리 만들어둘 수 있어서 재사용이 쉬워짐.

   const add5 = curriedAdd(5); // 이제 b에 다른 값만 넣으면 됨
   console.log(add5(3)); // 8
   console.log(add5(10)); // 15

 

`add5`는 `5`라는 값을 미리 가지고 있는 함수! 이후에는 `b`만 넣어주면 되니까 재사용성이 높아짐.

2. 코드 가독성: 큰 함수나 여러 인자를 다루는 함수에서, 인자들을 단계별로 받을 수 있으니까 가독성이 좋아짐.

3. 모듈화와 부분 적용: `map`, `filter` 같은 함수형 프로그래밍에서도 커링이 유용하게 쓰임. 특정 조건이나 규칙을 함수로 만들어서 깔끔하게 적용할 수 있다.

 

커링 쉽게 구현하는 방법


커링을 자바스크립트에서 쉽게 하려면 `bind`나 `화살표 함수`를 활용할 수 있음. 아니면 `lodash` 같은 라이브러리를 쓴다면 `_.curry` 같은 커링 도구도 지원한다.

const curriedAdd = a => b => a + b;
console.log(curriedAdd(2)(3)); // 5


화살표 함수로 짧고 간단하게 이렇게도 쓸 수 있음