방명록
- [JavaScript] 커링 함수 이해하기2025년 06월 10일 21시 31분 03초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
JavaScript에서 커링 함수 이해하기
JavaScript에서 커링(Currying) 함수는 특정 패턴으로 동작하는 함수이다. 여러 개의 인수를 받는 함수를 단일 인수를 받는 여러 개의 함수로 분할하는 과정을 말한다. 이는 함수형 프로그래밍의 핵심 개념 중 하나로, 유연하고 재사용 가능한 코드를 작성하는 데 도움을 준다.
1. 커링 함수의 개념
커링은 함수가 받는 인수의 개수를 줄이는 기술이다. 원래 함수가
f(a, b, c)와 같이 세 개의 인수를 받는다면, 커링을 적용하면f(a)(b)(c)와 같이 하나의 인수를 받는 함수들을 순차적으로 호출하는 형태로 바뀐다.- 예시:
// 커링을 적용하지 않은 일반 함수 function add(x, y) { return x + y; } console.log(add(2, 3)); // 5 // 커링을 적용한 함수 function curriedAdd(x) { return function(y) { return x + y; }; } const addTwo = curriedAdd(2); console.log(addTwo(3)); // 5 console.log(curriedAdd(2)(3)); // 5위 예시에서
curriedAdd함수는x를 인수로 받아 새로운 함수를 반환한다. 이 반환된 함수는y를 인수로 받아 최종적으로x + y를 계산한다.2. 커링 함수를 사용하는 이유
커링 함수를 사용하는 데는 여러 가지 장점이 있다.
- 함수 재사용성 및 부분 적용(Partial Application): 커링은 특정 인수를 고정하여 새로운 함수를 만들 수 있게 해준다. 이를 부분 적용이라고 부른다. 특정 값을 미리 설정해두고 싶을 때 유용하다.
- 예시:
log함수를 커링하여logInfo,logError등 특정 메시지 타입을 위한 함수를 미리 만들어둘 수 있다.
function log(level) { return function(message) { console.log(`[${level}] ${message}`); }; } const logInfo = log('INFO'); const logError = log('ERROR'); logInfo('사용자가 로그인하였습니다.'); // [INFO] 사용자가 로그인하였습니다. logError('데이터베이스 연결에 실패하였습니다.'); // [ERROR] 데이터베이스 연결에 실패하였습니다.- 코드의 가독성 향상: 커링을 통해 함수 호출 체인이 명확해지고, 각 단계에서 어떤 데이터가 처리되는지 이해하기 쉬워진다. 특히 파이프라인이나 함수 조합 시 유용하다.
- 지연 평가(Lazy Evaluation) 및 함수 조합: 모든 인수가 한 번에 제공되지 않아도 되므로, 필요한 시점에 인수를 전달하여 함수를 실행할 수 있다. 이는 복잡한 함수를 작은 단위로 쪼개어 조합할 때 특히 효과적이다. 함수형 프로그래밍에서 여러 함수를 연결하여 데이터를 처리하는 파이프라인을 구성할 때 커링이 강력한 도구가 된다.
- 인수 유효성 검사: 각 단계에서 인수를 하나씩 받으므로, 각 인수마다 유효성 검사를 수행할 수 있는 기회를 제공한다.
커링은 코드를 더 유연하고 모듈화하며 재사용하기 쉽게 만들어주며, 특히 함수형 프로그래밍 패러다임을 따르는 데 중요한 역할을 하는 개념이다.
728x90반응형'언어·프레임워크 > JavaScript' 카테고리의 다른 글
웹 기술(HTML, CSS, JavaScript)로 재탄생한 고전 게임, 테트리스 만들어 보기 (4) 2025.07.05 [JavaScript] 프로토타입 이해하기 (1) 2025.06.10 [JavaScript] 객체 유효성 검사로 Proxy 이해하기 (0) 2025.04.23 [JavaScript] 리플렉트(Reflect) 완벽 정복: JavaScript 메타 프로그래밍의 숨겨진 능력 (1) 2025.04.21 [JavaScript] JavaScript 배열 메서드, 무엇을 바꾸고 무엇을 반환할까? (0) 2025.04.18 다음글이 없습니다.이전글이 없습니다.댓글