[JavaScript] require/exports 와 import/export 차이

2023. 1. 29. 14:48·Today I learned

require/exports

require/exports 방식은 기존에 Node.js 에서 사용되던 CommonJS 모듈 방식으로, module.exports 객체에 모듈 전체를 담아 내보내고 require를 통해 해당 모듈을 불러오는 방식이다.

따라서 require를 사용하면 모듈 전체를 불러오게 되는데, 불필요한 모듈이 로드되기도 하고 어떤 부분을 모듈 내에서 사용했는지 알 수 없다.

import/export

import/export 방식은 ES6에 새로 등장한 ES 모듈 방식으로, import를 사용해 모듈을 가져온 뒤 만든 객체를 내보내기 위해 export를 사용하는 방식이다.

실제로 쓰이는 부분만 불러와 사용하기 때문에 메모리를 절약할 수 있다.

 

export 를 사용하는 방식은 require와는 약간 다르다.

- 단일 객체 내보내기 : export default

export default variable

- 복수 객체 내보내기 : export

두 개 이상을 내보낼 때는 { } 로 묶어서 export 하거나 각 변수명 앞에 export를 붙여주면 된다.

let myVar = "myVar 변수";
let myVarArray = ["안녕하세요", "Ron입니다."];

export { myVar, myVarArray }
export let myVar = "myVar 변수";
export let myVarArray = ["안녕하세요", "Ron입니다."];

참고) JavaScript와 Node.js의 공식 모듈 방식

JavaScript에서는 ES 모듈을 공식 모듈로 사용하고 있고, Node.js에서는 CommonJS 모듈을 공식 모듈로 사용하고 있다.

따라서 Node.js에서는 import/export 방식을 바로 사용할 수 없다.

Node.js에서 import/export 방식을 사용하려면 Babel이라는 별도의 도구가 필요하다. 

Node.js 13.2버전부터는 package.json 파일에 type 항목을 module로 설정하면 손쉽게 ES 모듈을 사용할 수 있게 되었다.

결론

require 는 기존 JavaScript에 사용된 CommonJS 모듈 방식에서 모듈 전체를 불러올 때 사용하는 키워드이다. 모듈 전체를 불러오기 때문에 불필요한 모듈이 로드되기도 하고 모듈 내에서 어떤 부분을 사용했는지 알 수 없다는 단점이 있다.

import 는 ES6에 도입된 ES 모듈 방식에서 모듈을 불러올 때 사용하는 키워드이다. 모듈 내에서 어떤 부분을 사용했는지 쉽게 알 수 있고, 실제로 사용하는 부분만 불러와 사용하기 때문에 메모리를 절약할 수 있어 require보다 성능이 좋다.

'Today I learned' 카테고리의 다른 글

[OS] CPU 스케쥴링  (0) 2023.01.30
[Network] URI 와 URL 의 차이점  (0) 2023.01.29
2020-11-11  (0) 2020.11.11
2020-02-06 모듈  (0) 2020.02.06
2020-02-05 JavaScript-객체  (0) 2020.02.05
'Today I learned' 카테고리의 다른 글
  • [OS] CPU 스케쥴링
  • [Network] URI 와 URL 의 차이점
  • 2020-11-11
  • 2020-02-06 모듈
rondeveloper
rondeveloper
  • rondeveloper
    Ron's learning record
    rondeveloper
  • 전체
    오늘
    어제
    • 분류 전체보기 (99) N
      • k8s (1) N
      • AWS (1)
      • 리눅스 (3)
      • Docker (8)
      • 라이브러리 & 프레임워크 (14)
        • React (2)
        • NestJS (8)
        • Spring (0)
        • Django (3)
        • FastAPI (1)
      • 웹 (2)
        • Nginx (1)
      • 프로그래밍 언어 (29)
        • HTML (0)
        • CSS (0)
        • JavaScript (21)
        • Python (3)
        • Node.js (0)
        • TypeScript (4)
        • Java (1)
      • Today I learned (9)
      • 알고리즘 (9)
        • 백준 (0)
        • 프로그래머스 (8)
        • 개념 (1)
      • 티끌모아 태산 (5)
        • 하루에 영단어 하나씩 (5)
        • 독서 (0)
      • 시행착오 (3)
      • 데이터베이스 (2)
        • MySQL (0)
      • 컴퓨터 과학 (8)
        • 네트워크 (2)
        • 운영체제 (0)
        • 데이터베이스 (2)
        • 자료구조 (4)
      • 포트폴리오 (4)
        • JJINCAFE IN SEOUL (4)
        • CODEUNICORN (0)
      • 회고 (0)
      • CICD (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    쿠버네티스
    컨테이너
    typescript
    iterable
    조인
    django
    모듈
    nestjs
    리눅스
    Docker
    Kubectl
    mysql
    Python
    생활코딩
    레벨2
    javascript
    Kubernetes
    기초
    배열
    redis
    Til
    코딩테스트
    typeorm
    스택
    자바스크립트
    IP 주소
    도커
    네트워크
    FastAPI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
rondeveloper
[JavaScript] require/exports 와 import/export 차이
상단으로

티스토리툴바