일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Play2
- Golang
- 하이브리드앱
- 이더리움
- 파이썬 동시성
- 파이썬 강좌
- 하이퍼레저 패브릭
- 스칼라
- 플레이프레임워크
- CORDA
- akka 강좌
- 블록체인
- 엔터프라이즈 블록체인
- 안드로이드 웹뷰
- Hyperledger fabric gossip protocol
- Play2 로 웹 개발
- play2 강좌
- 스위프트
- 파이썬 데이터분석
- hyperledger fabric
- 파이썬 머신러닝
- Actor
- 스칼라 강좌
- 파이썬
- 스칼라 동시성
- 그라파나
- Akka
- Adapter 패턴
- play 강좌
- 주키퍼
- Today
- Total
HAMA 블로그
자바스크립트 - 모듈 패턴 본문
■ 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 입니다.
.
'Javascript' 카테고리의 다른 글
심심풀이 자바스크립트 퀴즈 (0) | 2015.11.18 |
---|---|
자바스크립트 - 컨텍스트 (0) | 2015.11.18 |
잊을만할때 다시 훑어보는 Javascript (0) | 2015.05.26 |
자바스크립트의 메모리관리 (1) | 2015.05.24 |
[jQuery] each 루프에서의 this의 포인터에 대해서. (0) | 2015.05.22 |