자바스크립트에서의 모듈

1. 모듈이란?

자동차는 크게 엔진, 바퀴, 핸들, 차체 등으로 구성되어 있다.

한 공장안에서 자동차에 들어갈 모든 품목을 만들 수도 있다.

그러나 한 예로, 바퀴는 자동차에도 쓰이고, 비행기에도 쓰일 수 있다.

따라서 바퀴를 만드는 공장을 따로 만들어서 그 공장을 필요할때마다 불러서 사용한다.

프로그래밍에서 모듈은 위의 개념과 동일하다.

자주 사용되는 것(기능)들을 따로 빼서, 필요할때마다 불러서(호출하여) 사용하겠다는 개념이다.

2. 모듈을 왜 사용하는가?

  • 코드 추상화 : 특수한 라이브러리에 기능을 위임하여 실제 구현의 복잡도를 이해할 필요가 없다.
  • 코드 캡슐화 : 코드를 변경하지 않으려면 모듈 내부에 코드를 숨긴다.
  • 코드 재사용 : 같은 코드를 반복해서 작성하는 것을 피한다.
  • 의존성 관리 : 코드를 다시 작성하지 않고도 쉽게 의존성을 변경한다.

모듈을 사용하는 방법 (CommonJS, ES6)

자바스크립트에서 모듈을 사용하는 방법은 실행환경에 따라 다양하다.

대표적으로 AMD, UMD, CommonJS 그리고 ES6 의 import, export 문법이다.

1. CommonJS

  • 모듈 가져오기

    // 전체 모듈 가져오기
    var module = require('./someModule.js');
    
    module.someMethod();
    
  • 모듈 내보내기

    // 모듈 객체 전체를 내보내기
    
    var moduleName = {};
    
    moduleName.sayHello = function() {
      console.log('hello');
    };
    
    moduleName.sayGoodbye = function() {
      console.log('goodbye');
    };
    
    module.exports = moduleName;
    
    // 하나의 속성만을 내보내기
    
    var sayHello = function() {
      console.log('hello');
    };
    
    // module.exports.sayHello = sayHello; 와 동일!
    exports.sayHello = sayHello;
    

2. ES6

  • 모듈 가져오기

    import moduleName from './someModule.js';
    
    moduleName.someMethod();
    
  • 모듈 내보내기

    const moduleName = {};
    
    moduleName.sayHello = function() {
      console.log('hello');
    };
    
    moduleName.sayGoodbye = function() {
      console.log('goodbye');
    };
    
    function foo() {
      return 'foo';
    };
      
    export { moduleName, foo };
    

References