일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 회고의 회고
- 함수
- 우아한테크코스
- 자바스크립트 객체
- express
- 프로그래머스
- 모듈 배포하기
- 우아한형제들
- 토이 프로젝트
- 토이프로젝트
- 개인 프로젝트
- 러닝 자바스크립트
- toast
- 자바스크립트
- npm
- 인사이드 자바스크립트
- CSS
- AWS
- html
- 리액트
- 우아한테크캠프 4기
- Hello Coding HTML5+CSS3
- 자바
- 코드스쿼드
- 알고리즘
- 레인지 슬라이더
- 네이버 테크 콘서트
- ES6
- 우아한테크캠프
- 주간 회고
- Today
- Total
블로그
[LINE Engineering] TypeScript enum을 사용하지 않는 게 좋은 이유를 Tree-shaking 관점에서 소개합니다. 를 읽고 본문
[LINE Engineering] TypeScript enum을 사용하지 않는 게 좋은 이유를 Tree-shaking 관점에서 소개합니다. 를 읽고
wooluck 2021. 5. 31. 03:42[LINE Engineering] TypeScript enum을 사용하지 않는 게 좋은 이유를 Tree-shaking 관점에서 소개합니다.
TypeScript의 기본 타입 중 하나인 enum은 다른 언어를 공부했던 사람들이라면 알고 있을(?) 타입이다.
enum은 enumeration의 약자로 열거형을 의미하며, 배열처럼 키(인덱스)로 접근해서 값을 가져오거나, 맵처럼 키로 접근해서 값을 가져올 수 있는 특징을 가지고 있다.
타입스크립트에서의 사용법은 아래와 같다.
// 기본 시작 값은 0.
enum Fish { Rockfish, Shark, Boxfish }
let f: Fish = Fish.Rockfish;
console.log(f); // 0
// 시작 값 변경
enum Fish2 { Rockfish = 1, Shark, Boxfish }
let f2: Fish2 = Fish2.Shark;
console.log(f2); // 2
// 임의 값 설정
enum Fish3 { Rockfish = 10, Shark = 7, Boxfish = 8 }
let f3: Fish3 = Fish3.Boxfish;
console.log(f3); // 8
enum은 아티클에 소개된 내용처럼 집합을 만드는데 큰 도움이 되는 타입이고, C패밀리 계열의 언어를 쓰는 개발자들이라면 상당히 친숙할 녀석이다.
하지만 JavaScript에서는 enum이 존재하지 않으며, TypeScript가 자체적으로 구현한 기능이라 Tree-shaking이 되지 않는다는 단점을 가지고 있다고 한다.
Tree-shaking : 사용하지 않는 코드를 삭제하는 기능을 의미한다.
TypeScript의 번들러는 즉시 실행 함수로 이를 구현하는데 이 함수가 이후에 사용되지 않는 코드임에도 최종 번들에 포함되는 현상!
출처 : https://engineering.linecorp.com/wp-content/uploads/2020/07/9fba7580-ba18-11ea-9c22-9344d1208a74-1024x512.png
그래서 추천하는 방식이 Union Types이며, 아래와 같은 방식으로 사용한다!
const Fish = {
RockFish: 0,
Shark: 1,
BoxFish: 2,
} as const;
type Fish = typeof Fish[keyof typeof Fish]
코드는 조금 더 길어졌지만 enum과 비교했을 때, 번들링 결과에서는 이를 감수할만한 확실한 차이가 발생한다.
// TypeScript
// enum
enum Fish { Rockfish, Shark, Boxfish }
let f: Fish = Fish.Rockfish;
// ---------------------------
// ---------------------------
// ---------------------------
// union
const FishUnion = {
RockFish: 0,
Shark: 1,
BoxFish: 2,
} as const;
type FishUnion = typeof FishUnion[keyof typeof FishUnion];
// JavaScript 번들링 이후
// enum
var Fish;
(function (Fish) {
Fish[Fish["Rockfish"] = 0] = "Rockfish";
Fish[Fish["Shark"] = 1] = "Shark";
Fish[Fish["Boxfish"] = 2] = "Boxfish";
})(Fish || (Fish = {}));
let f = Fish.Rockfish;
// ---------------------------
// ---------------------------
// ---------------------------
// union
const FishUnion = {
RockFish: 0,
Shark: 1,
BoxFish: 2,
};
아티클을 읽고 Union으로 만드는 건 enum에 비해 조금 번거롭지만 번들링된 결과물을 봤을 때,
충분히 시도할 가치가 있다는 결론을 내렸다.
언제나 그렇지만 아티클을 읽고 바로 적용할 수 있으면 적용기를 남기는게 좋을텐데...
이번에도 받아쓰기로 진행한 느낌?
'아티클' 카테고리의 다른 글
[TOAST] 자바스크립트에서 switch (true) 패턴 사용하기를 읽고 (0) | 2021.06.20 |
---|---|
[TOAST] React.memo() 현명하게 사용하기를 읽고 (1) | 2021.04.18 |
[TOAST] 더 나은 UX를 위한 React에서 스켈레톤 컴포넌트 만들기를 읽고 (0) | 2021.04.17 |
[우아한형제들] 팀 문화의 탄생을 읽고 (0) | 2021.04.12 |
[토스트] 리액트 useEffect: 개발자가 알아야 할 네가지 팁을 읽고 (0) | 2021.04.08 |