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; }( ) ; |
'IT > JavaScript' 카테고리의 다른 글
자바스크립트 핵심 가이드 - (배열) (0) | 2013.12.23 |
---|---|
자바스크립트 핵심 가이드 - (상속) (0) | 2013.12.23 |
자바스크립트 핵심 가이드 - (함수 3탄 콜백) (0) | 2013.12.23 |
자바스크립트 핵심 가이드 - (함수 2탄 Scope, Closoure) (0) | 2013.12.23 |
자바스크립트 핵심 가이드 - (함수 1탄) (0) | 2013.12.23 |