둘다 외부 파일이나 라이브러리의 코드를 불러온다는 같은 목적을 가지고 있으나 전혀 다른 문법 구조를 지니고 있다.
NodeJS에서 사용 되고 있는 CommonJS 키워드 이고 모듈을 불러오는 키워드 이다.
//export
const obj = {
num : 100,
sum: function(a,b){
console.log(a+b)
}
extract:function (a,b){
console.log(a-b)
}
}
moudule.exports = obj
// require
const obj = require('./exportFile.js')
obj.num; //100
obj.sum(10,20) // 30
obj.extract(10,20) //-10
export.name = 'happy'
export.sayHi = function (){
console.log('Hello World!)
}
export.Person = class Person {
constructor(name){
this.name = name;
}
}
const {name, sayHi, Person} = require('./exportFile')
console.log(name)
sayHi()
const person = new Person('gold')
ES6(ES2015)문법으로 다르패키지 안에 있는 클래스, 메소드, 변수 등의 데이터를 사용하고자 할 때 쓰는 키워드 이다.
const obj = {
num : 100,
sum: function(a,b){
console.log(a+b)
}
extract:function (a,b){
console.log(a-b)
}
}
export default obj;
import obj from './exportFile.js';
obj.num; //100
obj.sum(10,20) // 30
obj.extract(10,20) //-10
export const name ="Happy"
export function sayHi() {
console.log('Hello')
}
export class Person{
constructor(name){
this.name = name
}
}
-------------------
// import
import{name, sayHi, Person} from './exportFile.js'
console.log(name)
sayHi()
const person = new Person('haha')
const name = 'Happy'
function sayHello(){
console.log('hello'
}
class Peron {
constructor(name){
this.name = name
}
}
export{name, sayHello, Person}
-----------
//import 개별로 export 된걸 *로 한번에 붂고 as로 별칭을줘서, 마치 전체 export default 된걸 import 한 것처럼 사용 가능
import *as obj from './exportFile.js'
console.log(obj.name)
obj.sayHello()
const person = new obj.Person('haha')
- require()는 CommonJS를 사용하는 node.js문이지만 import()는 ES6에서만 사용한다.
- require()는 프로그램 어느 지점에서나 호출 할 수 있지만 import()는 파일의 시작 부분에서만 실행할 수 있다.
- 하나의 프로그램에서 두 키워드를 동시에 사용할 수 없다.
- 일반적으로 import()는 사용자가 필요한 모듈부분 만 선택하고 로드 할 수 있기 때문에 더 선호된다. 또한 require()보다 성능이 우수하여 메모리를 절약한다.
- babel과 같은 ES6코드를 변환해주는 도구 없이는 require 키워드를 사용해야한다.