ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] Memoization
    JavaScript 2018. 2. 20. 19:24

    [Memoization]


    for문은 메모리 낭비가 심하다.

    한번 사용한 값은 저장하여 메모리를 효율적으로 사용해보자.

    아래는 클로저를 사용하고, 재귀함수를 사용하였다.

    재귀함수는 함수가 자기 자신을 호출하는 것을 말한다.


        // Memoization

        var _commonctrl = (function() {

            var save = {};

            var fact = function(number) {

                if(number > 0) {

                    var saved = save[number - 1] || fact(number - 1);

                    //1. save object에는 현재 저장값이 없으므로 undefined를 반환, 그러므로 saved에는 fact(number - 1)가 저장;


                    var result = number * saved;

                    //2. result에 assign

                    //result = 3 * fact(3 - 1);

                    //result = 2 * fact(2 - 1);

                    //result = 1 * fact(1 - 1);


                    save[number] = result;

                    //3. save object에 result를 Memo

                    //save[3] = 3 * fact(3 - 1);

                    //save[2] = 2 * fact(2 - 1);

                    //save[1] = 1 * fact(1 - 1); => 1-1은 number가 0이라는 것인데, 0이되면 else의 return 1을 반환


                    console.log('saved: ' + saved); // fact(number - 1);

                    console.log('result: ' + result); // 7 *fact(number - 1);

                    return result;

                    //4. return 값으로 result를 반환하였고, result에는 number *

                    //fact(number - 1)라는 함수를 또 호출해주기 때문에

                    //fact(2); => 3 * fact(1) <= 2 * 1임 // 즉 3 * 2 * 1

                    //fact(1); => 2 * fact(0) <= 1임 //즉 2 * 1

                    //순으로 계속 호출을 하게 된다.

                } else {

                    return 1;

    //number가 0보다 크지 않을 경우 return 1

                    //fact(0); => 1

                }

            };


            return fact;

        })();


        _commonctrl(3);

    'JavaScript' 카테고리의 다른 글

    Clean Coding  (0) 2021.07.08
    [JS] Script의 위치  (0) 2019.11.24
    [JS] event.stopPropagation()로 버블업 막기  (0) 2018.02.08
    [JS]생성자 호출패턴 This 바인딩  (0) 2018.01.27
    [JS] 메서드 호출패턴과 This 바인딩  (0) 2018.01.27

    댓글

Designed by Tistory.