모듈이란?
- 모듈: 자바스크립트 파일 하나
- 많은 코드가 필요한 프로그램은 하나의 파일로 관리하는 게 아니라 각 기능 별로 여러 개의 파일로 분리해서 관리하는 것이 좋음
- 모듈화 (Modularization): 공통된 기능이나 특별한 목적에 따라 각각의 파일로 분리하는 과정
- 코드를 효율적으로 관리할 수 있음
- 다른 프로그램에서 재사용할 수 있음
모듈 파일의 조건
- 모듈이 되는 파일은 독립적인 스코프를 가져야 함
- 모듈 스코프: 모듈 파일만이 가지는 독립적인 스코프
- HTML 파일에서 자바스크립트를 불러올 때 모듈 스코프를 갖게 하는 방법
<body>
<script> type="module" src="printer.js"></script>
<script> type="module" src="index.js"></script>
</body>
- 모듈 문법을 활용할 때는 브라우저에서 HTML 파일을 직접 불러 오지 않고 서버를 통해서 파일을 실행해야함
모듈 문법
- 모듈 스코프를 가진 파일에서 외부로 내보내고자 하는 변수나 함수:
export
키워드를 통해 내보내기
- 모듈 파일에서 내보낸 변수나 함수들 가져오기:
import
키워드 이용하기
- HTMl 파일에서는 자바스크립트 코드의 진입점 역할을하는 파일 하나만 불러옴
export const title = 'CodeitPrinter';
export function print(value) {
console.log(value);
};
import { title, print } from './printer.js';
print(title);
<body>
<script> type="module" src="index.js"></script>
</body>
이름 바꾸기
import { title as printerTitle, print } from './printer.js';
print(printerTitle);
한꺼번에 다루기
import
할 때 와일드카드 문자*
와 as를 활용하면 모듈 파일에서 export
하는 모든 대상을 하나의 객체로 불러올 수 있음
import * as printerJS from './printer.js';
console.log(printerJS.title);
console.log(printerJS.print);
- 변수나 함수 앞에 매번
export
키워드를 붙일 수도 있지만, 선언된 변수나 함수를 하나의 객체로 모아 한꺼번에 내보낼 수도 있음
- 이때
as
키워드를 활용하면 이름을 변경해서 export
할 수도 있음
const title = 'CodeitPrinter';
function print(value) {
console.log(value);
}
function printArr(arr) {
arr.forEach((el, i) => {
console.log(`${i + 1}. ${el}`);
});
}
export { title as printerTitle, print, printArr };
default export
export
를 할 때 default
키워드를 함께 사용하면 모듈 파일에서 기본적으로 export
할 대상을 정할 수 있음
default
키워드는 모듈 파일 내에서 딱 한번만 사용할 수 있음
- 일반적으로 모듈 파일에서
export
대상이 하나라면, default
키워드를 함께 활용하는 것이 조금 더 간결한 코드를 구성하는데 도움이 됨
const title = 'CodeitPrinter';
function print(value) {
console.log(value);
}
export default print;
import { default as printerJS } from './printer.js';
console.log(printerJS.title);
console.log(printerJS.print);
import printerJS from './printer.js';
console.log(printerJS.title);
console.log(printerJS.print);
활용
- 여러 개의 기능으로 잘게 나누어진 모듈을 import한 다음 다시 export하는 모듈 파일을 만들 수 있음
- 비슷한 특징을 가진 여러 모듈 파일들을 다시 하나의 모듈 파일로 만들 수 있어서 파일 관리를 유용하게 할 수 있도록 도와줌
import module1 from './sub-module1.js';
import module2 from './sub-module2.js';
import module3 from './sub-module3.js';
export { module1, module2, module3 };
import { module1, module2, module3 } from 'modules.js';