자바스크립트 강좌 10 - 모듈 과 네임스페이스
Javascript 2012. 3. 9. 15:18
9. 자바스크립트 모듈 과 네임스페이스
1. 모듈 과 네임스페이스
1 - 1. 초기에는 간단한 스크립트에만 사용되던 언어가, 점차 웹 기술이 발전되며, 더욱 길고 복잡한 하나의 어플리케이션 형태가 되어 버렸습니다.
또한, 잘 만들어진 외부 프레임웍(Jquery, Prototype 등..)들이 하나하나 등장 하기 시작 했으며, 오늘날 대부분의 웹어플리케이션에서 기본 라이브러리로 도입하고 있습니다.
마지막으로 이와 같은 프레임웍에서 쓰이는 코드는 이 장에서 배우게 될 모듈구현 코드에 근간을 두고 있습니다.
마지막으로 이와 같은 프레임웍에서 쓰이는 코드는 이 장에서 배우게 될 모듈구현 코드에 근간을 두고 있습니다.
1 - 2. 네임스페이스 생성
모듈 작성시 중복 전역변수에 대한 문제는 가장 먼저 주의해야할 점중 하나 입니다.
자바스크립트는 타 OOP 언어와는 달리 언어적으로 네임스페이스 기능을 제공하고 있지 않습니다. 하지만 이를 해결하기 위한 방법으로 객체를 활용합니다.
1 - 3. 모듈사용 유 / 무 검사
1 - 4. 즉시 실행 함수 생성
1 - 5. 네임스페이스에서 심벌 가져오기
1 - 6. private, public 심벌
1 - 7. private 네임스페이스와 유효 범위로서의 클로저
P.S 위의 [1 - 6], [1 - 7]에 대한 내용은 다른 섹션처럼 간단한 예제로 정리할 수 있는 부분이 아니기 때문에
개별 포스트로 정리하도록 하겠습니다.
2. 예제 코드
개별 포스트로 정리하도록 하겠습니다.
2. 예제 코드
-
/*
-
-
1. [1 - 2] 예제 코드
-
-
*/
-
-
// 해당 네임스페이스가 존재하지 않는다면 새로 생성해서 반환한다.
-
function getNameSpace(ns)
-
{
-
var ns = ns ? ns.split('.') : ''
-
, parent = createObject(window, ns[0]);
-
-
ns = ns.splice(1);
-
-
for (var i = 0, length = ns.length; i < length; i++) {
-
parent = createObject(parent, ns[i]);
-
}
-
-
return parent;
-
}
-
-
function createObject(p, n) {
-
return p[n] = typeof p[n] === 'undefined' ? {} : p[n];
-
}
-
-
getNameSpace('a.b.c');
-
-
alert(a); // object
-
alert(a.b); // object
-
alert(a.b.c); // object
-
-
a.b.c = { name: 'a.b.c' };
-
-
alert(a.b.c.name); // 'a.b.c'
-
/*
-
-
2. [1 - 4] 예제 코드
-
-
*/
-
-
// 자바스크립트 실행시 아래와 같은 코드로 즉시 실행 함수를 만들어 각 모듈을 구성해 줍니다.
-
// 또한 모듈을 구성하는 가장 좋은 방법은 아래와 같이 정의된 직후 호출되는 익명함수속에 코드를 작성하는
방법이 있습니다. -
-
-
var o = (function(){
-
-
// private valiade
-
var x = 'x'
-
, fn = function(){
-
return this;
-
};
-
-
fn.prototype.getX = function(){
-
return x;
-
}
-
-
return fn;
-
-
})();
-
-
alert(new o().getX()); // x
-
-
/*
-
-
2. [1 - 5] 예제 코드
-
-
*/
-
-
/*
-
-
네임스페이스를 작성하다보면 코드 작성시 이름이 너무 길어지는 불편함을 볼 수 있습니다.
-
-
위와 같은 불편함을 해소하기 위해 아래와 같이 각 네임스페이스에 대한 심볼을 구성해 주는 방법이 있습니다.
-
-
*/
-
-
var o = window.a = function(){
-
return this;
-
};
-
-
-
var o = {}
-
, fn = function(){ return this; };
-
-
o.fn = fn.prototype = {
-
x: 'x'
-
}
-
-
-
alert(o.fn.x); // x
참고서적: (자바스크립트 핵심 가이드)