본문 바로가기

TIL

TS. 타입스크립트 시작전에

그 유명한 이펙티브 시리즈의 타입스크립트를 보려고 한다. 예전에 자바 공부를 할 때 자바 하면 이펙티브 자바라고 들었어서 이 책도 같은 이펙티브 시리즈여서 신나서 산거 같다. 아무튼 새 친구를 만났으니 시간 좀 보내야겠다. 사실 이 책이 완전 개념 책은 아닌 걸로 알아서 개념적인 부분은 따로 좀 보면서 재밌었던 파트 있으면 정리하는 식으로 해야겠다.

일단 타입스크립트는 이름처럼 타입을 사용하는 자바스크립트다. 찾아보면 자바스크립트의 슈퍼셋 언어라고 나오는데 왜 써야 하는지 알아보자. 몇 가지가 있는데 간단히 얘기하면 에러를 방지하고 생산성을 향상시킨 다고 한다.  에러를 방지하는 건 자바스크립트의 경우 일단 결과를 콘솔에 찍어봐야 에러를 발견하는 경우가 많아서 타입 스크립트를 쓰면 작성 과정에서 바로 찾을 수 있다.

그럼 아이템 1 타입스크립트와 자바스크립트의 관계 이해하기를 보자

그렇다 타입스크립트는 자바스크립트의 상위 집합이다. 자바스크립트 프로그램에 문법 오류가 없다면 타입 스크립트 프로그램이라고 봐도 좋다. 그래서 모든 자바스크립트 프로그램이 타입 스크립트라는 명제는 참이지만 그 반대는 성립하지 않는다. 타입 스크립트의 타입 체커는 타입 체크뿐만 아니라 밑의 코드 같은 경우도 잡아준다.

타입 시스템의 목표 중 하나는 런타임에 오류를 발생시킬 코드를 미리 찾아내는 것이다. 하지만 타입 체커가 모든 오류를 찾아내지는 않는다. 다음 예시를 보자


책에서 이야기하는 바는 타입스크립트는 분명 추측해서 오류를 잡아준다. 하지만 정확히 어떤 게 맞는지 판단한 지 못한다.(근데 당연한 거 아닌가? 아무튼) 그래서 개발자가 직접 의도를 분명하게 해줘야 한다고 한다. 

이 내용을 정리하면 새로운 영역을 표현할 수 있는데 타입스크립트의 집합 안에는 타입 체커를 통과한 자바스크립트라는 집합을 만들 수 있다. 그리고 일반적으로 작성하는 코드가 이 부분일 것이다.

타입스크립트 타입 시스템은 자바스크립트의 런타임 동작을 '모델링' 한다.  자바스크립트의 런타임 동작을 모델링하는 것은 타입스크립트 타입 시스템의 기본 원칙이다. 그리고 모델링하는 것뿐만 아니라 오류로 이어질 수 있는 코드도 타입 체커가 잡아낸다. 

프로그램이 타입 체크를 통과해도 여전히 런타임에 오류가 발생하는 경우가 있다.  다음 코드를 보자

이 코드는 당연히 에러가 난다. 하지만 이런 에러는 잡아내지 못했다. 이와 같은 오류들이 발생하는 근본 원인은 타입스크립트가 이해하는 값의 타입과 실제 값에 차이가 있기 때문이다. 타입 시스템이 정적 타입의 정확성을 보장해 줄 것 같지만 그렇지 않고 애초에 타입 시스템은 그런 목적으로 만들어지지도 않았다.  그니까 정확성을 보장하는 것이 중요하다면 다른 언어를 사용하는 것이 좋다.

 

타입스크립트 공부하기 전에 간단하게 첫 장을 살펴봤다. 나머지 장들은 공부를 하면서 필요한 부분을 찾아가면서 볼 계획이다.  이번장을 좀 정리해보면 타입스크립트를 쓴다는 건 확실히 일반 자바스크립트보다 코드 작성하면서 에러 잡기에 좋다. 근데 위에서 말한 예시처럼 모든 에러를 잡을 수는 없다. 근데 생각해보면 위의 에러들은 정적 타이핑 언어에서도 일단 컴파일 돌리고 난 다음에 에러가 뜬다. c나 c++ 같았어도 코드상에서는 못 잡고 실행하면 세그먼트 폴트 떴을 거 같다. 물론 걔네는 할당한 메모리를 넘어간 거여서 좀 다르긴 하지만. 아무튼 내 생각으로는 이 정도 잡아주는 건 정말 잘 잡아주는 것 같다. 그러니 잘 써봐야지

 

참고 및 출처: <이펙티브 타입스크립트> (댄 밴더캄 지음, 장원호 옮김, 인사이트 ,2021)

'TIL' 카테고리의 다른 글

PS. FenwickTree 그전에 SegmentTree  (0) 2022.01.25
TS. Type alias과 interface차이  (0) 2022.01.20
DOM. 관련 개념 정리  (0) 2022.01.19
JS. this  (0) 2022.01.19
JS. Closure  (0) 2022.01.17