티스토리 뷰
✅ 이전 포스팅에서 초기 렌더링 속도를 개선하고자 했을 때 import 방식을 바꾼 적이 있습니다. default export, named export의 사용 차이점에 대해서는 알고 있었지만 정확한 개념과 특징에 대해 알기 위해서 공부하고 포스팅을 합니다.
📌 Default Export
/* export : MyFunc.js */
const MyFunc = () => {}
export default MyFunc; // ok
export default const MyFunc = () => {} // error
/* import */
import MyFunc from "./MyFunc"; // ok
import newFunc from "./MyFunc"; // ok
[ export ]
- Default로 선언된 모듈은 하나의 파일에서 단 하나의 변수 또는 클래스만 export 할 수 있습니다.
- let, const 를 바로 default export 할 수는 없습니다. (- error 부분)
[ import ]
- 모듈의 이름이 무엇이든지 상관없이 default로 내보낸 모듈은 어떤 이름으로든지 import 할 수 있습니다.
📌 Named Export
/* export : MyFunc.js */
export const MyFunc = () => {}
export const MyFunc2 = () => {}
export const MyFunc3 = () => {}
/* import 방법 1. 기본 */
import {MyFunc} from "./MyFunc";
import {MyFunc2} from "./MyFunc";
import {MyFunc3} from "./MyFunc";
/* import 방법 2. 여러개 혹은 한번에 불러오기 */
import {MyFunc, MyFunc2, MyFunc3} from "./MyFunc"; // 여러개 불러오기
import * as myFuncs from "./MyFunc"; // 한번에 불러오기
myFuncs.MyFunc(); // ok
myFuncs.MyFunc2(); // ok
myFuncs.MyFunc3(); // ok
/* import 방법 3.
import {export한 이름 as 재정의하여 사용할 이름} from "불러오는 파일 경로";
*/
import {MyFunc as callFunc} from "./MyFunc";
callFunc(); // ok
[ export ]
- 하나의 파일 내에서 여러 변수 또는 클래스 등을 export 할 수 있습니다.
[ import ]
- import할 때는 기본적으로 export할 때 사용된 변수명을 동일하게 설정하고 중괄호로 감싸서 불러옵니다.
- 불러오는 파일의 export 한 갯수와 상관없이 불러올 때는 원하는 것만 택하여 불러옵니다. (- 방법 1)
- import { export 이름 as 재정의할 이름} from "파일 경로" 형식으로 export 의 이름을 재정의하여 사용할 수 있습니다. (- 방법 2)
- 중괄호({})안에 export할 모듈을 , 로 구분하여 여러 개를 나열하여 불러올 수 있습니다. (- 방법 2)
- * 키워드를 쓰면 파일에 있는 모든 모듈을 한꺼번에 불러옵니다. (- 방법 3)
🤔 그럼 뭘 써야할까요?
- 먼저 위에서 보셨다시피 사용법에 차이만 있지 import하여 사용하면 함수 자체 동작은 똑같습니다.
Tree-Shaking
- 나무를 흔들어서 죽은 나뭇잎들을 떨어뜨리듯, 코드를 빌드할 때 실제로 쓰지 않는 코드들을 제외한다는 뜻.
- 하지만 최근 제가 가장 관심을 가지고 있는 Tree-Shaking 관점에서 보면 차이점이 있습니다.
- 큰 객체를 default export 한다면 tree-shaking이 불가능합니다. (한 번에 모두 불러와 사용하므로 사용하지 않는 값들이 포함될 가능성이 높음)
- 반면 큰 객체라도 named export로 하나씩 export 하여 사용한다면 사용하지 않는 값들에 대해 tree-shaking이 가능합니다.
- 이 외에도 default export의 단점은 여러 가지가 있습니다.
- 검색이 어려움 + 리팩터링의 어려움
- commonJS 사용자들에게 혼동을 줄 수 있음.
- named export가 다시 export 하는데 훨씬 편함.
- .. 등등
❗그렇다면 모든 케이스에 named export를 쓰는 것이 좋을까요?
개인적인 대답은 "아니요 !" 입니다.
- 내보낼 것이 한 개인 경우나 내보내고 모두 사용하면 default export ..
- 상수들이나 여러 개의 export가 필요한 경우 named export ..
따라서 default export, named export 의 차이와 사용법에 대해서 숙지하여 자신의 상황에 따라 적절한 export를 사용하는 게 제일 좋은 것 같습니다 ~
🔗 참고한 글
'JavaScript' 카테고리의 다른 글
JS - 동작원리와 비동기처리 (1) | 2022.11.11 |
---|---|
JS - 쓰로틀링(throttling)과 디바운싱(debouncing) (0) | 2022.09.08 |
정규 표현식 (Regular Expression) (3) | 2022.07.18 |
시맨틱 웹(Semantic Web) ? (2) | 2022.07.16 |
JS - 구조 분해 할당 문법 ? (0) | 2022.07.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Virtual Scroll
- 가상스크롤
- array
- 렌더링 속도 개선
- React로 쓰로틀링 디바운싱 구현
- Next.js
- typescript
- next.js에 .gitignore가 적용되지 않을 때
- programmers
- 목표 일기
- redux
- debouncing
- 자바스크립트 비동기 동작원리
- vue
- react
- 1급 객체
- rewrites
- 1급 함수
- 타입스크립트
- 매겨변수와 인자
- zustand
- 함수형 컴포넌트
- next.js 환경변수
- useRef
- 시맨틱 웹
- 호이스팅
- 1급 시민
- 자바스크립트 동작원리
- redirects
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함