한 입 크기로 잘라먹는 타입스크립트
Search

타입스크립트의 동작 원리

 
안녕하세요 이정환입니다 😃
이번 시간은 타입스크립트의 동작 원리에 대한 내용입니다.
 

대다수의 프로그래밍 언어는 어떻게 동작할까?

타입스크립트 동작 방식을 정확히 이해 하려면 대다수의 프로그래밍 언어들이 어떻게 동작 하는지 그 원리를 살펴볼 필요가 있습니다.
먼저 대부분의 프로그래밍 언어는 사실 컴퓨터보단 인간에게 더 친화적입니다. 컴퓨터는 인간과는 달리 바이트코드나 기계어, 이진수 같은 아주 단순한 형태의 언어를 기반으로 동작해요 따라서 영어의 문법과 비슷한 프로그래밍 언어를 컴퓨터가 바로 이해하고 실행할수는 없습니다.
그래서 컴퓨터는 우리가 작성한 코드를 실행하기 위해서 이 코드를 자기가 해석하기 쉬운 형태로 변환 하는 데요 이 과정을 우리는 변환한다 라고 해서 컴파일이라고 부릅니다.
그래서 우리가 프로그래밍 언어로 작성한 코드를 컴파일 하면 코드가 컴퓨터가 이해할 수 있는 기계어 같은 형태로 변환됩니다. 그럼 이제 컴퓨터가 이걸 읽어서 실행하고 결과적으로 코드가 실행되는거죠
notion image
 
그리고 이렇게 코드를 컴파일하는 녀석을 특별히 컴파일러 라고 부릅니다. 컴파일 하는 친구 라는 뜻이죠?
자바나 자바스크립트같은 언어를 컴파일하면 바이트 코드라는 형식으로 변환됩니다. 그래서 설명 편의상 앞으로 컴파일 결과 생성되는 컴퓨터가 이해할 수 있는 형태의 코드를 그냥 바이트코드라고 부르겠습니다
notion image
 
자 그런데 컴파일러는 어떤 과정을 거쳐 코드를 컴파일 하는 걸까요? 아 물론 우리는 컴파일에 대해 깊게 배우려고 하는건 아니니까 이 과정에 대해 아주 간단하게만 살펴볼게요
우선 컴파일러는 우리가 작성한 코드를 바로 바이트코드로 변환하는게 아니라 그 전에 AST(추상 문법 트리)라는 특별한 형태로 먼저 변환합니다. AST는 추상 문법 트리 라는 뜻인데요
notion image
 
다음 그림처럼 코드의 공백이나 주석 탭 등의 코드 실행에 관계없는 그런 요소들은 전부 제거하고 트리 형태의 자료구조에 코드를 쪼개서 저장 해 놓은 그런 형태를 말합니다.
notion image
왼쪽의 자바스크립트 코드를 AST 추상 문법 트리로 변환하면 오른쪽 처럼 바뀝니다. 물론 정확하게 이렇게 생겼다고 보기에는 조금 어렵구요 대충 이렇게 생겼다 라고 생각해주시면 됩니다.
 
이렇게 코드를 AST로 변환하고 나면 이제 마지막으로 컴파일러가 AST를 바이트코드로 변환하고 컴파일이 종료됩니다.
notion image
자 그래서 우리의 코드가 실행되는 과정을 정리하면 먼저 코드를 컴파일러가 AST로 변환하고 AST를 다시 바이트코드로 변환하고 이렇게 변환된 바이트코드를 컴퓨터가 실행하게 되는거죠

타입스크립트의 동작 과정

이번에는 타입스크립트는 어떤 과정을 거쳐 실행 되는지 살펴보도록 하겠습니다. 우선 타입스크립트도 다른 언어와 마찬가지로 실행 하려면 컴파일을 해야 하는 데요
우선 다른 언어들과 동일하게 먼저 타입스크립트 코드를 AST로 변환합니다. 여기까지는 똑같습니다.
notion image
 
그런데 그 다음 AST를 바이트코드로 변환하는게 아니라 이 AST를 보고 코드 상에 타입 오류가 없는지 검사하는타입 검사가 수행됩니다.
만약 이때 우리가 코드를 잘못 작성해서 코드에 타입 오류가 있었다면 타입 검사가 실패하고 컴파일이 중단됩니다.만약 타입 오류가 없는 정상적인 코드라면 타입 검사를 성공적으로 통과하고 그 다음에는 AST를 바이트코드가 아니라 ‘자바스크립트 코드’로 변환합니다. 그리고 컴파일이 종료됩니다.
notion image
타입스크립트의 컴파일은 이렇게 진행됩니다. 대부분의 언어를 컴파일 하면 바이트코드가 만들어지는 것과는 다르게 타입스크립트를 컴파일하면 자바스크립트 코드가 만들어집니다.
 
이렇게 타입스크립트의 컴파일 결과로 만들어진 자바스크립트 코드를 Node.js나 웹브라우저로 실행하면 앞서 살펴본 대다수의 언어들과 동일한 과정을 거쳐 컴파일 되어 실행됩니다.
여기서 중요하게 살펴봐야 할 부분은 타입스크립트 코드의 컴파일 과정에 타입 검사가 포함되어 있기 때문에 타입 스크립트 코드를 컴파일 해서 생성한 자바스크립트 코드는 타입 검사를 통과한 자바스크립트 코드라는 거죠 그러니깐 타입 오류가 발생할 가능성이 낮은 안전한 자바스크립트 코드라는 겁니다.
notion image
 
자 그래서 예를 들어서 다음 그림처럼 타입 오류가 발생하고 있는 타입스크립트 코드는 컴파일 시 타입 검사를 통과할 수 없기 때문에 자바스크립트 코드로 변환되지 않아 실행할 수 없게 됩니다.
notion image
 
반면에 다음 그림처럼 타입 오류가 없는 타입스크립트 코드는 컴파일 시 타입 검사를 통과해서 이렇게 타입 관련 문법들은 삭제된 안전한 자바스크립트 코드로 변경됩니다.
notion image
 
여기서 알 수 있는 또 다른 사실은 타입스크립트에 작성한 타입 관련 코드들은 결국 자바스크립트로 변환될 때 사라지게 되어 프로그램 실행에 영향을 미치지는 않는다는 점 입니다.
정리하자면 결국 타입스크립트는 컴파일 결과 타입 검사를 거쳐 자바스크립트 코드로 변환되는데 이때 만약 코드에 오류가 있다면 컴파일 도중 실패하게 되므로 자바스크립트를 보다 더 안전하게 사용하는 미리 한번 코드를 검사하는 용도로 사용된다고 볼 수 있습니다.
notion image
 
 
 
 
PREVJS의 단점과 TS의 장점
NEXTHello TS World