타입스크립트 타입

파쏭쏭계란빡 ㅣ 2023. 8. 30. 22:26

추상구문트리(abstract syntax tree)란?

AST는 프로그래밍 언어로 작성된 소스 코드의 추상 구문 구조의 트리이며, 이 트리의 각 노드는 소스코드에서 발생되는 구조를 나타낸다.

쉽게 말하면 우리가 작성한 소스코드를 문법에 맞게 노드들로 쪼개서 만든 트리라고 생각한다.

 

자바스크립트가 바이트 코드를 만드는 과정

  1. code를 파싱
  2. AST로 변경
  3. 바이트 코드로 변경

일반적인 컴파일 과정

  1. 소스코드를 컴파일러가 파싱하여 추상구문트리(abstract syntax tree, AST)로 변경
  2. AST는 공백, 주석, 탭, 공백 결과는 무시된다.
  3. 컴파일러는 AST를 바이트코드로 변환한다.
  4. 런타임이 바이트코드를 평가한다.

타입스크립트의 컴파일 과정

컴파일러는 타입스크립트 코드를 바이트코드 대신에 자바스크립트 코드로 변환한다.

컴파일러는 AST를 만들어 결과 코드를 내놓기 전에 타입 확인을 거친다.

 

ts   | 1. 타입스크립트 소스 -> 타입스크립트 AST
     | 2. 타입 검사기가 AST를 확인
     | 3. 타입스크립트 AST -> 자바스크립트 소스
     ──────────────
JS   | 4. 자바스크립트 소스 -> 자바스크립트 AST
     | 5. AST -> 바이트코드
     | 6. 런타임이 바이트코드를 평가

※ 자바스크립트 컴파일러와 런타임은 엔진에서 수행한다.(V8, JSCode 등)

 

타입 시스템

타입스크립트의 타입 시스템은 두가지

  1. 어떤 타입을 사용하는 지를 컴파일러에 명시적으로 알려주는 타입 시스템
  2. 자동으로 타입을 추론하는 타입 시스템

타입스크립트와 자바스크립트의 타입의 타입 시스템

타입 시스템 기능 자바스크립트 타입스크립트
타입 결정방식 동적 정적
타입이 자동으로 변환되는가? O X(대부분)
언제 타입을 확인하는가? 런타임 컴파일 타임
언제 에러를 검출하는가? 런타임(대부분) 컴파일 타임(대부분)

 

타입 결정 방식

동적 타입 바인딩(dynamic type binding)이란?

자바스크립트가 프로그램을 실행해야만 특정 데이터 타입을 알 수 있음(프로그램을 실행하기 전에는 알 수 없음)

 

정적 타입 바인딩(static type binding)이란?

타입스크립트는 컴파일 타임에 프로그램의 타입을 알수 있음(모든 타입을 알고있는 것은 아님)

 

타입 자동 변환

자바스크립트는 약한 타입 언어로 코드를 실행하면서 타입을 자동으로 변환한다.

타입스크립트는 타입을 명시해야 타입을 결정한다.

 

타입 확인 시점

자바스크립트는 대부분의 상황에서 타입이 무엇인지 따지지 않는다.

타입스크립트는 컴파일 타임에 코드 타입을 확인하고, 정적으로 코드를 분석해 에러를 검출하여 코드를 실행하기도 전에 알려준다.

 

에러 언제 검출 시점?

자바스크립트는 런타임에 예외를 던지거나 암묵적인 형변환을 수행한다.

타입스크립트는 컴파일 타임에 문법 에러와 타입 관련 에러를 모두 검출한다.

타입스크립트 타입