2007년 7월 4일 수요일

YAHOO의 Module Pattern

큰 골격은 다음과 같습니다.모듈인 myModule을 통해서만 (public속성에) 접근이 가능합니다.

YAHOO.myProject.myModule = function(){}();

이 function() 안에 return을 추가한다.

YAHOO.myProject.myModule = function(){

return {

myPublicProperty: ""   // public property가 된다.

myPublicMethod: function() {}   // public method가 된다.

}

}();

public property/method들은 return된 hash를 통해서 접근이 가능한 public 속성이 됩니다.

※ 마지막에 ()를 사용하여 anonymous를 실행시키고, 이를 myModule을 통해서 접근하게 합니다. 

 여기에 function()안에 property와 method를 정의한다.

YAHOO.myProject.myModule = function(){

  var privateProperty;   // private property가 된다.

  var privateMethod = function() {}   // private method가 된다.

return {

myPublicProperty: ""  // public property가 된다.

myPublicMethod: function() {} // public method가 된다.

}

}();

밖에서 봤을 때 private property/method는 접근할 수 없지만 public속성 (return되는 hash)에서는 closure를 통해서 접근이 가능하게 됩니다. private속성을 감추고 public 속성만을 접근하게 함으로서 Global variables are evil원칙을 훌륭하게 지키게 해줍니다.

Module Pattern은 privatge속성과 public 속성을 나누는것이 목적입니다.

출처 : Yahoo! User Interface Blogl의 Module Pattern

댓글 4개:

  1. encapsulation과 비슷한 것 같기도... 설명이 명료하네요.

    답글삭제
  2. javascript가 prototype 기반 객체지향 언어이긴 하지만 이런식으로 할 수밖에 없는건 솔직히 좀 불편해요. ^^

    답글삭제
  3. @Celeste - 2007/07/05 15:00
    encapsulation이 맞죠.. 접근할 수 없게 하는 것이니까요. 이런 방식으로 코딩을 해봤는데 편리는 하지만.. jseclipse에서 제대로 인식을 못하더군요.

    답글삭제
  4. @리오 - 2007/07/05 17:23
    javascript 다음 버전에는 class들어가 있습니다. ^^b

    답글삭제