모듈(Module)
클로저를 사용하여 priavte 범위를 허용하는 패턴
네임스페이스란?
- 수많은 함수, 객체, 변수들로 이루어진 코드가 전역 유효범위를 어지럽히지 않고, 애플리케이션이나 라이브러리를 위한 하나의 전역 객체를 만들고 모든 - 기능을 이 객체에 추가하는것 (ex. jQuery)
- 코드 내의 이름 충돌뿐만 아니라 이 코드와 같은 페이지에 존재하는 또 다른 자바스크립트 라이브러리나 서드파티 코드와의 이름 충돌도 미연에 방지
객체리터럴을 사용한 모듈패턴
var module = {
key : 'value',
publicMethod : function() {
// public 메소드
}
}
클로저를 이용한 모듈패턴
(function(){
// priavte 변수들과 함수들을 선언
return {
// public 변수들과 함수들을 선언
}
})()
클로저란?
- 외부함수의 변수에 접근할 수 있는 내부함수
- 스코프체인(Scrope chain)으로 표현되기도함
- 클로저 자신에 대한 접근
- 외부 함수의 변수에 대한 접근
- 전역 변수에 대한 접근
실사용 예
// 네임스페이스 선언
var MyApp = {} // 전역 객체
MyApp.modules.libs = (function(){
// 비공개 변수, 메소드등의 유효범위(prevate 멤버)
return {
// 공개 API (public 멤버)
}
})();
참고
https://webclub.tistory.com/5 [Web Club] https://itstory.tk/entry/%EA%BC%AD-%EC%95%8C%EC%95%84%EC%95%BC%ED%95%98%EB%8A%94-Javascript-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-4%EA%B0%80%EC%A7%80