TypeScript의 탄생 배경
본래 JavaScript는 웹 브라우저에서 동작하며, 간단한 인터랙션이나 UI 조작을 위해 설계된 스크립트 언어였다. 이 때문에 엄격한 문법보다는, 개발자가 빠르게 개발할 수 있도록 유연함에 중점을 두고 만들어졌다.
하지만 이후 Node.js의 등장으로 JavaScript는 브라우저를 벗어나 백엔드 개발에까지 사용되기 시작했다. 단순한 스크립트 수준을 넘어, 대규모 애플리케이션 개발에 활용되면서 안정성과 유지보수성이 점점 중요해졌다.
이에 따라 정적 타입 시스템을 통해 코드의 안정성을 높이고, 대규모 프로젝트에서도 신뢰성 있게 동작하는 코드 작성을 돕기 위한 언어가 필요해졌고, 이를 해결하기 위해 TypeScript를 탄생하게 된 것이다.
TypeScript란
타입을 더 안전하게 사용할 수 있는 기능들이 추가된 javascript의 확장판이라고 볼 수 있다.
일단 간단한 코드로 typescript가 무엇인지 알아보자.
// javascript
let a = 1;
// typescript
let a:number = 1;
js에서는 변수를 선언할 때 변수의 타입까지 지정하지 않는다.
반면 ts에서는 ":number"와 같이 변수의 타입을 정의할 수 있다. 이제 앞으로 a라는 변수에는 숫자 타입의 값만 들어올 수 있다.
Type System
타입 시스템은 크게 동적 타입 시스템과 정적 타입 시스템으로 나눌 수 있다.
동적 타입 시스템은 코드를 실행한 후 유동적으로 변수의 타입을 결정하는 시스템이다. (JavaScript, Python)

위처럼 코드가 실행된 후, 즉 런타임에 에러가 발생하게 된다. 실제로 서비스를 하는 서버에서 이러한 문제가 발생하게 된다면 매우 치명적일 것이다.
정적 타입 시스템은 코드를 실행하기 이전에 모든 변수의 타입을 고정적으로 결정하는 시스템이다.(C, Java)

위처럼 코드를 실행하기 전 타입 오류를 보여준다. 그렇다면 정적 타입 시스템이 무조건적으로 좋을까? 물론 안정성이 보장된다는 측면에서는 좋다. 하지만 기존 Javascript 코드에 위처럼 모든 타입을 정의하게 된다면 유연함의 이점을 포기하는 것이기 때문에 "굳이?" 라는 생각이 들 수도 있다.
점진적 타입 시스템
이를 보완하기 위해 TypeScript는 동적 타입 시스템과 정적 시스템을 혼합한 독특한 타입 시스템을 사용한다.
- 변수의 타입을 코드 실행 전에 결정하고 타입 오류가 없는지 프로그램 실행 전에 코드를 검사한다.
- 변수에 담기는 초기값을 기준으로 자동으로 타입을 추론해준다.
TypeScript로 개발할 때마다 항상 "타입 추론이 가능한 곳에 굳이 타입을 명시해야 할까?"에 대한 논쟁이 끊이지 않았다. 그런데 TypeScript의 탄생 배경을 알고 나니, 기존 JavaScript의 유연함을 가장 큰 장점으로 본다면, 타입을 굳이 명시하지 않는 쪽으로 내 생각이 기울게 되는 것 같다.
출처: 한 입 크기로 잘라먹는 타입스크립트(TypeScript) - 이정환 Winterlood