Ryu.log

[ NodeJS 08 ] 모듈 시스템 본문

Prev-content

[ NodeJS 08 ] 모듈 시스템

류뚝딱 2018. 7. 30. 11:50



01. 모듈 시스템

이번에는 모듈을 만들어 보자, 먼저 이전에 만들어놓은 nodeStudy 라는 렉토리에 (본인이 편한곳 아무데나 상관없음)  
var.js 라는 js파일을 생성한 후, 아래와 같이 코드를 입력해보자.
// nodeStudy/var.js
const odd = '홀수입니다.';
const even = '짝수입니다.';
그 뒤에 func.js 파일을 만들어보자,
만약 odd와 even이라는 변수를 var.js가 아닌 비어있는 func.js 파일에서 사용 하기위해서는 어떻게 해야할까?

기존 front-end 방식으로는 아래와 같이
html 파일에 var.js 를 먼저 링크하고 그 뒤에 func.js 링크를 걸어서, func.js에서 var.js안쪽에 선언된 변수를 사용할 수 있었다.


기존에 위같은 방식은 만약 위쪽 var.js의 링크가 불러와지지않는 경우가 발생하면(사소한 오타 등) 오류가 났다.


개발자들은 어떻게하면 이런 사소한 오류를 잡으면서, 

좀더 확실하고 직관적이게 모듈화가 가능할까 라는 고심끝에 새로운 모듈 시스템을 만들었다.


먼저 파일을 불러오는 것부터 시작해보자.

// nodeStudy/func.js
const { odd, even } = require('./var');  // node.js에서 뒤에 .js는 당연히 js 이기때문에 생략가능

console.log(odd);
console.log(even);

func.js 파일에서 ES6에서 지원하는 비구조화할당을 통해서  odd와 even을 require한다.


require는 불러오는 키워드라고 생각하면 된다.

여기서 중요한것은 불러오는쪽에서만 이렇게 require하면 되는 것이 아니라,

불림을 당하는 쪽도 아래와 같이 코드 작성이 필요하다.

// nodeStudy/var.js
const odd = '홀수입니다.';
const even = '짝수입니다.';

module.exports = {
  odd,
  even
}

불림을 당하는 쪽도 "나를 불러와도 되"라는 선언을 해주어야 한다. 

module.exports를 선언하고 내보내고 싶은 것들을 객체를 리터럴을 통해 내보내 주면 된다.


module.exports는 내보내는 키워드라고 생각하면 된다.

이렇게 작성하면 코드가 기존 script 형식의 링크 를 통하여 작성된 코드보다 훨씬 더 명시적으로 변하게 되었다.


func.js에 함수를하나 만들어 보자!

// nodeStudy/func.js
const { odd, even } = require('./var');  // node.js에서 뒤에 .js는 당연히 js 이기때문에 생략가능

function checkOddOrEven (num) {
  if(num % 2) { // 홀수면
    return odd;
  }
  return even;
}

module.exports = checkOddOrEven;

이런식으로 함수를 선언하여 응용 할수도있다.


index.js파일을 하나 만들어서 var.js 와 func.js 둘 다 사용하여 응용을 해보자.

// nodeStudy/index.js
const { odd, even } = require('./var');
const checkNumber = require('./func');

function checkStringOddOrEven (str) {
  if(str.length % 2) { // 홀수면
    return odd;
  }
  return even;
}
console.log(checkNumber(10));
console.log(checkStringOddOrEven('hello'));

실제로 실행해보면 아래와 같이 결과 값이 나온다.



var.js는 func.js와 index.js에서 사용 되고있다. 이를 통해 모듈은 여러 번 재사용 될 수 있다는 사실을 알 수 있다.


'Prev-content' 카테고리의 다른 글

[ NodeJS 10 ] console 객체  (0) 2018.08.06
[ NodeJS 09 ] global 객체  (0) 2018.08.02
[ NodeJS 07 ] async / await  (0) 2018.07.27
[ NodeJS 06 ] 프로미스(Promise) API  (0) 2018.07.26
[ NodeJS 05 ] 프로미스(Promise) 이해하기  (0) 2018.07.25
Comments