Part6_TypeSciprtCompile
김은정
책 읽기

6장. 타입스크립트 컴파일

자바스크립트의 런타임과 타입스크립트의 컴파일

  • 런타임과 컴파일타임
    • 컴파일타임 : 소스코드가 컴파일 과정을 거쳐 컴퓨터가 인식할 수 있는 기계어 코드(바이트 코드)로 변환되어 실행할 수 있는 프로그램이 되는 과정
    • 런타임 : 컴파일 과정을 마친 응용 프로그램이 사용자에 의해 실행되는 과정
  • 타입스크립트의 컴파일
    • tsc라고 불리는 컴파일러를 통해 자바스크립트 코드로 변환

    • 일반적으로 컴파일은 추상화 단계가 다른 고수준 언어에서 저수준으로 변환되는 과정을 가리킴

    • 타입스크립트는 고수준 언어가 또 다른 고수준 언어(자바스크립트)로 변환되는 것이기 때문에 컴파일이 아닌 트랜스파일이라고 부르기도 함

    • 타입스크립트 컴파일러는 소스코드를 해석하여 AST(최소 구문 트리)를 만들고 이후 타입을 거친 다음에 결과 코드를 생성한다.

      AST(Abstract Syntax Tree)


      • 컴파일러가 소스코드를 해석하는 과정에서 생성된 데이터 구조
      • 컴파일러는 어휘적 분석과 구문 분석을 통해 소스코드를 노드 단위의 트리 구조로 구성함
    • 타입스크립트는 컴파일 타임에 타입을 검사하기 때문에 에러가 발생하면 프로그램이 실행되지 않음.

    • 이러한 특징 때문에 타입스크립트를 컴파일타임에 에러를 발견할 수 있는 정적 타입 검사기라고 부름

타입스크립트 컴파일러의 동작

  • 코드 검사기로서의 타입스크립트 컴파일러
    • 타입스크립트는 정적으로 코드를 분석하여 에러를 검출하며, 코드를 실행하기 전에 자바스크립트 런타임에서 발생할 수 있는 에러를 사전에 알려줌
    • 즉, 컴파일 타임에 문법 에러와 타입 에러를 모두 검출함
    • 타입스크립트 컴파일러는 tsc binder를 사용하여 타입 검사를 하며, 컴파일 타임에 타입 오류를 발견함
    • 타입 검사를 거쳐 코드를 안전하게 만든 이후에는 타입스크립트 AST를 자바스크립트 코드로 변환함
  • 코드 변환기로서의 타입스크립트 컴파일러
    • 타입을 검사한 다음에 타입스크립트 코드를 각자의 런타임 환경에서 동작할 수 있도록 구버전의 자바스크립트로 트랜스파일함

정리하자면 타입스크립트 컴파일러의 역할은

  • 최신 버전의 타입스크립트, 자바스크립트 코드를 구버전의 자바스크립트로 트랜스파일한다.
  • 코드의 타입 오류를 검사한다.

타입스크립트 컴파일러의 구조

타입스크립트 컴파일러는 다섯 단계를 거쳐 타입 검사와 자바스크립트 소스 변환을 진행한다.

스캐너파서바인더체커이미터
.ts 토큰화토큰 기반 AST 생성AST 노드 기반 심볼 생성AST + 심볼 기반 타입 검사AST + 코드 검사 기반 .js 생성
  • 프로그램
    • tsconfig.json에 명시된 컴파일 옵션을 기반으로 컴파일을 수행
  • 스캐너
    • 타입스크립트 소스 파일을 어휘적으로 분석하여 토큰을 생성하는 역할
  • 파서
    • 토큰 정보를 이용하여 AST 생성
  • 바인더
    • 체커 단계에서 타입 검사를 할 수 있도록 기반을 마련
    • 타입 검사를 위한 심볼 데이터를 생성하고, 심볼은 이전 단계의 AST에서 선언된 타입의 노드 정보를 저장
  • 체커와 이미터
    • 체커 : 파서가 생성한 AST와 바인더가 생성한 심볼을 활용하여 타입 검사를 수행
    • 이미터 : 타입스크립트 소스 파일을 자바스크립트(js) 파일과 타입 선언 파일(d.ts)로 생성