모듈화를 배우는 도중에 export, import 구문을 헷갈리지않도록 간단하게 정리하려고 한다.
export?
javascript 모듈에서 함수, 객체, 원시 값을 내보낼 때 사용한다.
내보낸 값은 import문으로 가져가 사용할 수 있다.
export 종류
Named Exports
Default Exports
예제를 살펴보기 앞서 예제의 폴더 구조는 이러하다.
.
├── index.html
├── kim.js // import 함수
└── sayHello.js // export 함수
Default Exports
1개의 모듈 export만 가능
Default Exports 예제
index.html
<script type="module" src="./kim.js"></script>
type="module"로 js를 추가하기
sayHello.js
export default function sayHello(name){
return `Hello ${name}`
}
export default라고 명시
kim.js
import sayHello from './sayHello.js'
const kim = sayHello('kim');
console.log(kim) // Hello kim
import 옆에 {} 작성하지말고 그대로 쓰기
Named Exports
0 또는 다수의 모듈 export 가능
Named Exports 예제
index.html
<script type="module" src="./kim.js"></script>
kim.js 추가
sayHello.js
export function hello(name){
return `안녕하세요! ${name}!`;
}
export function login(name){
return `${name} 님이 입장하셨습니다.`;
}
두개의 모듈 생성
kim.js
import { hello, login } from './sayHello.js';
const kimHello = hello('kim');
const kimLogin = login('kim');
console.log(kimHello);
console.log(kimLogin);
import {}을 이용하여 모듈 import
이름 바꾸기
모듈 내보내기에서 이름 바꾸기
sayHello.js
export function fn1(name){
return `안녕하세요! ${name}!`;
}
export function fn2(name){
return `${name} 님이 입장하셨습니다.`;
}
export {
fn1 as hello,
fn2 as enter
}
fn1, fn2로 선언되어 있는 함수를 export 할때 hello, enter로 각각 변환
kim.js
import { hello, enter } from './sayHello.js';
const kimHello = hello('kim');
const kimEnter = enter('kim');
console.log(kimHello);
console.log(kimEnter);
변환된 이름인 hello, enter로 사용
모듈 가져오기에서 이름 바꾸기
sayHello.js
export function fn1(name){
return `안녕하세요! ${name}!`;
}
export function fn2(name){
return `${name} 님이 입장하셨습니다.`;
}
kim.js
import { fn1 as hello, fn2 as enter } from './sayHello.js';
const kimHello = hello('kim');
const kimEnter = enter('kim');
console.log(kimHello);
console.log(kimEnter);
첫쨰줄에서 이름을 변경하여 가져온다.
모듈은 항상 strict mode를 사용한다.
sayHello.js
export function fn1(name){
a = `안녕하세요! ${name}!` // Uncaught ReferenceError: a is not defined
return a;
}
에러가 발생한다. (strict mode가 아니면 발생하지 않음)
모듈 사용의 이점
다른 기능을 가진 다른 코드가 다른 파일에 있기 때문에 코드 베이스는 유지 관리가 더 쉽다.
코드를 재사용 가능하게 만든다. 모듈을 정의하고 필요에 따라 여러번 사용할 수 있다.
Reference
https://www.programiz.com/javascript/modules
'개발 > JavaScript' 카테고리의 다른 글
[Vanilla Javascript] Jasmine을 이용해 테스트 코드 작성해보기 -1 (0) | 2022.04.10 |
---|---|
[Javascript] Closure 클로저 (0) | 2022.03.30 |
[Javascript] IIFE (즉시 실행 함수) (0) | 2022.03.25 |
[Javascript] Strict mode (0) | 2022.03.25 |
[Javascript] Observer Pattern 옵저버 패턴 (0) | 2022.03.20 |