들어가며
- 최근 했던 프로젝트는 타입스크립트로 작성했지만 내가 잘 정의하고 있는지 감이 안왔다. 일부분에서는 any로 대처하며 타입스크립트를 제대로 아는게 맞을까 개인적으로 안 와닿았다. 더 나은 타입스크립트 작성을 위해 타입스크립트 강의를 결제해 처음부터 끝까지 완강하게 됐다.
- 강의 하나하나 노션에 정리하였는데, 혼자만 정리하기보다 역시 블로그에 다시 정리를 한번 더 해보며 설명하는 느낌으로 하면 장기기억으로 갈 수 있겠다 싶어 차근차근 정리해보려 한다.
- 최근 읽은 도서인 거인의 노트라는 책에는 내 것으로 만드는 '자기화'를 강조한다. 남들과 같이 강의를 봤지만 한 번 대충 정리하고 마는 게 아닌, 내 방식대로 정리를 하는 게 중요하다는 점이다.
- 그런 의미에서 왜 써야할지부터 타입스크립트를 차근차근 정리해보려한다.
타입스크립트, 왜 써야할까?
- 원래 자바스크립트는 간단한 웹 동작을 수행하려고 만들었다. 그래서 버그에는 조금 취약할지라도 자유롭게 사용할 수 있게 만들었다.
- 그런데, NodeJS 라는 자바스크립트 구동하는 친구가 나오면서 조금 바뀌었다.
웹 하나에서 쓰이던 자바스크립트를 어디서든 쓸 수 있게 만든 친구인데, 그러다보니 자바스크립트로 웹 서버도 만들고, 모바일 앱도 만들고, 데스크탑 앱도 만들 수 있게 됐다.
- 이렇게 확장성이 커지게 되니까, 문제가 발생한거지. 뭐냐? 자바스크립트가 너무 자유로워서 문제다! 버그 발생 가능성이 높아버리니까 안정성이 떨어지는거지.
- 그래서 우리가 잘 쓰는 자바스크립트의 안정성을 더 높여주기 위해서, 타입스크립트가 나오게 됐다 이말이다~
더 복잡하고, 더 대규모의 프로그램을 자바스크립트로 만들기 위해, 그걸 안정적으로 사용하기 위해 타입이라는 안전장치를 추가한, 자바스크립트의 확장판이라는 것~
자바스크립트에는 어떤 한계가 있고 왜 있을까
- 모든 프로그램은 타입 시스템(언어의 타입 관련된 문법 체계)이 있다.
- 정적 타입 시스템, 동적 타입 시스템

정적 타입 시스템은 처음부터 미리 타입을 설정하기 때문에, 실행전에 오류가 있으면 잡아준다는 장점이 있지만, 모든 변수같은 것들에 타입을 설정해야한다는 번거로움이 있다.
동적 타입 시스템은 그런거 없이 실행하고 타입을 결정하기 때문에 번거로움은 덜 하지만, 만약 개복잡한 프로그램을 작성하였다가 오류가 있다면, 막 2일 뒤에 오류가 갑자기 발생할 수 도 있는 위험성이 있다.
타입스크립트는 독특한 타입시스템을 갖고 있다.
정적 타입 시스템처럼 실행전에 미리 타입에 대한 오류를 알려주지만, 그렇다고 모든 변수에 타입을 일일이 지정할 필요도 없다 ~! 이걸 점진적 타입 시스템이라고 부른다 (Gradual Type System)

타입스크립트의 동작 원리
- 타입스크립트는 AST, 그리고 타입 검사 과정을 거쳐 타입 검사가 성공하면 자바스크립트 언어로 변환하고 변환된 자바스크립트 코드는 대부분의 프로그래밍 언어 동작 방법 처럼 AST , 그리고 바이트 코드로 컴퓨터에게 전달한다. 코드에 오류가 있어 타입 검사가 실패하면 컴파일은 종료된다.
대다수의 프로그래밍 언어 동작 방법
컴파일이란? 컴퓨터가 이해하기 쉬운 형태로 프로그래밍언어를 변환해주는거다
컴파일러란? 컴파일을 하는 친구다. 어떤식으로 처리할까? 우리의 자바스크립트 코드가 AST라는 추상 문법 트리로 바꾸고, 그걸 다시 바이트 코드로 변환해서 컴퓨터에게 전달한다.
타입스크립트의 과정
타입스크립트를 AST로 바꾸는건 똑같은데, 그다음 타입 검사를 한다.
타입 검사가 실패하면 컴파일 종료하고, 검사 성공하면 자바스크립트로 변환한다.
