JavaScript
자바스크립트 모듈 패턴
SSaMKJ
2013. 10. 2. 13:19
자바스크립트 모듈 패턴
closer 를 이용한 private 변수 선언
var SpriteFactory = (function () {
"use strict";// 엄격한 문법. 참조1
var index = 0,//--- private 영역 시작
sprites = {},
Sprite = function (config) {
return {
index: index++,
x: config.x || 0,//config.x가 있으면 해당 값을 x에 넣고, 없으면
// 0을 넣는다.
y: config.y || 0,// ||는 or이기 때문에 앞에 것이 true 즉, 값이
// 있으면 그 값을 가지고 가고, 없으면 다음을 확인한다.
width: config.width || 0,
height: config.height || 0,
background: config.background || '#fff'
};
};//--- private 영역 끝
return {
generateSprite: function (config) {// public 함수
config = config || {};
var s = new Sprite(config);// 새로운 요정(Sprite) 클래스를 만든다.
sprites['sprite_' + s.index] = s;// map 처럼 사용한다.
},
deleteSprite: function (index) {// public 함수
var sprite = this.getSprite(index);// index는 private이기 때문에 외부에서
// 통제를 할 수 없기 때문에, 해당 클래스만 null로 바꿔도 무방.
if (sprite) { sprite = null; }
},
getSprite: function (index) {// public 함수
if (sprites.hasOwnProperty('sprite_' + index)) {
return sprites['sprite_' + index];
}
}
};
}());
SpriteFactory.generateSprite({});
SpriteFactory.generateSprite({
x: 90,
y: 20
});
theSprite = SpriteFactory.getSprite(1);
(출처:http://yahooeng.tumblr.com/post/62383009835/javascript-modules-amd-and-the-road-ahead)
(참조1:http://msdn.microsoft.com/ko-kr/library/ie/br230269(v=vs.94).aspx)
주석은 내가.
closer는 리턴형 함수라고 말 할 수 있다. 자세한 사항은 링크(http://learningfinest.blogspot.kr/2013/10/understand-javascript-closures-with-ease.html?spref=fb)참조.
private 시작영역~ private 영역 끝
이 부분은 외부에서 접근이 불가하다. 왜냐하면 SpriteFactory가 리턴하는 것은 generateSprite(), deleteSprite(), getSprite 이렇게 밖에 없기 때문이다.
그 해당 리턴 함수를 closer라 부르며, 자바로 치면 public method가 되는 것이다.
응용하면 javaScript에서도 private 변수 선언이 가능해진다.