
들어가기에 앞서..
본격적으로 타입스크립트를 공부하기 전에 타입스크립트란 무엇이며, 어떤 이유때문에 탄생하게 되었는지에 대해 알고 공부하는 것이 중요하다고 생각하여 가장 먼저 정리해보고자 한다.
타입스크립트의 탄생
타입스크립트(TypeScript)는 마이크로소프트의 개발자이자 C#의 창시자인 앤더스 하일스버그(Anders Hejlsberg)와 그의 팀원들이 2012년 처음 발표하였다. \n 그 때문인지 타입스크립트는 C#과 비슷한 점이 꽤나 많고, 오픈소스로 공개되어 있어 현재도 많은 프로그래머들이 지속적으로 언어의 개발과 유지보수에 참여하고 있어 발전 가능성이 계속해서 열려있는 언어이다.
자바스크립트의 한계를 극복해주는 강력한 도구
타입스크립트는 자바스크립트와 완전 다른 언어가 아니라 기존의 자바스크립트를 더 안전하게 사용할 수 있도록 타입과 관련된 여러가지 강력한 기능들을 추가한 언어로 개발자가 보다 안전하고 효율적으로 코드를 작성할 수 있게 자바스크립트의 한계를 보완해주고 확장시켜주는 자바스크립트의 상위 집합이다.

아래 사진을 보면 동일한 기능의 자바스크립트와 타입스크립트 코드가 있다. 한 눈에 봐도 비슷하지만 두 코드의 가장 큰 차이점은 변수를 선언할 때 나온다.

자바스크립트는 변수를 선언할 때, 변수의 타입을 지정하지 않는데 이는 자바스크립트에는 개발자가 직접 정의할 수 있는 방법이 없기 때문이다.
반면 타입스크립트 코드에서는 변수의 이름 뒤에 변수의 타입을 정의할 수 있어 사진처럼 number로 타입을 정의하면 해당 변수는 숫자값 이외에는 넣을 수 없다.
타입스크립트는 왜 필요한가?
타입스크립트가 자바스크립트에 타입 기능이 추가된 확장판의 느낌이라는 것은 알겠는데, 굳이 새로운 것을 배워가면서까지 타입스크립트를 써야만 하는 이유는 무엇일까?
가장 핵심이 되는 이유는 바로 자바스크립트의 인기와 사용성이 증가하였기 떄문이다. 이게 무슨 얘기인가하면, 자바스크립트라는 언어는 사실 웹 브라우저에서만 동작하는 아주 간단한 상호작용을 처리하기 위해 만들어진 언어였다. 쉽게 말하면 웹 사이트에서 버튼을 누르면 얼럿을 띄워주는 정도의 상호작용을 구현하는 정도의 필요성을 가진 언어였다는 것.
때문에 자바스크립트는 다른 언어들처럼 엄격한 문법이나 제약을 갖출 필요가 없었고, 버그로 인한 안전성 등을 포기하는 대신 아주 유연하게 설계되어 개발자들이 쉽고 빠르게 코드를 만들 수 있었다. 어차피 웹에서만 동작하고 간단한 작동만 하는 프로그램을 만들거니까 큰 상관이 없었다.

그런데 자바스크립트의 입지는 Node.js가 등장하면서 완전히 달라지게 된다. Node.js라는 자바스크립트 구동기가 탄생하면서 자바스크립트는 웹 브라우저뿐만이 아니라 어디서든 실행할 수 있게 되었고, 이 말인 즉슨 웹 서버는 물론이고 인스타그램이나 카카오톡 같은 모바일 앱, 데스크탑 앱 등 모든 프로그램을 자바스크립트로 만들 수 있게 된 것이다.
이 덕분에 자바스크립트는 각종 대규모 프로젝트에 사용되기 시작했다. 하지만 이 과정에서 문제가 발생했는데, 바로 복잡하고 대규모의 프로그램을 자바스크립트로 개발하다보니 원래의 장점이였던 유연성이 문제가 되었다. 자바스크립트로 만드는 프로그램의 안정성이 떨어져 사용성이 떨어져버린 것이다.
그래서 이러한 자바스크립트의 문제를 보완하기 위해 자바스크립트의 기존 문법들과 장점은 그대로 유지한 채로 부족했던 안정성을 채워줄 새로운 언어가 필요해졌다. 이러한 상황속에서 탄생한 것이 바로 자바스크립트를 더욱 안전하게 사용할 수 있도록 타입과 관련된 다양한 기능을 추가한 언어인 타입스크립트다.
타입스크립트의 장점
위에서 타입스크립트는 기존 자바스크립트의 한계를 극복해주고, 안정성과 개선된 개발환경을 제공한다고 정리했다. 그렇다면 타입스크립트가 구체적으로 어떤 장점이 있는지 정리해보고자 한다.
-
컴파일 타임 오류 검사
자바스크립트로 개발을 하면 오류가 발생할 코드여도 일단 실행이 되는데 간단한 프로그램과 달리 아주 복잡한 프로그램을 만들 땐 오류가 실행 즉시 발생하지 않고 나중에 갑자기 발생하기도 해서 개발자들이 오류의 원인을 찾기 어렵고 예상치 못한 버그로 서비스가 마비되는 최악의 상황도 발생할 수 있다.
하지만 타입스크립트는 코드를 실행하기 전에 타입 검사를 하여 미리 오류를 잡을 수 있다. 예를들어, 변수에 잘못된 타입이 할당되거나, 함수의 인자에 잘못된 값을 전달하면 컴파일 시점에서 즉시 오류를 알려주기 때문에 런타임 오류를 사전에 예방할 수 있다.
-
코드 가독성의 향상
타입스크립트는 타입을 명시함으로써 코드의 의도를 명확히 표현할 수 있다. 예를 들어, 함수의 매개변수나 반환값의 타입을 정의하면 해당 함수가 어떤 데이터를 다루는지 쉽게 파악할 수 있기 때문에 다른 개발좌와 협업할 때 코드 가독성을 크게 개선해준다.
-
강력한 커뮤니티와 생태계
타입스크립트는 자바스크립트의 상위 집합이기 때문에, 자바스크립트로 작성된 라이브러리와 도구를 모두 사용할 수 있고 현재 대다수가 사용하는 프레임워크(React, Vue, Angular)에서도 공식적으로 타입스크립트를 지원하기 때문에 범용성이 상당히 높다.
-
점진적 타입 시스템
모든 프로그래밍 언어에는 타입 시스템이 있고, 이 타입 시스템은 변수의 타입을 언제 결정하느냐에 따라서 동적 타입 시스템(실행 중)과 정적 타입 시스템(실행 전)으로 나뉜다.
하지만 타입스크립트는 독특하게도 정적 타입 시스템처럼 프로그램 실행 전에 타입 검사를 하여 타입 안정성을 확보함과 동시에 동적 타입 시스템처럼 모든 변수에 일일이 타입을 지정해주지 않아도 되는 유연함까지 확보한 점진적 타입 시스템을 사용한다.
또한, 타입스크립트는 기존 자바스크립트 프로젝트에 점차적으로 타입스크립트를 적용할 수 있어 기존 코드에 영향을 최소화하면서도 타입스크립트의 장점을 점진적으로 활용할 수 있다.
