커링이란
커링(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
화살표 함수로 짧고 간단하게 이렇게도 쓸 수 있음
'STUDY > javascript' 카테고리의 다른 글
호이스팅(Hoisting)과 TDZ(Temporal Dead Zone) (4) | 2024.10.14 |
---|---|
[자바스크립트] 프로토타입 (0) | 2024.09.27 |
[면접 질문] function Person(){}, var person = Person(), 그리고 var person = new Person()의 차이점? (0) | 2024.09.25 |
쓰로틀링(Throttling)과 디바운스(Debouncing)의 차이점 (0) | 2024.09.24 |
[자바스크립트] 원시값과 참고값 (2) | 2024.09.20 |