6장. 타입스크립트 컴파일
자바스크립트의 런타임과 타입스크립트의 컴파일
- 런타임과 컴파일타임
- 컴파일타임 : 소스코드가 컴파일 과정을 거쳐 컴퓨터가 인식할 수 있는 기계어 코드(바이트 코드)로 변환되어 실행할 수 있는 프로그램이 되는 과정
- 런타임 : 컴파일 과정을 마친 응용 프로그램이 사용자에 의해 실행되는 과정
- 타입스크립트의 컴파일
-
tsc라고 불리는 컴파일러를 통해 자바스크립트 코드로 변환
-
일반적으로 컴파일은 추상화 단계가 다른 고수준 언어에서 저수준으로 변환되는 과정을 가리킴
-
타입스크립트는 고수준 언어가 또 다른 고수준 언어(자바스크립트)로 변환되는 것이기 때문에 컴파일이 아닌 트랜스파일이라고 부르기도 함
-
타입스크립트 컴파일러는 소스코드를 해석하여 AST(최소 구문 트리)를 만들고 이후 타입을 거친 다음에 결과 코드를 생성한다.
AST(Abstract Syntax Tree)
- 컴파일러가 소스코드를 해석하는 과정에서 생성된 데이터 구조
- 컴파일러는 어휘적 분석과 구문 분석을 통해 소스코드를 노드 단위의 트리 구조로 구성함
-
타입스크립트는 컴파일 타임에 타입을 검사하기 때문에 에러가 발생하면 프로그램이 실행되지 않음.
-
이러한 특징 때문에 타입스크립트를 컴파일타임에 에러를 발견할 수 있는 정적 타입 검사기라고 부름
-
타입스크립트 컴파일러의 동작
- 코드 검사기로서의 타입스크립트 컴파일러
- 타입스크립트는 정적으로 코드를 분석하여 에러를 검출하며, 코드를 실행하기 전에 자바스크립트 런타임에서 발생할 수 있는 에러를 사전에 알려줌
- 즉, 컴파일 타임에 문법 에러와 타입 에러를 모두 검출함
- 타입스크립트 컴파일러는 tsc binder를 사용하여 타입 검사를 하며, 컴파일 타임에 타입 오류를 발견함
- 타입 검사를 거쳐 코드를 안전하게 만든 이후에는 타입스크립트 AST를 자바스크립트 코드로 변환함
- 코드 변환기로서의 타입스크립트 컴파일러
- 타입을 검사한 다음에 타입스크립트 코드를 각자의 런타임 환경에서 동작할 수 있도록 구버전의 자바스크립트로 트랜스파일함
정리하자면 타입스크립트 컴파일러의 역할은
- 최신 버전의 타입스크립트, 자바스크립트 코드를 구버전의 자바스크립트로 트랜스파일한다.
- 코드의 타입 오류를 검사한다.
타입스크립트 컴파일러의 구조
타입스크립트 컴파일러는 다섯 단계를 거쳐 타입 검사와 자바스크립트 소스 변환을 진행한다.
스캐너 | → | 파서 | → | 바인더 | → | 체커 | → | 이미터 |
---|---|---|---|---|---|---|---|---|
.ts 토큰화 | 토큰 기반 AST 생성 | AST 노드 기반 심볼 생성 | AST + 심볼 기반 타입 검사 | AST + 코드 검사 기반 .js 생성 |
- 프로그램
- tsconfig.json에 명시된 컴파일 옵션을 기반으로 컴파일을 수행
- 스캐너
- 타입스크립트 소스 파일을 어휘적으로 분석하여 토큰을 생성하는 역할
- 파서
- 토큰 정보를 이용하여 AST 생성
- 바인더
- 체커 단계에서 타입 검사를 할 수 있도록 기반을 마련
- 타입 검사를 위한 심볼 데이터를 생성하고, 심볼은 이전 단계의 AST에서 선언된 타입의 노드 정보를 저장
- 체커와 이미터
- 체커 : 파서가 생성한 AST와 바인더가 생성한 심볼을 활용하여 타입 검사를 수행
- 이미터 : 타입스크립트 소스 파일을 자바스크립트(js) 파일과 타입 선언 파일(d.ts)로 생성