큰 골격은 다음과 같습니다.모듈인 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원칙을 훌륭하게 지키게 해줍니다.
출처 : Yahoo! User Interface Blogl의 Module Pattern
encapsulation과 비슷한 것 같기도... 설명이 명료하네요.
답글삭제javascript가 prototype 기반 객체지향 언어이긴 하지만 이런식으로 할 수밖에 없는건 솔직히 좀 불편해요. ^^
답글삭제@Celeste - 2007/07/05 15:00
답글삭제encapsulation이 맞죠.. 접근할 수 없게 하는 것이니까요. 이런 방식으로 코딩을 해봤는데 편리는 하지만.. jseclipse에서 제대로 인식을 못하더군요.
@리오 - 2007/07/05 17:23
답글삭제javascript 다음 버전에는 class들어가 있습니다. ^^b