둘다 외부의 파일이나 라이브러리의 코드를 불러온다는 같은 목적을 가지고 있지만,
require
는 NodeJS에서 사용되고 있는 CommonJS 키워드이고 Ruby 언어 스타일과 비슷하다라고 볼수 있다.
import
는 ES6(ES2015)에서 새롭게 도입된 키워드로서 Java나 Python 언어 방식과 비슷하다.
각각의 선언방법은 다음과 같다.
/* CommonJS */
const name = require('./module.js');
-
/* ES6 */
import name from './module.js'
주요 차이점
1.require
는 CommonJS를 사용하는 node.js문이지만import
는 ES6에서만 사용한다.
2.require
는 프로그램의 어느 지점에서나 호출가능하지만import
는 예외를 제외하곤, 파일의 시작 부분에서만 실행할 수 있다.
3. 일반적으로import
는 사용자가 필요한 모듈 부분만 선택하고 로드 할 수 있기 때문에 더 선호된다. 또한require
보다 성능이 우수하며 메모리를 절약한다.
const는 변하지 않는 상수를 선언하는 키워드이며, 이 상수의 값을 재할당이나 재선언이 불가하다.
하지만 배열이나 객체의 경우 참조자료형에 해당하며 참조값을 변수에 주소를 할당한다. 따라서 숫자나 문자열과 같은 원시 자료형
은 stack 영역에 값 자체가 저장되지만 배열, 객체, 함수와 같은 참조 자료형
은 heap 영역에 값이 저장되고, stack에는 heap영역의 주소값만 저장된다.
즉, 실제 heap에 저장된 요소를 변경하더라도 참조된 주소를 변하지않기 때문에 const를 사용할 수 있는 셈이다.