728x90
반응형
/user01.js
// export 객체 속성으로 함수 추가
exports.getUser = function() {
return {id: 'module01', name: 'codereading'};
}
exports.group = {id: 'group01', name: 'Family'};
exports.sum = function (a, b) {
return a + b;
}
위의 파일은 모듈이 될 파일이고 3종류의 다른 함수와 객체값을 갖습니다.
/module01.js
// 모듈화한 파일을 불러와서 const 에 저장
const user01 = require('./user01');
// 모듈화한 파일에서의 정보 가져오기
const userName = user01.getUser().name;
const userId = user01.getUser().id;
console.log(userName, userId);
const groupId = user01.group.id;
const groupName = user01.group.name;
console.log(groupId, groupName);
const twoSum = user01.sum(123, 15);
console.log(twoSum);
위의 코드는 require 로 모듈파일을 불러와 내부에서 사용하는 코드입니다.
객체를 위와같은 방법으로 모듈화하고 불러올때는 exports 를 전역변수가 아닌 모듈내부에서 선언된 변수로 인식하게되어 제대로 모듈파일이 불러와지는것이 아닌 빈 객체를 만들어 내게됩니다.
따라서 객체를 모듈로 만들어주고싶을땐 아래와 같이 해야합니다.
/user01.js (객체 할당)
let user = {
getUser : function() {
return {id : 'user01', name : 'codereading'};
},
group : {id : 'group', name : 'family'},
sum : function(a, b) {
return a + b;
}
}
module.exports = user;
/user01.js (함수할당)
module.exports = function() {
return {id : 'user01', name : 'codereading'}
}
/module01.js (함수 할당한 모듈 불러와 사용)
// 모듈화한 파일을 불러와서 const 에 저장
const user01 = require('./user01');
console.dir(user01().name);
exports 와 module.exports 를 모두 사용할 수 있지만 함께 사용했을경우 module.exports 가 더 우선권이 주어지기때문에 실제 사용시에는 module.exports 의 사용을 권장합니다.
require() 메소드 동작방식
// require 동작방식 이해하기
var require = function(path) {
var exports = {
getUser : function() {
return {id : 'user01', name : 'codereading'};
},
group : {id : 'group', name : "family"},
sum : function (a, b) {
return a + b;
}
}
return exports;
}
let user = require('.');
let userName = user.getUser().name;
let userFamilyName = user.group.name;
let userSum = user.sum(3, 5);
console.log(`
userName : ${userName},
userFamilyName : ${userFamilyName},
userSum : ${userSum}
`);
모듈을 분리할때 사용하는 코드패턴
코드 패턴 | 설명 |
---|---|
함수를 할당하는 경우 | 모듈안에서 함수를 만들어 할당합니다. 모듈을 불러온 후 소괄호를 붙여 모듈을 실행합니다. |
인스턴스 객체를 할당하는 경우 | 모듈안에서 인스턴스 객체를 만들어 할당 모듈을 불러온후 해당 개체의 메소드를 호출하거나 속성을 사용 |
프로토타입 객체를 할당하는 경우 | 모듈 안에서 프로토타입 객체를 만들어 할당 모듈을 불러온 후 new 연산자로 인스턴스 객체를 만들어 사용 |
// === 함수할당 코드패턴 === //
// 모듈생성
let printUser = function () {
console.log('uer 이름은 codereading 입니다.');
}
module.exports = printUser;
// 모듈 불러올때
let printUser = require('불러올모듈파일이름').printUser;
printUser();
// === 인스턴스 객체를 할당하는 코드패턴 === //
// 모듈생성
function User(id, name) {
this.id = id;
this.name = name;
}
User.prototype.getUser = function() {
return {id: this.id, name: this.name};
}
User.prototype.group = {id : 'Group01', name : 'Family'};
User.prototype.printUser = function() {
console.log(`user 이름 : ${this.name}, Group 이름 : ${this.group.name}`);
}
module.exports = new User('User01', 'codereading');
// 모듈 불러올때
let user = require('불러올모듈파일이름');
user.printUser;
// === 프로토타입객체를 할당 === //
// 모듈생성
function User(id, name) {
this.id = id;
this.name = name;
}
User.prototype.getUser = function() {
return {id: this.id, name: this.name};
}
User.prototype.group = {id : 'Group01', name : 'Family'};
User.prototype.printUser = function() {
console.log(`user 이름 : ${this.name}, Group 이름 : ${this.group.name}`);
}
module.exports = User;
// 모듈 불러올때
let User = require('불러올모듈파일이름');
let user = new User('user01', 'codereading');
user.printUser();
code-reading 블로그에 방문해 주셔서 환영합니다.
댓글은 모두 환영하니 많이 달아주세요.
댓글은 모두 환영하니 많이 달아주세요.
728x90
반응형
'지난포스트 (deprecated) > NodeJS (deprecated)' 카테고리의 다른 글
Node.js + Express + MongoDB CRUD 만들기 (0) | 2018.12.28 |
---|---|
nodeJS + Express + mongoose REST API 제작 (0) | 2018.12.28 |
Node.js + Express + MongoDB 사용하기 (0) | 2018.12.20 |
My Node.js Tutorial (0) | 2018.12.20 |
노드란? (0) | 2018.12.18 |