🎈주제: 타입스크립트 컴파일
1. 컴파일 과정 살펴보기
1-1. 코드 작성
// Hello.ts
function sayHello(name: string) {
console.log(`Hello, ${name}!`);
}
sayHello("TypeScript");
1-2. TypeScript 컴파일러 실행
TypeScript 컴파일러(tsc)를 실행한다.
이를 통해 TypeScript 파일(.ts)을 JavaScript 파일(.js)로 변환할 수 있다.
1-3. 타입 검사
컴파일러는 TypeScript 소스 코드에 기반하여 타입 검사를 수행한다.
이때, name 매개변수의 타입이 string인지 확인한다.
만약에 타입 오류가 발생하면, 컴파일러는 오류 메시지를 출력한다.
// Hello.ts (컴파일러가 생성한 중간 코드)
function sayHello(name) {
console.log(`Hello, ${name}!`);
}
sayHello("TypeScript");
1-4. ES6+ 문법 변환 (or 그 이하 문법)
TypeScript는 ES6 이상의 문법을 사용할 수 있지만,
모든 브라우저가 이를 지원하는 것은 아니다!
따라서, 컴파일러는 ES6+ 문법을 ES5 문법으로 변환하여 하위 브라우저에서도 실행될 수 있도록 한다.
// Hello.js (ES5로 변환된 코드)
function sayHello(name) {
console.log("Hello, " + name + "!");
}
sayHello("TypeScript");
1-5. 소스 맵 생성
컴파일러는 소스 맵(Source map)을 생성한다다.
이를 통해 디버깅 시 원본 코드에서 오류 발생 지점을 정확히 파악할 수 있다.
// Hello.js.map (소스 맵 파일)
{
"version": 3,
"file": "greeting.js",
"sourceRoot": "",
"sources": ["greeting.ts"],
"names": [],
"mappings": "AAAA,SAASA,EAAT,GAAG,MAAM,CAAC;AACf,CAAC",
"sourcesContent": [
"function sayHello(name: string) {\n console.log(`Hello, ${name}!`);\n}\n\nsayHello(\"TypeScript\");\n"
]
}
1-6. JavaScript 파일 생성
컴파일러는 변환된 JavaScript 파일을 생성한다.
이 파일은 브라우저나 Node.js 등에서 실행할 수 있다.
// Hello.js
function sayHello(name) {
console.log("Hello, " + name + "!");
}
sayHello("TypeScript");
1-7. 출력
이렇게 생성된 Hello.js 파일은 브라우저에서 실행할 수 있는 일반적인 JavaScript 파일이다.
이 파일을 브라우저에서 실행하면 콘솔에 "Hello, TypeScript!"이 출력된다.
2. AST(Abstract Syntax Tree)
뜬금없이 이게 무슨 주제지? 라는 생각을 할 수 있지만,
타입스크립트의 컴파일 과정에서 AST는 중요하다.
2-1. AST가 어디서 나와?
Ts는 Js와 달리 정적 타입 시스템을 가지고 있다.
이러한 타입 시스템을 구현하기 위해서는 type-checking이 필수적이다.
이 필수적인 단계를 거치기 위한 도구가 필요한데,
이때 구문 분석기라는 AST가 사용 되며, Ts 컴파일러는 소스코드를 분석하고 AST를 생성한다.
2-2. AST는 무슨 역할?
AST는 Ts의 변수, 함수, 클래스, 메서드 등에 대한 타입을 추론하고 검사하는 데에 사용된다.
이 친구로 인해 컴파일러는 타입을 자동으로 추론할 수 있게 되고,
이를 통해 우리는 더욱 안정적이고 견고한 코드를 작성할 수 있게 된다.
또한, 우리가 작성한 ES6+ 문법을 일반적인 Js코드로 변환 시켜주기도 한다.(호환성 문제 해결!)
2-3. 그래서 AST가 어디서 쓰여?
앞서 말했듯이, AST는 타입 검사단계에서 쓰인다.
1. 소스 코드의 분석과 AST 생성
Ts 컴파일러는 소스 코드를 분석하고, AST를 생성한다.
이때, Ts는 Ts 소스 코드를 Js로 변환하는 과정에서 타입 정보를 보존하기 때문에,
Js코드도 AST를 사용하여 분석한다.
2. 타입 검사
Ts 컴파일러는 생성된 AST를 사용하여 타입 검사를 수행한다.
이때, 컴파일러는 변수, 함수, 클래스, 메서드 등 각각의 요소에 대한 타입을 추론하고, 검사한다.
타입 검사를 통해 개발자는 코드의 안정성을 보장할 수 있다.
3. 코드 변환
Ts 컴파일러는 AST를 사용하여 ES6+ 문법을 일반적인 Js코드로 변환한다.
이때, Ts는 target 옵션에 따라 ES5, ES6 등의 다양한 버전의 Js로 변환할 수 있다.
4. 코드 생성
Ts 컴파일러는 변환된 코드를 생성한다.
이때, 소스 코드와 함께 생성된 소스 맵 파일을 사용하여 디버깅이 가능한 Js코드를 생성한다.
'쓰윽터디 > TypeScript' 카테고리의 다른 글
타입스크립트_제네릭 (0) | 2023.02.13 |
---|---|
타입스크립트_논리연산자활용 (0) | 2023.02.11 |
타입스크립트_열거형 (0) | 2023.02.09 |
타입스크립트_타입 가드 (0) | 2023.02.07 |
타입스크립트_인터페이스 (1) | 2023.02.06 |