모듈

2024. 4. 11. 16:14·Javascript

모듈이란

프로그램을 구성하는 구성요소의 일부를 말합니다.

  *큰 애플리케이션을 구성하는 코드로 이루어진 작은 파일들 각각이라고 보면 됩니다.

모듈의 장점은 다음과 같습니다.

  • 유지보수성 : 모듈화가 잘 된 기능들은 의존성이 낮아, 기능 개선 및 수정이 용이합니다.
  • 네임스페이스화 : 네임 스페이스가 모듈 단위로 나뉘어져 변수나 함수명이 겹쳐서 발생하는 문제를 해결할 수 있습니다.
    *네임스페이스: 이름공간으로, 여기서 같은 변수명을 가지면 같은 개체를 가리킵니다.
  • 재사용성 : 똑같은 코드를 반복하지 않고 모듈로 분리시켜서 필요할 때마다 사용할 수 있다.

CommonJS(CJS)

서버사이드 및 데스크탑 어플리케이션에서 JS를 지원하기 위해서 탄생했습니다.

  *즉, Node.js 환경을 위해 만들어졌습니다.

모듈을 가져올 때 require, 모듈을 내보낼 때는 module.exports를 사용합니다.

// a.js
const printHelloWorld = () => {
  console.log('Hello Wolrd');
};

// 내보내기
module.exports = {
  printHelloWorld
};
// b.js
// 가져오기
const func = require('./a.js'); 
func.printHelloWorld();
  • 여기서 module.exports의 module은 현재 모듈에 대한 정보를 갖고 있는 객체입니다.
  • 그 안에 id, path, parent 등의 속성이 있고 exports 객체를 가지고 있다.

exports vs module.exports

  • 둘의 관계를 간략하게 코드로 나타내면 다음과 같습니다.
    결국 module.exports나, exports나 module.exports를 반환합니다.
// module.exports
var module = {
	exports: {}
};

// exports
var exports = module.exports;

return module.exports;
exports.a = function(num) { return num };
exports.b = function(num) { return -num};

// -- 둘은 동일하게 module.exports 멤버에 키값 a, b를 가지고 추가됩니다.

module.exports = { 
	a: function(num) { return num },
	b: function(num) { return -num},
}

 

ES6 module(ESM)

ES6에 도입된 모듈 시스템입니다.

  • import, export를 사용해 분리된 자바스크립트 파일끼리 서로 접근할 수 있습니다.
  • 스크립트 내 다음과 같은 속성을 추가해야 모듈로 사용할 수 있습니다.
  • <script type="module"></ script>
    *이렇게 하면 각각의 모듈별로 스코프를 갖게 됩니다.

export 방식은 다음과 같습니다.

  • default export
    : 모듈 내에서 단 한번만 쓸 수 있습니다.
const A = () => {};
export default A;

import A from 'moduleA';
// 꼭 'A'가 아니어도 모듈 이름을 임의로 정해도 됩니다.
// import 어쩌구저쩌구 from 'moduleA';
  • named export
    : 모듈 내에서 여러번 쓸 수 있습니다.
export const B = () => {};

// export한 변수명과 일치해야 하며, 중괄호 속에 들어가 있어야 합니다.
import {B} from 'moduleB';

 

 

CJS 모듈 시스템을 채택했던 NodeJS 환경에서 ESM을 사용할 수 있습니다(v13.2 부터 정식 지원).

// package.json
...
{
	"type": "module",
	...
}
...

 

 

 

 

 

 

 

 

 

 

[참고자료]

[JS] 모듈에 대한 이해와 사용법

자바스크립트 모듈 시스템 | ES 모듈 | CommonJS 모듈 | 프론트엔드 날개달기

저작자표시 비영리 변경금지 (새창열림)

'Javascript' 카테고리의 다른 글

원시 / 참조 타입  (0) 2024.04.11
깊은 복사와 얕은 복사  (0) 2024.04.11
일급객체와 함수  (0) 2024.04.11
this가 가리키는 것  (0) 2024.04.11
스코프와 클로저  (0) 2024.04.11
'Javascript' 카테고리의 다른 글
  • 원시 / 참조 타입
  • 깊은 복사와 얕은 복사
  • 일급객체와 함수
  • this가 가리키는 것
URE
URE
Skill: Javascript, ReactJS, Next.js, React Native ... *블로그 이전 작업(24. 04. 11 ~ 24. 04. 15)
  • URE
    Dev++
    URE
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Browser (6)
      • OS (1)
      • Javascript (14)
      • React (19)
      • Next.js (4)
      • React Native (0)
      • Architecture (1)
      • Network (3)
      • 스크랩 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react18
    원시타입
    react
    상태관리라이브러리
    리덕스
    TCP
    IP
    리액트 코어
    Port
    자바스크립트
    javascript
    dataFetching
    JS
    Redux
    react concurrent
    리액트
    참조타입
    브라우저
    URL
    swr
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
URE
모듈
상단으로

티스토리툴바