Swift와 Typescript의 차이: struct == type이고 class == class인가?

SteadySlower·2025년 1월 7일
0

Javascript&TypeScript

목록 보기
4/4
post-thumbnail

나는 실무에서 Typescript를 사용하고 있고 공부도 Typescript 위주로 하고 있지만 아직은 Swift가 익숙하다. Typescript를 사용하면서 가장 그리운(?) 것이 struct인데 value 타입이면서 내부에 computed variable과 method를 구현할 수 있는 점에서 Typescript에는 비슷한 기능이 없어서 아쉽다.
Swift에서 best practice는 data를 나타낼 때 struct을 사용하는 것이다. 그리고 Typescript에서는 type을 사용한다. 하지만 typestruct와 같은 강력한 기능은 지원하지 않는데 왜일까? 오늘은 typeclass의 비교를 통해서 그 이유를 알아본다!

type과 class의 차이

TypeScript의 class는 런타임에 JavaScript로 트랜스파일되면서 실제로 실행 가능한 코드로 변환된다. 반면 typeinterface는 TypeScript 컴파일러가 타입 검사를 위해 사용하는 컴파일 타임 전용 개념으로, 컴파일 후에는 JavaScript에 남지 않아서 런타임 오버헤드가 없다.

type / interface

특징:

  • 컴파일 타임에만 존재한다
  • 타입 검증을 위한 도구일 뿐, JavaScript 결과물에는 포함되지 않는다 ⭐️
  • 런타임 오버헤드가 없다

class

특징:

  • 컴파일 타임과 런타임 모두 존재한다
  • JavaScript의 클래스와 동일한 구조로 변환된다
  • 인스턴스 생성, 상태 저장, 메서드 포함이 가능하다
  • 런타임에서 동작하므로 약간의 메모리와 성능 오버헤드가 발생할 수 있다

메모리 사용:

  • class는 상태와 동작을 포함할 수 있어서 메모리 사용량이 더 높아질 수 있다
  • 다수의 인스턴스를 생성할 경우, 메모리와 초기화 비용이 발생한다

실행 속도:

  • class는 런타임에 동작하므로 메서드 호출이나 초기화에서 약간의 성능 비용이 있을 수 있다
  • 하지만 이 비용은 대부분의 상황에서 무시할 수 있는 수준이다

결론

type은 Typescript의 컴파일 단계에서만 있는 개념이다. 따라서 Javascript 엔진이 이를 실행할 때는 type은 존재하지 않는다. 따라서 런타임에서 실행되는 struct의 computed variable과 method와 같은 기능은 사용할 수 없다.

만약에 저런 것들을 원한다면 class로 구현해야 하고 이는 어느 정도의 비용을 감수해야 한다.

profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글