관리 메뉴

HAMA 블로그

자바스크립트 - 모듈 패턴 본문

Javascript

자바스크립트 - 모듈 패턴

[하마] 이승현 (wowlsh93@gmail.com) 2015. 11. 17. 18:22

■ Module Pattern



다음은 클로저를 이용해 모듈 패턴을 구현한 코드입니다.  



var module = (function () {

/**
* --------------------------------
* 모듈 패턴을 구현한 클로저 코드
* --------------------------------
*/

// 은닉될 멤버 정의
var privateKey = 0;

function privateMethod() {
return ++privateKey;
}

// 공개될 멤버 (특권 메소드) 정의
return {
publickey : privateKey,
publicMethod : function () {
return privateMethod();
}
}

})();

console.log(module.publicMethod()); // 1

console.log(module.publicMethod())// 2 (클로저로 인한 결과)


                                                                           (코드 - 1)


모듈 패턴은 반환값이 함수가 아니라 객체이며, 자동 호출된다는 점만 제외하고 클로저와 유사합니다.
(잘못된 설명으로 생각함. 함수를 반환하는게 클로저는 아니기 때문)

그리고 인스턴스를 여러 개 만들어 낼 수 있는 구조라는 점에서 싱글톤 패턴과 차이가 있습니다. 위의 코드를 실행하면 익명함수가 자동으로 호출되어 익명함수가 반환하는 객체가 Module 변수에 할당되게 됩니다. 따라서 위와 같이 module.publicMethod() 호출할 수 있습니다. 위의 코드는 하나의 인스턴스 객체만을 생성하고 있어서 싱글톤과 유사합니다.
하지만 아래와 같이 자동으로 호출(self-invoking) 되는  구조를 없애면 여러 개의 인스턴스를 생성하여 사용할 수 있습니다.



자동 호출 구조를 없앤 코드입니다.


var Module function () {


/**
* --------------------------------
* 모듈 패턴을 구현한 클로저 코드
* --------------------------------
*/

// 은닉될 멤버 정의
var privateKey = 0;

function privateMethod() {
return ++privateKey;
}

// 공개될 멤버 (특권 메소드) 정의
return {
publickey : privateKey,
publicMethod : function () {
return privateMethod();
}
}

};

// 두 개의 인스턴스 생성
var obj1 = Module();
obj1.publicMethod(); // 1 출력
obj1.publicMethod(); // 2 출력

var obj2 = Module();
obj2.publicMethod(); // 1 출력
obj2.publicMethod(); // 2 출력

 (코드 -2)


위와 같이 Module 함수를 정의(즉시실행 X) 하여 함수를 호출하면 여러 개의 인스턴스인 객체를 생성하여 사용할 수 있습니다. 클로저 인스턴스와 유사하지만 한가지 차이점은 내부의 익명함수에서 반환값이 함수가 아니라 객체를 반환한다는 점입니다.




위에까지의 내용은 http://e-rooms.tistory.com/5 에서 퍼왔구요.



그럼 코드 - 1 에서 



console.log(module.publicMethod()); // 1

console.log(module.publicMethod()); // 2 


이거 아래에 


console.log(module.publickey);  를 넣으면  몇이 나올까요? 



답은 0 입니다. 




.


Comments