타입스크립트를 사용하면서 어떤 값들을 어떤 객체의 속성들로만 제한하고 싶다면
const obj = {
RED: "빨강",
GREEN: "초록"
}
keyof typeof obj
같은 트릭을 사용하여
type COLOR = "RED" | "GREEN"
과 같은 효과를 누릴 수 있을 것이며,
또는, 객체가 아니라
const enum COLOR {
RED = "빨강",
GREEN = "초록"
}
enum 자료형을 사용함으로써 (여기서는 const enum을 사용했음)
위와 동일한 효과를 얻을 수 있다.
하지만 enum에는 다양한 단점이 존재하는데, (
https://engineering.linecorp.com/ko/blog/typescript-enum-tree-shaking/)
이러한 단점을 감수하고 enum을 작성하면 좋은 경우는 무엇이 있을까?
const enum과 enum의 차이점은 일단 뒤로 두고 enum자체와 object와의 차이점만 알아보자면 다음과 같을 것이다.
1. enum의 속성에는 재할당을 할 수 없다.
2. enum은 해당 객체에서, 다른 속성을 this없이 바로 참조할 수 있다.
1은 무엇이냐하면, 객체는 Object.freeze등의 추가적인 작업을 해주지 않는 이상, 언제든 해당 프로퍼티를 수정할 수 있다.
하지만 Enum은 한번 선언하면 해당 속성에 재할당을 할 수 없으므로 안전성이 높아진다고 할 수 있다.
2는, 자바스크립트의 익히 알려진 다음과 같은 코드에 대해서
const o = {
A: 1,
B: this.A
}
동작하지 않는다는 것을 알게 될 것이다.
하지만 enum에서는 다음과 같은 참조가 가능하다.
const enum O {
A=1,
B=A
}
즉, object를 사용할때에 비해 enum을 사용할때에 장점이 있긴하다.
이것에 대한 정답은 없으며, 만약 위 2가지 특징을 사용하지 않는다면 object를 불변한 타입으로 선언하여 사용하는 것이 맞지 않을까 라는 생각이 들었다.
'개발 > Web Programming' 카테고리의 다른 글
ChartJS를 그냥 사용하면 안되는 이유 (feat. momentJS) (0) | 2021.08.14 |
---|---|
maxLength 특징 메모 (0) | 2021.08.09 |
dom에서 test id를 제거해주는 babel-plugin을 만든 후기 (2) | 2021.07.25 |
github oauth 구현하기 (0) | 2021.07.24 |
React에서 useRef를 사용하여 인터렉티브한 효과를 주는 방법 (0) | 2021.07.23 |