본문 바로가기
IT/JavaScript

자바스크립트 핵심 가이드 - (함수 4탄 모듈, 연속호출, 커링, 메모이제이션 )

by 최고영회 2013. 12. 23.
728x90
반응형
SMALL

12. 모듈

모듈은 내부의 상태나 구현내용은 숨기고 인터페이스만 제공하는 함수나 객체이다. 

 

모듈 패턴은 바인딩과 private 을 위해 함수의 유효범위와 클로저를 이용한다.

 

모듈 패턴은 안전한 객체를 생성하는데도 사용할 수 있다.

 

시리얼 번호를 생성하는 객체를 만들어 보자.

 

var serial_maker = function() {

  var prefix = '';

  var seq = 0;

  return {

    set_prefix : function (q) {

      prefix = String(q);

    },

    set_seq : function (s) {

      seq = s;

    },

    gensym : function ( ) {

      var result = prefix + seq;

      seq += 1;

      return result;

    }

  };

};

 

var seqer = serial_maker( );

seqer.set_prefix('Q');

seqer.set_seq(1000);

var unique = seqer.gensym( ); // unique 는 "Q1000"

 

 

13. 연속 호출 (Cascade)

일부 메소드는 반환값이 없다. 만약 이러한 메소드들이 undefined 대신에 this 를 반환한다면 연속 호출이 가능 하다. jQuery 에서 연속호출을 이렇게 하는 것 같다.

getElement('myBoxDiv').

  move(340, 210).

  width(100).

  height(100).

  color('red').

  on('mousedown', function(m) {

    this.startDrag(m, this.getNinth(m));

  }).

  tip('This box is resizable');

각각의 메소드는 객체를 반환하기 때문에 각 메소드 호출 결과를 다음 호출에 사용할 수 있다.

 

연속 호출은 한번에 많은 작업을 할 수 있는 인터페이스를 만드는데 도움이 된다.

 

14. 커링

함수는 값(value)이며, 이 함수값을 흥미로운 방법으로 다룰 수 있다. 커링은 함수와 인수를 결합하여 새로운 함수를 만들 수 있게 한다.

var add1 = add.curry(1);

document.writeln(add1(6)); // 7

 

15. 메모이제이션

함수는 불필요한 작업을 피하기 위해서 이전에 연산한 결과를 저장하고 있는 객체를 사용할 수 있다.

이러한 최적화 기법을 메모이제이션이라고 한다.

자바스크립트의 객체와 배열은 메모이제이션에 매우 유용하다.

var fibo = function ( n ) {

   return n < 2 ? n : fibo (n - 1) + fibo (n - 2);

};

 

for ( var i = 0; i <= 10; i++) {

  document.writeln( '// ' + i + ' : ' + fibo (i));

}

위 예제는 정상적으로 동작한다. 하지만 처리해야 하는 작업이 너무 많다.

자그마치 fibo 함수를 453번이나 호출하고 있다.

위 함수를 메모이제이션을 적용해 보자.

var fibo = function ( ) {

  var memo = [ 0, 1 ];

  var fib = function ( n ) {

     var result = mem [ n ];

     if ( typeof result !== 'number' ) {

        result = fib (n - 1) + fib (n - 2);

        memo[n] = result;

     }

  };

  return fib;

}( ) ;

 

728x90
반응형
LIST