본문 바로가기

프로그래밍/Web

javascript 모듈화 패턴

prototype 을 이용한 패턴

일반적인 방식으로 동일하게 사용되는 내용을 prototype에 정의해 불필요한 메모리 할당을 막게 된다.


MyPackage.MyClass = function() {

// 멤버 어트리뷰트

this.object1 = something;

this.object2 = {

key1: value,

key2: value,

}


};


MyPackage.MyClass.prototype = {

constructor: MyPackage.MyClass,


// 공통 멤버 정의

memeber: function() {

}

};





즉시실행 함수를 이용한 패턴

크게 prototype 방식을 즉시실행 함수로 한번더 감싼 형태로 this를 붙이지 않은 객체들과 내부 기능처리 함수들을 캡슐화 하는 효과가 있다.


MyPackage.MyClass = ( function() {



// 멤버 어트리뷰트

// new 로 생성한 인스턴스에게만 스코프를 제한하기 위해서 this. 사용한다.

this.object = something;



// 내부 객체

this 도 아니고, 리턴될 메인 함수에 포함되지도 않았으므로 private 객체가 된다.

function InnerMethod() { }



// 외부로 노출할 함수 : 리턴될 메인객체의 prototype에 할당하거나 아예 this. 로 할당하면 public 객체가 된다.

var someMethod = function() { };

this.someMethod = function() { };




// 메인 함수

// 이 패키지가 호출되면 실제 이 함수의 객체가 리턴되도록 한다.

function MyClass ()

{

// 각 인스턴스마다 생성해야 하는 내용

}


// 위 함수에 대한 프로토타임 함수 정의

MyClass.prototype = {

constructor: MyClass,


// 각 인스턴스가 공통으로 가져야 하는 내용


// 멤버 함수 추가 : 이곳에 직접 메쏘드를 구현하거나 위에 구현된 함수를 지정

member: function () { };

member: someMethod;

};



return MyClass;

})();


new 를 통해 인스턴스를 생성하면, 즉시실행 함수를 통해 MyClass가 리턴되는 구조.

var obj = new MyPackage.MyClass(); 





'프로그래밍 > Web' 카테고리의 다른 글

[JavaScript] Promise, async/await  (0) 2018.08.17
WebXR + three.js  (0) 2018.08.09
VSCode 웹 디버깅  (0) 2018.07.19
openssl  (0) 2018.07.17
Windows 레드마인 설치(Bitnami)  (1) 2017.09.22
Gradle Wrapper  (0) 2017.03.06
스프링 요청/응답  (0) 2017.02.26
JPA 쿼리 이것저것  (0) 2017.02.22
[spring] 프로퍼티 값 읽기  (0) 2017.02.21
[spring] 핸들러 인터셉터  (0) 2017.01.24