모듈(module)이란?

전체를 이루는 부품 하나하나 (node.js에서는 javascript파일 하나를 모듈 하나라고 생각하면 편하다.)

이런 모듈이 모여서 하나의 프로그램이 되기 때문에 하나의 모듈에서 다른 모듈에 있는 기능을 가져다 쓰는 법을 아는 것이 중요하다.


<math-tools.js >
  
function add(x,y){
  return x+y;
}

math-tools.js파일에 add라는 함수가 존재하고 나는 이 add라는 함수를 다른 js파일에서 사용하고 싶다.

이러 상황에서 다른 파일에서 add함수를 사용하기 위해선 먼저 math-tools모듈을 가져와야 하는데 이때 모듈을 가져오는것을 모듈을 로드한다라고 말한다.

require함수

이렇게 다른 모듈을 특정 모듈에서 로드할 때는 require이라는 함수를 사용한다.

그래서 실제로 main.js파일에서 require함수를 통해 math-tools.js 모듈을 로드해줄 수 있다.

<main.js>

const mathTool = require('./math-tools.js');

console.log(mathTool.add(1,2)) 

그런데 이렇게만 하면 올바르게 모듈이 로드 되지 않는다. 자신이 로드 되는 입장에 있는 math-tool.js에서도 특정한 조취를 취해야 한다.

exports

특정 기능을 외부 모듈에서 쓰기 위해 특정 기능이 있는 모듈에서 그 기능을 외부로 공개해야한다. 그때 쓰는 키워드가 exports이다.


<math-tools.js >
  
function add(x,y){
  return x+y;
}

exports.add = add;
//exports.모듈 외부로 공개할 이름= 모듈 내부에서 사용하고 있는 이름

이런식으로 적어야 add함수가 모듈 외부로 공개가 된다.

함수 뿐만 아니라 다양한 것들을 외부 모듈에 공개할 수 있고 또 만약 외부에 공개하고 싶은 것들이 여러개 라면 단순히 exports를 많이 써주는 것보다 한번에 모아서 외부 모듈에 공개할 수 있다.

module.exports


<math-tools.js >
  
let calculator = {
  PI:3.14,
  add:(a,b) => a+b,
  subtract:(a,b) => a-b,
}

module.exports = calculator;

여기서 알 수 있는 것은

  • exports -> 모듈 안에 있는 것들을 하나씩 공개

  • module.exports -> 공개하고 싶은 것들을 모은 객체를 외부에 공개

profile
steadyness is all time way

0개의 댓글

Powered by GraphCDN, the GraphQL CDN