타입스크립트

내위키
인쇄용 판은 더 이상 지원되지 않으며 렌더링 오류가 있을 수 있습니다. 브라우저 북마크를 업데이트해 주시고 기본 브라우저 인쇄 기능을 대신 사용해 주십시오.

TypeScript.

마이크로소프트가 개발하고 배포, 관리하는 프로그래밍 언어. 오픈 소스이고 무료다. 2012년 10월에 처음으로 공개되었다. 자바스크립트와 호환되며, 자바스크립트가 가진 단점들을 보완하기 위해서 만들었다. 이런 종류의 언어로는 커피스크립트와 같은 것들이 있지만 지금은 타입스크립트가 가장 잘 나가는 분위기. 아네르스 하일스베르가 설계했는데 이 분은 C#은 물론 델파이, 터보 파스칼[1]과 같은 걸작을 여럿 설계한 경력이 있다. 아직까지는 웹 브라우저에서 직접 타입스크립트를 지원하고 있지 않기 때문에 컴파일 및 링크 과정을 거쳐서 자바스크립트로 변환되어 쓰인다. 물론 앞으로 타입스크립트의 사용이 많아지면 웹 브라우저들이 직접 지원할 수도 있겠지만. 자바스크립트를 쓸 수 있는 곳이라면 어디든지 타입스크립트도 쓸 수 있다. 예를 들어 Node.js[2]나 아파치 코르도바, 리액트 네이티브 같은 데에서도 얼마든지 쓸 수 있다. 구글의 웹 프레임워크인 AngularJS는 아예 버전 2부터는 타입스크립트만 지원한다. 이들도 모두 마지막에 자바스크립트로 컴파일하는 작업은 필요하다.

자바스크립트는 그 문법이 간단하기 때문이 진입장벽이 낮은 프로그램이지만 고급 기능을 구현할 때에는 오히려 난점이 많다. 예를 들어 변수에 아무 타입이나 넣어도 되는 특징은 초보자들에는 쉬워 보이지만 그 변수에 넣지 말아야 할 잘못된 타입을 집어넣어도 오류가 생기지 않기 때문에[3] 버그도 많아지고 디버깅도 힘들어진다.[4] 페이지의 사용자 인터페이스를 구성하는 각 요소들을 모듈화 하고 별개의 파일로 쪼개넣게 되면 문제는 더욱 심각해진다. 함수나 클래스 정의와 같은 많은 부분들이 객체지향 언어와는 상당히 다르기 때문에 이 역시 사용을 까다롭게 하고 버그를 낳는 원인이 된다. 자바스크립트콜백 함수를 많이 쓰기 때문에 함수 매개변수로 또다른 함수가 들어가고, 이 함수의 매개변수로도 또 다른 함수가 들어가고... 하는 일이 잦은데 이러다 보면 소스 코드를 봐도 도대체 뭘 하는 건지 알아먹기 힘든, 이른바 '콜백 지옥'에 종종 빠지곤 한다. 이러한 단점을 극복하고 변수에 타입을 부여하여 컴파일 과정에서 타입 체크를 할 수 있게 하거나[5], 클래스 정의를 좀 더 객체지향형 프로그래밍 언어처럼 하거나 콜백 함수 사용도 좀 더 가독성을 높이고 해서 자바스크립트의 단점을 보완하고 개발자가 좀 더 편리하게 프로그래밍을 할 수 있도록 돕는 것이 타입스크립트의 목적이다. 즉 성능보다는 짜기 쉽고 알아보기 쉬운 코드를 작성함으로써 생산성을 높이는 것을 목적으로 한다고 볼 수 있다. 그밖에 제너릭, 네임스페이스와 같이 C#과 같은 현대 프로그래밍 언어에서 널리 쓰이는 개념들도 가져 왔다.

타입스크립트가 잘 나가게 된 계기는 아이러니하게도 구글. 자사에서 개발하는 웹 프론트엔드 프레임워크Angular가 2.0부터 타입스크립트를 사용한 것이 큰 계기가 되었다.[6] 사실 구글도 다트(Dart)라는 자바스크립트의 대체제를 밀었지만 거의 망하는 분위기로 가고 있는데[7], 대신 요즘은 Angular에서 보는 것과 같이 타입스크립트를 미는 분위기다.

각주

  1. 그래서인지는 몰라도 변수의 타입 정의가 파스칼처럼 변수 이름 뒤에 나온다.
  2. 타입스크립트를 쓰려면 먼저 Node.js를 설치하고 패키지 관리자인 npm으로 설치하는 게 좋다. 아니면 비주얼 스튜디오를 설치해서 쓰는 방법도 있다. 비주얼 스튜디오마이크로소프트 것이니 지원을 안 할 리가...
  3. 서로 다른 유형의 변수끼리 연산을 시켜도 어떻게든 뭔가 결괏값을 만들어 내기 때문에 이게 오히려 예측불허의 결과를 만들어낸다.
  4. 파이썬 역시 변수의 타입을 지정할 수 없기 때문에 같은 문제를 안고 있다. 3.5 버전부터는 타입 힌트 기능을 지원해서 프로그래머가 함수의 매개변수나 반환값으로 기대하는 변수의 유형을 지정할 수 있지만 이는 '힌트'에 불과하며 유형에 안 맞는 매개변수를 줄 때 코드가 아예 실행이 안 되거나 하지는 않는다.
  5. 이름에 '타입'이 들어가 있을 정도로 이 점을 강조한다.
  6. 최근에는 구글MS에서 내놓은 솔루션을 적극 활용하는 모습들이 자주 보인다. 크로스플랫폼 프레임워크Flutter의 개발 도구로 안드로이드 스튜디오와 함께 비주얼 스튜디오 코드를 공식 지원한다든가.
  7. 대신 구글은 모바일 크로스 플랫폼 프레임워크Flutter의 개발 언어로 Dart를 밀고 있으며 덕분에 나름 화려하게 부활하는 모양새다.