
나는 실무에서 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로 구현해야 하고 이는 어느 정도의 비용을 감수해야 한다.