ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 커링_ Currying
    Java Script 2021. 5. 6. 14:52

    수업 중에 스치듯 지나갔던 커링에 대해서 좀 더 자세히 기록해볼 필요를 느꼈다.

    커링은 여러개의 파라미터를 받는 함수를 분리해서, 한 개의 파라미터만 받는 여러개의 함수로 쪼개는 방법이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function curry(function) {  // function(a)를 반환함
      return function(a) { // ~클로저로 생긴 공간~
        return function(b) {
          return function(a,b);
        };
      };
    }
     
    function add(a,b) {
      return a + b;
    }
     
    let curriedAdd = curry(add);
     
    console.log(curriedAdd(1)(2));  // 3
    // curriedAdd(1) 이 호출되면 function(b)를 불러옴. 
    cs

     

    15번째 줄에서 curriedAdd(1)(2)를 호출했는데, 

    13번째 줄을 통해서 1번째 줄의 curry(function)으로 올라간다. 

    15번째 줄에서 넣어준 인자 1과 2는 각각 a와 b로 할당되고 ("클로저 안에서 반복적으로 사용되는 함수는 저장된다")

    리턴에 리턴을 거쳐서 4번줄의 function(a,b), 즉 add(1,2)를 실행하는 것이 된다. 

     

    한편 15번째 줄의 curriedAdd(1)(2);를 다음과 같이 변수 선언으로 분리해줄 수도 있다. 

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function curry(f) { 
      return function(a) {
        return function(b) {
          return f(a,b);
        };
      };
    }
     
    function add(a,b) {
      return a + b;
    }
     
    let curriedAdd = curry(add);
     
    let result = curriedAdd(1);
    console.log(result(2));  // 이것도 결과는 3으로 같다. 
     
    cs

     

    참고 자료

    'Java Script' 카테고리의 다른 글

    [string] slice() vs substring()  (0) 2022.05.23
    Delete와 Undefined, 그리고 garbage collector  (0) 2022.02.12
    Toy project - 카드맞추기 게임  (0) 2021.04.14
    Toy Project - 계산기  (0) 2021.04.14
    This 판별하기  (0) 2021.03.26

    댓글

Designed by Tistory.