일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- EC2
- AWS
- 안드로이드
- ssh
- SSH Key
- 자바
- rest
- express
- gmaps
- mean
- node
- node.js
- HTML
- 저장소
- ubuntu
- Linux
- Repository
- JSP
- Android
- 인공지능
- angularJs
- cordova
- git
- Q-Map
- 깃
- java
- Ionic
- commit
- Retrofit
- IT 도서
- Today
- Total
UroA 개발 블로그
[Node.js] module.exports 와 exports 이해하기 본문
1. 모듈이란 무엇인가?
모듈이란 관련된 코드들을 하나의 코드 단위로 캡슐화 하는 것을 말합니다. Node.js 에서 예시를 살펴보겠습니다.
다음과 같은 greeting.js 라는 파일이 있습니다. 이 파일은 두개의 함수를 포함하고 있습니다.
// greetings.js
sayHelloInEnglish = function() {
return "Hello";
};
sayHelloInSpanish = function() {
return "Hola";
};
2. 모듈 추출하기 (exporting)
gretting.js 의 코드가 다른 파일에서 사용될 때 그 효용성이 증가할 것입니다. 이러한 일을 하기 위해서는 다음과 같은 3가지의 단계를 거쳐야 합니다.
1) greeting.js 파일의 코드 첫 부분에 다음과 같은 코드가 존재해야 합니다.
// greetings.js
var exports = module.exports = {};
2) 다른 파일에서 exports 객체를 사용하기를 원한다면 greeting.js 파일에서 다음과 같이 작성해야 합니다.
// greetings.js
// var exports = module.exports = {};
exports.sayHelloInEnglish = function() {
return "HELLO";
};
exports.sayHelloInSpanish = function() {
return "Hola";
};
위의 코드에서 우리는 exports 를 module.exports 로 대체할 수 있으며 같은 결과를 얻을 수 있습니다. 이 부분이 잘 이해가 가지 않는다면 exports 와 module.exports 가 같은 객체를 참조한다고 기억하기 바랍니다.
3) module.exports 의 현재 값은 다음과 같습니다.
module.exports = {
sayHelloInEnglish: function() {
return "HELLO";
},
sayHelloInSpanish: function() {
return "Hola";
}
};
3. 모듈 사용하기 (importing)
main.js 라는 새로운 파일에서 greeting.js 의 메소드를 사용 할 수 있도록 import 하는 과정은 다음과 같습니다.
1) 먼저 require 이라는 키워드는 Node.js 에서 module(모듈)을 import(추가) 하기 위해 사용합니다. require는 다음과 같이 정의되어 있습니다.
var require = function(path) {
// ...
return module.exports;
};
2) 이제 main.js 에서 greetings.js 를 require 해보겠습니다.
// main.js
var greetings = require("./greetings.js");
위의 코드는 아래와 동일한 코드 입니다.
// main.js
var greetings = {
sayHelloInEnglish: function() {
return "HELLO";
},
sayHelloInSpanish: function() {
return "Hola";
}
};
3) main.js 에서 greeting.js 의 값과 메소드에 접근할 수 있습니다.
// main.js
var greetings = require("./greetings.js");
// "Hello"
greetings.sayHelloInEnglish();
// "Hola"
greetings.sayHelloInSpanish();
4. 중요한 포인트
require 키워드는 object 를 반환합니다. 그리고 module.exports 와 exports 는 call by reference 로 동일한 객체를 바라보고 있고, 리턴되는 값은 항상 module.exports 입니다.
모듈은 기본적으로 객체이고, 이 객체를 module.exports, exports 모두 바라보고 있는데, 최종적으로 return 되는 것은 무조건 module.exports 라는 것입니다.
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
module.exports = router;
위의 소스는 다음과 같이 해석할 수 있습니다.
express.Router() 가 리턴한 "객체"에 일부 프로퍼티를 수정한 뒤, 이 객체 자체를 모듈로 리턴한 것입니다.
[참고] http://www.sitepoint.com/understanding-module-exports-exports-node-js/
'Programming > Node.js' 카테고리의 다른 글
[Node.js] nodemailer 를 사용하여 이메일 전송하기 (0) | 2016.10.21 |
---|---|
[Node.js] PM2 log에 color 속성 나타내기 (0) | 2016.10.03 |
[Node.js] NVM (Node Version Manager) 설치하기 (0) | 2016.09.20 |
[Node.js] Express에서 template으로 HTML 사용하기 (0) | 2016.08.30 |