2017. 11. 8. 14:23ㆍJavaScript/NodeJS
1. 사용자 모듈 생성
모듈은 java나 C의 라이브러리라고 보면 된다.
모듈은 javascript 파일 단위로 구현이 되며 해당 파일 안에서 exports를 해야만 사용이 가능하다.
가장 기본적인 구조는 다음과 같다.
// calc.js
function add(a, b) {
return a + b;
}
module.exports = add;
이와 같이 하여 사용시에는 require 하여 사용하면 됩니다.
var add = require("./calc");
console.log(add(1,2)); //3
이를 확장하여 javascript 파일 하나에 여러개의 기능을 추가하고 싶을 경우는
//calc.js
function add(a, b) {
return a + b;
}
function substract(a, b) {
return a - b;
}
function multiply(a, b) {
return a * b;
}
function divide(a, b) {
return a / b;
}
module.exports = {
add : add,
substract : substract,
multiply : multiply,
divide : divide
};
이와 같이 작성을 하면 된다.
위의 소스 에서 module.export 할 때 형태를 다음과 같이 개별로 구분하여도 상관은 없다.
exports.add = add;
exports.substract = substract ;
exports.multiply= multiply;
exports.divide= divide;
단일 함수를 사용할 경우에는 module를 삭제해도 상관이 없다. 그러니까 여러 객체를 따로 exports 할 때만 사용한다.
이러한 방식으로 사용할 경우 exports에 바로 다른 값을 대입하면 안된다는 것이다.
exports = add;
이렇게 작업을 함과 동시에 NodeJS는 제대로 기능을 하지 않는다.
또 다른 방법으로는
//calc2.js
module.exports = function(a, b) {
return {
add : function(){
return a + b;
},
substract : function() {
return a - b;
},
multiply : function() {
return a * b;
},
divide : function() {
return a / b;
}
};
};
이와 같이 작성을 하여도 된다.
하지만 위와 같이 작성하였을 경우에는 초기화 작업이 한번 들어가야 한다.
사용법은 아래와 같다.
var calc2 = require("./calc2");
var myCalc = calc2(1, 2);
console.log( myCalc.add() ); // 3
2. 파일 모듈 로딩
파일 모듈 로딩은 코어 모듈 로딩, 파일 모듈 로딩 방식과 폴더 모듈 로딩 방식이 있다.
말 그대로 파일모듈로딩은 파일을 폴더 모듈로딩은 폴더의 파일들을 묶어서 로딩할 수 있는 Java의 package와 같다고 보면 된다.
- 코어 모듈 로딩
코어 모듈은 NodeJS에서 제공하는 모듈이다.
코어 모듈은 경로가 아닌 모듈명 참조로 로딩하며 같은 이름의 서드파티 모듈이 존재하다라도 우선적으로 로드된다.
var http = require("http");
코어 모듈은 API를 참조 하면 된다.
- 파일 모듈 로딩
파일 모듈은 코어 모듈이 아닌 모듈로서 로딩시 절대 경로 또는 상대경로로 지정하여 로딩한다.
//절대 경로
var myModule = require("/home/nodejsDir/mymodule");
//상대 경로
var myModule2 = require("./nodejsDir/mymodule");
var myModule3 = require("./nodejsDir/mymodule.js");
이와 같이 로딩되며 로딩할 때 확장자인 .js는 생략해도 무관하다.
만약 js가 생략되었을 경우 우선적으로 해당 명칭의 모듈 파일을 로딩하고 없으면 폴더를 검색하게 된다.
- 폴더 모듈 로딩
폴더 모듈로딩은 폴더의 파일들을 묶어서 로딩할 수 있는 Java의 package와 같다고 보면 된다.
var myModuleDir = require("./nodejsDir");
이렇게 선언하면 해당 폴더 내의 모듈을 찾는다.
NodeJS는 이 폴더를 package라고 판단을 하여 package.json 파일을 찾는다.
해당 폴더에 package.json 파일이 없으면 package의 기본 모듈인 index.js 또는 index.node를 찾는다.
packate.json는 아래와 같이 작성할 수 있다.
{
"name" : "calc",
"main" : "./calc.js" //nodejsDir에 있다고 가정한다.
}
3. 모듈 캐싱
모듈은 처음 로딩 될때 캐싱된다.
결과적으로 한번만 로딩이 되어 여러번 호출 한다해도 반환되는 모듈은 항상 동일하다.
//mymodule.js
console.log("myModule 시작");
module.exports = function() {
console.log( "myModule 호출");
};
console.log("myModule 끝");
위의 모듈을 로딩하고 나면
var myModule = require("./mymodule");
다음과 같이 결과가 출력된다.
myModule 시작
myModule 끝
그럼 다음과 같이 두번 호출 한다고 해보자
var myModule1 = require("./mymodule");
var myModule2 = require("./mymodule");
그래도 결과는
myModule 시작
myModule 끝
반복하여 출력하는 것이 아니라 한번만 출력이 되는 것을 확인 할 수 있을 것이다.
이는 해당 모듈은 초기화가 한번만 일어난다는 의미임을 알 수 있다.
'JavaScript > NodeJS' 카테고리의 다른 글
[NodeJS] Path (0) | 2017.11.13 |
---|---|
[NodeJS] Event 활용 - 연결 및 제거 (0) | 2017.11.10 |
[NodeJS] Callback Function, Blocking Code, Non-Blocking Code (0) | 2017.11.07 |
[NodeJS] 내장모듈 사용 (0) | 2017.11.07 |
[NodeJS] Eclipse 연동 - plugin 설치 (0) | 2017.11.07 |