TIR: 타입스크립트 프로그래밍 (2) 타입스크립트 3000미터 상공에서 내려다 보기 - 220731

Lumpen·2022년 8월 1일
0

TIR

목록 보기
24/40

컴파일러

타입스크립트는 자바스크립트나 자바 같은 주요 언어와는 다르게 동작한다

프로그래밍 언어의 작동 방식

컴파일러에서 아래와 같은 동작으로 프로그램이 실행됨

  1. 프로그램이 작성된 텍스트 파일 -> AST
  2. AST-> 바이트코드
  3. 바이트코드를 런타임 프로그램에 전달하여 평가, 결과 반환 받음

프로그램이 작성된 텍스트 파일은 컴파일러 프로그램을 통해 파싱되어
AST(추상 구문 트리)라는 자료구조로 변환된다
AST는 공백, 주석 등을 무시한다
컴파일러는 AST를 하위 수준의 표현인 바이트코드로 변환한다
바이트코드가 만들어졌으면, 런타임이라는 다른 프로그램에

프로그램이 실행된다는 것은
프로그램 파일을 AST로 파싱하고, bytecode로 변환한 것을 런타임이 평가하도록 컴파일러가 지시하는 것

타입스크립트가 다른 언어와 다른 점은 컴파일러가 코드를 바이트코드 대신 자바스크립트로 변환한다는 것
때문에 컴파일러 보다는 트랜스파일러라는 구체적인 표현을 사용하기도 함

트랜스파일러

하나의 언어를 비슷한 수준의 추상화를 갖는 다른 언어로 변환하는 컴파일러

타입 검사기

코드의 타입 안정성을 검증하는 프로그램

타입스크립트의 컴파일러는 AST를 만들어 결과를 반환하기 전에 타입 확인을 거친다

자바스크립트 엔진

보통 자바스크립트 컴파일러와 런타임은 엔진이라는 하나의 프로그램으로 합쳐진다
프로그래머는 주로 이 엔진과 상호작용 한다

  • V8 엔진: Node.js, 크롬, 오페라 등에서 사용
  • 스파이더몽키: 파이어 폭스
  • 샤크라: 엣지
    엔진은 자바스크립트가 해석되는 인터프리터 언어의 모습을 갖게 만든다

타입스크립트의 컴파일러는 AST를 반환하기 이전에 타입을 검사하기 때문에 TSC가 타입스크립트를 자바스크립트 코드로 변환할 때는 타입 확인을 하지 않는다
개발자가 코드에 기입한 타입 정보는 최종적으로 만들어지는 프로그램에 아무 영향도 주지 않고, 단순히 타입을 확인하는 데만 쓰인다
따라서 마음껏 타입을 변환하고 실험해보아도 프로그램이 실행되는 데는 지장을 주지 않는다

타입 시스템

타입 검사기가 프로그램에 타입을 할당하는데 사용하는 규칙 집합
최신 언어는 저마다의 타입 시스템을 갖추고 있다

타입 시스템은 보통 두 가지 종류, 명시적으로 컴파일러에 타입을 알려주는 시스템과 자동으로 타입을 추론하는 시스템으로 구분된다

두 시스템은 장단점이 있다

언어별 타입시스템

자바스크립트, 파이썬, 루비 등은 런타임에 타입을 추론
하스켈, 오캐멀 등은 컴파일 타임에 추론 및 빠진 타입 검사
타입스크립트, 스칼라는 명시적 타입 지원하고, 빠진 타입에 대해서는 컴파일 타임에 타입 추론, 자바와 C는 모든 타입에 대해 타입을 명시하며 이를 컴파일 타임에 확인한다

타입스크립트는 두 시스템 모두의 영향을 받았다
개발자는 타입을 직접 명시하거나, 타입스크립트가 추론하도록 할 수 있다

어노테이션

어노테이션은 명시적으로 타입을 입력하는 방식으로 사용하지 않을 경우 자동 추론을 한다

'value: type' 형태로 작성

let a: number = 1
let b: string = 'hi'

타입스크립트는 굉장히 추론을 잘 해내기 때문에
되도록 추론 가능한 부분에 대해서는 어노테이션을 생략하여 코드를 줄인다

자바스크립트 vs 타입스크립트

타입 시스템자바스크립트타입스크립트
타입 결정동적정적
타입 자동 변환O대부분 X
타입 확인 시점런타임컴파일
타입 에러 검출 시점대부분 런타임대부분 컴파일

자바스크립트는 동적 타입 바인딩으로 실행 전에 특정 데이터 타입을 알 수 없다
타입스크립트는 점진적으로 타입을 확인하는 언어다
타입스크립트는 컴파일 타임에 프로그램의 모든 타입을 알고있을 때 최상의 결과를 보여줄 수 있지만, 프로그램을 컴파일 하는 데 반드시 모든 타입을 알아야 하는 것은 아니다
일부 타입은 타입 추론을 통해 가능하지만
모든 타입을 알지 못한다면 오류가 발생할 수 있다

점진적 타입 확인

점진적 타입 확인을 하는 타입스크립트는 타입을 지정하지 않은 기존 자바스크립트를 타입스크립트로 마이그레이션 할 때 특히 유용하다

하지만 코드를 마이그레이션 하는 상황이 아니라면 모든 타입을 컴파일 타임에 지정하는 것을 목표로 해야한다

타입 자동 변환

자바스크립트는 약한 타입 언어다
최대한 타입을 변환하려 노력한다

타입 스크립트는 정적 타입 언어로 유효하지 않은 작업에 즉시 에러를 반환한다

타입 검사 시점

자바스크립트는 최대한 타입을 변환하여 실행할 뿐 대부분의 상황에서 타입이 무엇인지 따지지 않는다
타입스크립트는 컴파일 타임에 코드의 타입을 확인하기 때문에 코드를 실행하지 않고도 코드에 에러가 있음을 바로 알 수 있다
정적으로 코드를 분석해 에러를 검출하여 실행 전에 알려준다

에러 검출 시점

자바스크립트는 런타임에 예외나 암묵적 형변환을 수행한다
프로그램을 실행해야만 문제를 확인할 수 있다

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

미리 검사할 수 없는 에러

스택 오버플로우, 네트워크 연결 끊김, 잘못된 사용자 입력 등은 컴파일 타임에 검출할 수 없다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글