3.4.5 module, exports
지금까지는 모듈을 만들 때 module.exports만 사용했는데, module 객체 말고 exports 객체로도 모듈을 만들 수 있습니다.
3.3절의 var.js를 다음과 같이 수정해도 index.js에서는 동일하게 불러올 수 있습니다.
// var.js
const odd = '홀수입니다';
const even = '짝수입니다';
module.exports = {
odd,
even,
}
// var.js
exports.odd = '홀수입니다';
exports.even = '짝수입니다';
위의 위 아래는 똑같은 기능을 하는 식입니다.
module.exports로 한 번에 대입하는 대신, 각각의 변수를 exports 객체에 하나씩 넣었습니다.
동일하게 동작하는 이유는 module.exports와 exports가 같은 객체를 참조하기 때문입니다.
실제로 console.log(module.exports === exports)를 하면 true가 나옵니다.
따라서 exports 객체에 add 함수를 넣으면 module.exports에도 add 함수가 들어갑니다.

Warning : exports 객체 사용 시
exports객체 사용 시에는module.exports와의 참조 관계가 깨지지 않도록 주의해야 합니다.
module.exports에는 어떤 값이든 대입해도 되지만,exports에는 반드시 객체처럼 속성명과 속성값을 대입해야 합니다.
exports에 다른 값을 대입하면 객체의 참조 관계가 끊겨 더 이상 모듈로 기능하지 않습니다.// func.js const { odd, even } = require('./var'); function checkOddOrEven (num) { if (num % 2) { // 홀수면 return odd; } return even; } module.exports = checkOddOrEven;
exports를 사용할 때는 객체만 사용할 수 있으므로 func.js와 같이module.exports에 함수를 대입한 경우에는exports로 바꿀 수 없습니다.
exports와module.exports에는 참조 관계가 있으므로 한 모듈에exports객체와module.exports를 동시에 사용하지 않는 것이 좋습니다.