Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript의 커링(Currying) vs 부분 적용(Partial Application) 완벽 정리

함수형 프로그래밍에서 자주 언급되는 커링(Currying)부분 적용(Partial Application)은 비슷해 보이지만 개념적으로 분명한 차이가 있습니다. 두 기법 모두 함수를 재사용성 높게 만들어 주는 강력한 도구입니다.

커링(Currying)이란?

커링은 여러 개의 인자를 받는 함수를, 인자를 하나씩만 받는 여러 개의 함수로 변환하는 기법입니다. 즉, 함수가 다른 함수를 반환하고, 그 반환된 함수도 다시 하나의 인자만 받아 체인(chain) 형태로 연결할 수 있습니다.

예를 들어 multiply(2)(5)처럼 함수를 연속으로 호출하며 인자를 하나씩 전달하는 방식이 대표적인 커링입니다.

부분 적용(Partial Application)이란?

부분 적용은 함수의 일부 인자를 미리 고정해 두어, 원래보다 적은 수의 인자를 받는 새로운 함수를 만드는 기법입니다. JavaScript에서는 Function.prototype.bind() 메서드를 활용하면 손쉽게 구현할 수 있습니다.

예제 코드

다음은 커링과 부분 적용의 차이를 한눈에 확인할 수 있는 JavaScript 예제입니다.

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>커링 vs 부분 적용</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .result {
        font-size: 18px;
        font-weight: 500;
        color: rebeccapurple;
    }
</style>
</head>
<body>
<h1>JavaScript의 커링 vs 부분 적용</h1>
<div class="result"></div>
<br />
<button class="Btn">클릭하세요</button>
<h3>위 버튼을 클릭하면 커링과 부분 적용 예제 결과를 확인할 수 있습니다.</h3>
<script>
    let resEle = document.querySelector(".result");
    let BtnEle = document.querySelector(".Btn");

    // 커링: 인자를 하나씩 받는 함수를 연속으로 반환
    function multiply(x) {
        return function (y) {
            return x * y;
        };
    }

    // 일반 함수
    function add(a, b, c, d) {
        return a + b + c + d;
    }

    BtnEle.addEventListener("click", () => {
        // 커링 예제
        resEle.innerHTML =
            "커링<br>multiply(2)(5) = " + multiply(2)(5) + "<br>";

        // 부분 적용 예제: bind로 앞의 두 인자(2, 3)를 미리 고정
        let partialAdd = add.bind(this, 2, 3);
        resEle.innerHTML +=
            "부분 적용<br>partialAdd(4, 5) = " + partialAdd(4, 5) + "<br>";
    });
</script>
</body>
</html>

실행 결과

위 코드를 실행한 후 '클릭하세요' 버튼을 누르면 아래와 같은 결과가 화면에 표시됩니다.

  • 커링: multiply(2)(5) → 2 × 5 = 10
  • 부분 적용: partialAdd(4, 5) → 2 + 3 + 4 + 5 = 14

핵심 차이 정리

구분커링(Currying)부분 적용(Partial Application)
정의함수를 인자 하나씩 받는 함수들의 연쇄로 변환일부 인자를 미리 고정하여 새로운 함수 생성
호출 방식f(a)(b)(c) 형태로 체인 호출f(b, c) 형태로 나머지 인자만 전달
주요 활용함수 합성, 재사용 가능한 유틸리티 함수 작성bind()를 이용한 이벤트 핸들러, 콜백 사전 설정

두 기법 모두 코드의 재사용성과 가독성을 높여 주므로, 상황에 맞게 적절히 활용하면 더 깔끔한 함수형 코드를 작성할 수 있습니다.