Thief of Wealth
Published 2021. 7. 25. 23:32
object와 enum 개발/Web Programming

타입스크립트를 사용하면서 어떤 값들을 어떤 객체의 속성들로만 제한하고 싶다면

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를 불변한 타입으로 선언하여 사용하는 것이 맞지 않을까 라는 생각이 들었다.

profile on loading

Loading...