ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2019.03.13] 순차적으로 추가되는 연속 콜백함수 구현
    개발 블로깅 2019. 3. 13. 14:56

    오늘 AMA시간에 클로저 관련된 문제를 더 풀어보고자, 클로저 관련 문제를 어디서 구할 수 있나 여쭤보니까, 엔지니어분께서 한 문제를 풀어보라고 제시해주었다.


    # 함수를 호출하는 방식과 해당 결과값

    1
    2
    3
    4
    5
    6
    7
    var call = recursive();
     
    call(1); // 1
    call(1)(2); // 2
    call(1)(2)(3); // 6
    call(1)(2)(3)(4); // 10
    ...
    cs


    # 처음에 이 문제를 접하고 생각이 들었던 문제풀이방식

    • 한번씩 호출이 될 때마다 카운트를 증가를 시켜야한다. (콜백함수가 늘어나야하기때문에..)
    • 카운트만큼 return 값을 콜백함수로 넘겨줘야한다.
    • 반복적인 행위이므로 recursive하게 구현해야한다.


    # 해당 문제에 대한 알고리즘 구현 소스코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    var recursive = function(){
        var fn;
        var count = 0;
        var uncount = 0;
        var result = 0;
        return function(val){
          uncount = count;
          result = val;
          if(count === 0){
              count++;
            return result;
          }
          fn = function(val){
            uncount--;
            result = result + val;
            if(uncount === 0){
              return result;
            }
            return fn;        
          }
          count++;
          return fn;
        }
    }
     
    var call = recursive();
     
    call(1); // 1
    call(1)(2); // 2
    call(1)(2)(3); // 6
    call(1)(2)(3)(4); // 10
    cs


    문제를 푸는데 1시간 정도 걸린 것 같다. recursive한 방식으로 어떻게 콜백을 count만큼 생성하여 return시킬지가 너무 어려웠다. 그래도 꽤 괜찮은 문제였다. 이제는 확실하게 클로저와 리컬시브는 익숙해진것 같은데..

    왜 실전 시험에서는 괜히 떨어서 시험을 못푸는거지..!?!?!?ㅜㅜㅜㅜ


    # 해당 문제를 풀어간 흔적

    구글 홈에서 개발자도구로 작업해봄ㅋㅋ

    확실히 개발자도구 엄청 쓸모있는 것 같다! 아무것도 없는 빈 페이지에 일반 javascript 소스코드만 작업해서 실행시켜보려면 이것저것 세팅을 좀 해야하는데, 개발자도구는 그냥 바로 실행시키면 된다!

    그 전까지는 개발자도구를 알고는 있었지만, 이렇게 유용하게 쓰지는 않았는데, 요즘엔 개발자도구가 얼마나 좋은 기능인지 새삼 깨닫는 중이다!

    반응형

    댓글

Designed by Tistory.