모듈이란 여러 기능들에 관한 코드가 모여있는 하나의 파일 로 다음과 같은 것들을 위해 사용한다.
유지보수성 : 기능들이 모듈화가 잘 되어있다면, 의존성을 그만큼 줄일 수 있기 때문에 어떤 기능을 개선한다거나 수정할 때 훨씬 편하게 할 수 있다.네임스페이스화 : 자바스크립트에서 전역변수는 전역공간을 가지기 때문에 코드의 양이 많아질수록 겹치는 네임스페이스가 많아질 수 있다. 그러나 모듈로 분리하면 모듈만의 네임스페이스를 갖기 때문에 그 문제가 해결된다.재사용성 : 똑같은 코드를 반복하지 않고 모듈로 분리시켜서 필요할 때마다 사용할 수 있다.CommonJS는 JavaScript 모듈 시스템의 일부로, 주로 서버 측 JavaScript 환경에서 사용되는 모듈 시스템이다. CommonJS는 Node.js에서 널리 사용되며, 서버 측 백엔드 코드를 작성할 때 주로 활용된다. 이 시스템은 모듈화된 코드를 쉽게 작성하고 재사용할 수 있도록 도와준다.
모듈 정의
// 모듈 정의 module.exports = { greet: function(name) { return `Hello, ${name}!`; }, // 다른 모듈에서 사용할 변수나 함수 등을 정의할 수 있습니다. };
모듈 가져오기
// main.js const myModule = require('./my-module'); console.log(myModule.greet('John')); // 출력: "Hello, John!"
AMD(Asynchronous Module Definition)는 JavaScript 모듈 시스템의 한 형태로, 주로 브라우저 환경에서 사용된다. AMD는 모듈을 비동기적으로 로드하고 정의할 수 있는 기능을 제공하여 웹 애플리케이션의 성능을 향상시키는 데 도움이 된다.
모듈 정의
define 함수를 사용하여 정의된다. 이 함수는 모듈의 종속성(dependencies)과 모듈 내용(factory function)을 정의한다.define(['dependency1', 'dependency2'], function(dep1, dep2) { // 모듈 내용을 정의합니다. return { someFunction: function() { // 모듈 기능을 정의합니다. }, }; });
모듈 가져오기
require(['myModule'], function(myModule) { myModule.someFunction(); });
💡 비동기 로딩
- AMD 모듈 시스템은 모듈을 비동기적으로 로드하므로 페이지 로딩 성능을 향상시킬 수 있다. 필요한 모듈만 로드되고 사용된다.
UMD(Universal Module Definition)는 JavaScript 모듈을 여러 환경에서 사용할 수 있도록 만든 형식 중 하나다. UMD는 모듈을 브라우저 환경, Node.js 등 다양한 환경에서 사용할 수 있도록 설계되어 있으며, CommonJS 및 AMD 모듈 시스템과 호환성을 가지고 있다.
모듈 정의
(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD 환경에서 모듈 정의 define(['dependency1', 'dependency2'], factory); } else if (typeof exports === 'object') { // CommonJS(Node.js) 환경에서 모듈 정의 module.exports = factory(require('dependency1'), require('dependency2')); } else { // 브라우저 환경에서 모듈 정의 root.myModule = factory(root.dependency1, root.dependency2); } }(typeof self !== 'undefined' ? self : this, function (dep1, dep2) { // 모듈 내용을 정의 return { someFunction: function() { // 모듈 기능을 정의 }, }; }));
모듈 가져오기
// 브라우저 환경에서 사용 myModule.someFunction(); // CommonJS(Node.js) 환경에서 사용 const myModule = require('myModule'); myModule.someFunction(); // AMD 환경에서 사용 require(['myModule'], function(myModule) { myModule.someFunction(); });
모듈 정의
// 모듈 정의 export function add(a, b) { return a + b; } export const pi = 3.14159265359;
모듈 가져오기
/ 모듈 가져오기 import { add, pi } from './my-module'; console.log(add(1, 2)); // 출력: 3 console.log(pi); // 출력: 3.14159265359
💡 ES6 모듈은 현대 JavaScript 개발에서 표준적인 방식으로 모듈을 작성하고 사용하는 데 권장된다.