TypeScript가 필요해진 이유
초기 javascript의 경우 Web 환경이 이렇게 커질 것이라고 생각을 하지 못했기 때문에 짧은 형태의 간단한 코드들로 이뤄질 것이라고 생각하여 단순한 형태의 간단한 Scripting Language를 만들려고 했습니다.
그렇기 때문에 언어의 복잡도를 최소화하고 Running Curve(습득 난이도)를 낮추기 위해 당시에 가장 유행 중이던 C++과 java의 문법을 빌려오는 방향으로 구성이 되었습니다.
이로 인해 Java 계열의 문법을 차용하면서도 type을 제거하고 class와 같은 복잡성을 야기할 수 있는 부분들도 제거하여 간결한 문법을 가지면서 Type 없이 객체지향도 함수형 프로그래밍도 할 수 있는 Prototype의 객체 기반 함수형 동적 타입 스크립트의 특징을 가진 javascript가 생성되게 되었습니다.
javascript는 웹의 필수 언어로 거듭나면서 지속적으로 발전했지만, 개선해야될 부분들이 여전히 많이 존재하였습니다. 아래의 장표는 State of JS 2021에서 Javascript의 개선점으로 뽑은 내용들 입니다.
해당 투표에서 1위를 차지한 것은 Static Typing(정적 타이핑)이었는데, 동적 타입 언어로 개발된 Javascript의 경우 대규모 협업 과정에서 여러가지 에러가 발생할 수 있는데 이러한 에러를 바로 바로 확인할 수 있는게 아니라 Runtime 환경에서만 확인을 할 수 있다는 치명적인 단점을 가지고 있어 생산성의 큰 저하를 가져왔습니다.
TypeScript란?
이러한 이유를 인해 Microsoft에서는 개발한 TypeScript는 아래와 같은 특징은 가지고 있습니다.
1. Compile Language, Static Type Langugae
TypeScript는 JavaScript와는 달리 정적 타입의 컴파일 언어입니다. 코드 작성 단계에서 Type을 체크하여 오류를 사전에 확인할 수 있고 미리 Type을 결정하기 때문에 실행 속도가 매우 빠르다는 장점이 있지만, 코드 작성 시 매번 타입을 결정해야 하기 때문에 번거롭고 코드량이 증가하며 Compile 시간이 오래 걸린다는 단점이 있습니다.
2. JavasScript의 Superset(슈퍼셋)
TypeScript는 JavaScript의 기본 문법에 TypeScript의 문법을 추가한 언어로써, Javascript의 Superset이라고 할 수 있습니다. JavaScript의 문법을 100% 지원하기 때문에 Javascript로 작성된 Code를 TypeScript로 Compile해 사용할 수 있습니다.
※ Android의 Java와 Kotlin이라고 생각하면 좋음
3. 객체 지향 프로그래밍 지원
TypeScript는 ES6(ECMAScript 6)에서 새롭게 사용된 문법을 포함하고 있으며, Class, Interface, inheritance, Module 등과 같은 객체 지향 프로그래밍 패턴을 지원합니다.
또한, TypeScript는 아래와 같은 Compile 과정을 거쳐 실행 됩니다.
* 프로그래머가 수행
1. TypeScript Code 작성
* TypeScript Compiler가 수행
2. TypeScript Code를 AST(Abstract Syntax Tree, 추상 구문 트리)라는 구조로 변환
3. TypeChecker가 Code의 Type Stability(타입 안정성)을 검증
4. Type Stability가 정상적으로 완료되었다면, TypeScript AST를 Javascript Code로 변환
* Browser, NodeJS와 같은 Javascript Engine이 수행
5. 변환된 Javascript Code를 다시 Javascript AST로 변환
6. Javascript AST를 ByteCode로 변환
7. Runtime에서 ByteCode를 평가 및 실행
'Study > WEB' 카테고리의 다른 글
Docker를 이용한 Redis 환경 구축하기 (0) | 2022.10.06 |
---|---|
TypeScript 시작하기 - 환경 구성 (0) | 2022.10.03 |
Spring Boot + Kotlin의 모니터링 도구, Spring Actuator, Prometheus, Grafana (2/2) (0) | 2022.09.18 |
Spring Boot + Kotlin의 모니터링 도구, Spring Actuator, Prometheus, Grafana (1/2) (0) | 2022.09.18 |
URI, URL, URN의 차이점 (0) | 2022.08.17 |
댓글