나는 실무에서 Typescript를 사용하고 있고 공부도 Typescript 위주로 하고 있지만 아직은 Swift가 익숙하다. Typescript를 사용하면서 가장 그리운(?) 것이 struct
인데 value 타입이면서 내부에 computed variable과 method를 구현할 수 있는 점에서 Typescript에는 비슷한 기능이 없어서 아쉽다.
Swift에서 best practice는 data를 나타낼 때 struct을 사용하는 것이다. 그리고 Typescript에서는 type을 사용한다. 하지만 type
은 struct
와 같은 강력한 기능은 지원하지 않는데 왜일까? 오늘은 type
과 class
의 비교를 통해서 그 이유를 알아본다!
TypeScript의 class
는 런타임에 JavaScript로 트랜스파일되면서 실제로 실행 가능한 코드로 변환된다. 반면 type
과 interface
는 TypeScript 컴파일러가 타입 검사를 위해 사용하는 컴파일 타임 전용 개념으로, 컴파일 후에는 JavaScript에 남지 않아서 런타임 오버헤드가 없다.
type
/ interface
특징:
class
특징:
메모리 사용:
class
는 상태와 동작을 포함할 수 있어서 메모리 사용량이 더 높아질 수 있다실행 속도:
class
는 런타임에 동작하므로 메서드 호출이나 초기화에서 약간의 성능 비용이 있을 수 있다type
은 Typescript의 컴파일 단계에서만 있는 개념이다. 따라서 Javascript 엔진이 이를 실행할 때는 type은 존재하지 않는다. 따라서 런타임에서 실행되는 struct
의 computed variable과 method와 같은 기능은 사용할 수 없다.
만약에 저런 것들을 원한다면 class로 구현해야 하고 이는 어느 정도의 비용을 감수해야 한다.