sitelink1  
sitelink2  
sitelink3  
sitelink4 http://1 
extra_vars4 ko 
extra_vars5 http://faidcy.tistory.com/92 
extra_vars6 sitelink1 
Module Pattern은 작년 6월에 이야기가 나온것이다..
작년 6월이라하면... 한참 ASP가지고 씨름을 하고 있는... 그야말로 초보의 생초보...

프로그램의 개념도 안가지고 있고 그저 단순히 Copy & Paste 만 죽어라 하고 있을때다..
Javascript 공부는 하고 있었지만 그 실력이라는 것은 그야말로 최하급..

그런그때 이야기가 나온것을 나는 2달전에야 이런 패턴이 있다는것을 알았고
(ExtJs 공부하면서..물론 prototype.js 1.6.0 버전에도 있다 그 전에도 있나?)
이것이 Eric씨가 A JavaScript Module Pattern 이라고 지었다는것을 어제 알았다...

아무튼 내가 얼마나 시대에 뒤떨어져 살아가는지 충분히 깨닳게 해준 글이었던거 같다.

그래서 A JavaScript Module Pattern 을 정리해 보고자 한다.

기존에 클래스를 만드는 방식은
 
01.var Hoge = function (){ 
02.    this.name = name; 
03. this.tall = tall; 
04.   
05.Hoge.prototype = { 
06.     alertA: function() { 
07.          alert(this.name);   
08.          alert(this.tall); 
09.     
10.
11.var hoge = new Hoge('홍길동','180cm'); 
12.hoge.alertA();

위와 같았다.

위와 같은 표기는 Javascript 에서 클래스를 만드는 대표적인 방법이다.
생성자와 메소드로 나뉘어서 클래스화 하면 보기에도 좋고 소스가 깔끔해진다.

하지만 Javascript 에서 무분별하게 new 연산자를 난발하는 것은 메모리를 많이 잡는다.
new 연산자로 인스턴스를 만들게 되면 prototype 오브젝트를 쓸데없이 전부 가져가게 되는 것이다.
(new 연산자의 낭비에 관해서는 다음 포스팅에)

이로인해 YUI에서는 (ExtJs도) 싱글톤 패턴을 지향한 Javascript Module Pattern 이라는 것을 쓴다.
계속 보자..

1. 네임스페이스 오브젝트를 만들자.
    YUI나 ExtJS에서는 namespace 라는 메소드가 있어 YAHOO 오브젝트와 Ext 오브젝트에 원하는 이름의 오브
   젝트를 만들어준다.
   말이 namespace 이지 그냥 빈 오브젝트이다.
   원래는

1.YAHOO.myProject.myModule = function () {

2.          return  {
3.               myPublicProperty: "I'm accessible as YAHOO.myProject.myModule.myPublicProperty.";
4.               myPublicMethod: function () {
5.                    YAHOO.log("I'm accessible as YAHOO.myProject.myModule.myPublicMethod.");
6.               }
7.          };
8.}(); // 이곳의 괄호는 익명함수의 return 문을 실행시킨다.


마지막 줄의 괄호()는 끝임을 보강한다. 이 기호는 익명함수  return 안의 오브젝트 myPublicProperty 와 myPublicMethod를 즉시 실행시킨다. 익명함수의 return들과 같이 YAHOO.myProject.myModule의
return 오브젝트와 같다.

3. “private” 메소드 그리고 변수는 익명함수에서 return 문 앞에 쓴다.

 
01.YAHOO.myProject.myModule = function () {
02.  
03.  //"private" variables:
04.                var myPrivateVar = "I can be accessed only from within YAHOO.myProject.myModule.";
05.  
06.  //"private" method:
07.                var myPrivateMethod = function () {
08.  YAHOO.log("I can be accessed only from within YAHOO.myProject.myModule");
09.                 }
10.  
11.  return  {
12.                             myPublicProperty: "I'm accessible as YAHOO.myProject.myModule.myPublicProperty."
13.               myPublicMethod: function () {
14.                             YAHOO.log("I'm accessible as YAHOO.myProject.myModule.myPublicMethod.");
15.  
16.  //Within myProject, I can access "private" vars and methods:
17.  YAHOO.log(myPrivateVar);
18.  YAHOO.log(myPrivateMethod());
19.  
20.  //The native scope of myPublicMethod is myProject; we can
21.  //access public members using "this":
22.  YAHOO.log(this.myPublicProperty);
23.                               }
24.  };
25.}();

 



위와같이 Private 메소드와 변수를 선언할 수 있다.
코드 블럭안의 함수의 return 문에 2개 멤버의 오브젝트를 가진다.
이 멤버들은 YAHOO.myProject.myModule 에서 this.myPublicProperty 그리고 this.myPublicMethod 로 주소를 갖는다.
외부에서 접근할 수 있는 Public 멤버들의 접근은
YAHOO.myProject.myModule.myPublicProperty and YAHOO.myProject.myModule.myPublicMethod.
이다.

Private 변수는 myPrivateProperty 그리고 myPrivateMethod 로서 오직 익명 함수 그자신 안의 return 오브젝트 멤버에서 접근가능하다.
그것은 강력한 closure를 통하여 익명함수의 결과와 즉시 실행에도 불구하고 함수의 return 후에 로컬 변수의 유지를 제한한다. YAHOO.myProject.myModule이 그것들을 필요로 하는 것처럼 2개의 private변수들을 없애지 않는다.
번호 제목 글쓴이 날짜 조회 수
157 setTimeout() / setInterval() 메소드 황제낙엽 2008.11.05 111
156 IE브라우저에서 서버의 XML파일을 ajax로 가져와 DOM파싱하는 예제 (XMLHttpRequest, XML, ActiveXObject) 황제낙엽 2018.11.23 103
155 [JavaScript Tutorials] JavaScript and memory leaks (해석중) 황제낙엽 2009.04.08 102
154 자바스크립트 정렬(javascript formatter) 도구 JavaScript Code Improver file 황제낙엽 2011.04.04 97
153 javascript replaceall의 방법에 따른 처리 속도 비교 황제낙엽 2009.02.11 97
152 int * float 연산 오류 file 황제낙엽 2008.12.11 95
151 JavaScript Reserved Words 황제낙엽 2011.11.28 94
150 DOM과 innerHTML 방법에 대한 비교 분석 황제낙엽 2008.11.03 94
149 자바 스크립트 플러그인 황제낙엽 2005.11.22 94
148 Ajax (XMLHttpRequest) 샘플 황제낙엽 2017.08.01 93
147 innerHTML 황제낙엽 2008.11.03 93
» [펌] 아사페릴의 사생활 - 싱글톤 패턴을 지향한 Javascript Module Pattern 황제낙엽 2009.04.02 90
145 크로스 브라우저를 위한 브라우저 검사 코드 file 황제낙엽 2010.08.27 86
144 자바스크립트 타입 비교 테이블 + 테이블 작성 스크립트 [1] file 황제낙엽 2017.06.23 85
143 [JavaScript Tutorials] Error handling in JavaScript using try/catch/finally - The Error object and throwing your own errors (해석중) 황제낙엽 2009.04.10 82
142 Alert 에서의 개행처리 황제낙엽 2012.03.09 80
141 JSAPI User Guide 황제낙엽 2008.07.14 79
140 JSON.parse() - feat. Object.assign 황제낙엽 2017.07.09 77
139 Understanding User-Agent Strings 황제낙엽 2011.02.22 76
138 이클립스에 Aptana 플러그인 설치하기 (자바스크립트 개발에 유용한 IDE) 황제낙엽 2009.04.17 75