개발/TypeScript

TypeScript, 왜 써야되나?? (feat. 장단점)

IMRaccoon 2020. 1. 20. 22:34

JavaScript가 es6로 바뀌면서 큰 인기를 끌기 시작했습니다.

 

또한, Node.js로 할 수 있는 것들이 점점 많아졌으며, 지금도 많아지고 있습니다.

 

처음에는 웹에서 사용하기 위한 스크립트 언어로 활용되다가 점점 백엔드 언어로서 Node.js가 자리를 잡기 시작했고,

 

Angular.js, Vue.js, React.js 처럼 JS 기반 웹 프레임워크가 생기기도 하고,

 

jsx를 활용하여 JS 기반 프레임워크인 React로 앱까지도 만들 수 있게 되면서

 

점점 JavaScript를 사용하는 프로젝트가 늘어나기 시작했습니다.

 

 

그래서 만들어진 TypeScript

 

JavaScript 의 장점은 일반적인 C, Java처럼 자료형이 존재하지 않는 개념입니다.

 

물론, 어느정도 잡히기는 하지만 프로젝트 단위에서는 추적이 안됩니다.

 

JavaScript 의 강력한 장점이자 단점은 개인적으로 동적이라는 것이라고 생각합니다.

 

추적이 안되는 객체들이 너무나도 많기 때문에 속성의 변경이 너무나도 쉬우면서,

 

반대로 변경이 너무나도 쉬워 잘못됬다는 것을 실행 중에 알게 됩니다.

 

백엔드에서 활용되는 JS가 (물론 테스트를 다하겠지만!) 실행 중에 문제를 안다?

 

이게 실제로 어떤 서비스를 운영할 때에 테스트할 때 발견되지 않았던 버그가 생길 수 있다는 뜻입니다.

 

이러한 문제들을 다양한 방법으로 충분히 해결할 수 있지만 (많은 테스트, 또는 디자인 패턴으로 방지)

 

그럼에도 문제가 존재함은 부정할 수 없습니다.

 

이 때, 혜성같이 떠오른 TypeScript가 해결책을 주었습니다.

 

TypeScript는 기본적으로 변수에 타입을 지정해주면서, 코드를 추적해줍니다.

// JavaScript
let a;

a = 1;
a = true;
// TypeScript
let a: number;  // 빨간줄

a = 1;
a = true;       // 빨간줄

이런 식으로 타입을 고정시켜주는 역할을 합니다.

 

그럼 TypeScript의 장단점을 한 번 보도록 하겠습니다.

 

 


TypeScript, 이건 되게 좋아요!

 

MicroSoft 에서 만들었습니다.

  • 사실 이러면 안되지만,,, 신뢰도가 많이 오르지 않나요? 나만 그렇진 않을텐데?
  • 또 다른 장점으로는 open source 화 되어있다는 것입니다. (이게 진짜 장점)
  • MicroSoft에서 vscode를 만들 때에, TypeScript로 만들었습니다.
  • 이로써, 어느정도 신뢰성과 실용성이 보장되었다고 (개인적인 주관으로) 판단됩니다.

 

JavaScript의 상위 집합입니다.

  • TypeScript는 금일 기준(2020.01.20) 3.7.5 버전까지 올랐습니다.
  • 버전이나 소스코드는 여기에서 확인 가능합니다.
  • ECMAScript의 가장 최신 업데이트를 빠르게 반영합니다.
  • 따라서 새로운 기능들을 효율적으로 사용하는 것이 가능합니다.
 

microsoft/TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output. - microsoft/TypeScript

github.com

 

 

튜토리얼이 매우 잘 되어 있습니다.

  • TypeScript에는 Handbook 문서로 튜토리얼이 정리되어 있습니다.
  • JavaScript를 사용할 줄 모르고, TypeScript를 처음 접해본다고 하더라도 충분히 할 수 있을 정도로
  • 한글화도 잘 되어 있으며, 기본기부터 수준있는 스킬들까지 잘 정리되어 있기 때문에
  • 초기에도, 나중에도 자주 보게 되는 페이지 입니다.
 

TypeScript 한글 문서

TypeScript 한글 번역 문서입니다

typescript-kr.github.io

 

쉽습니다.

  • 요즘은 JavaScript를 사용하는 사람들이 늘어나는 추세입니다.
  • TypeScript는 JavaScript의 상위 집합이므로, JavaScript를 사용할 줄 안다면? TypeScript도 금방 익힐 수 있습니다.
  • 게다가 JavaScript를 사용하여 대형 프로젝트를 진행할 때 보이는 약점들이 어느정도 해결되기 때문에 
  • 쉽게 느껴질 수도 있습니다.

 

모든 코드에 대한 타입을 지정하지 않아도 유추를 통한 타입 제어가 가능합니다.

  • 사실 장점이라고 하기에는 좀 부적합 할 수 있지만, JavaScript의 약점을 보완한다는 측면에서는 적절합니다.
  • 기본적으로 많은 언어들이 타입(자료형, 클래스 등등)에 대한 것들을 지정하는 데, TypeScript는 JavaScript에서 탄생했습니다.
  • 새로 생긴 언어가 아닌 기존의 언어를 개선한 것이다보니, 깊이가 깊어지면 타입 추론이 안되기도 합니다. ?? 단점...?
  • 하지만, 의외로 잘 잡아주기 때문에 사용하는 데에 있어 문제가 잘 생기지는 않습니다.
  • 따라서, 타입에 대한 에러를 미리 방지해 줄 수 있는 것입니다.

 

JavaScript와 동일하게 브라우저의 엔진을 지원합니다.

  • TypeScript를 컴파일 하여 ECMAScript의 낮은 버전으로 컴파일이 가능합니다.
  • Node.js 뿐만 아니라, Pure JS, 그러니까 순수하게 웹에서 사용하는 스크립트형 JavaScript로도 변환해 줄 수 있습니다.

 

여러가지 패러다임을 활용할 수 있습니다.

  • 절차지향
  • 객체지향
  • 함수형

 

개발 커뮤니티가 활성화 되어 있습니다.

  • 각국의 다양한 개발자들이 많으면 많을수록
  • 질문의 수준이 점점 올라가고 다양한 케이스의 질문들도 생깁니다.
  • 한글로 검색해도 많이 나오지만, 영어로 검색할 경우 더 많고 다양한 케이스를 찾을 수 있습니다. (검색은 개인의 능력)

 

 


 

TypeScript, 예찬론이 아닙니다.

 

분명히 단점은 존재합니다.

 

실제로 제가 사용하면서 느낀 단점도 있고, 널리 알려져 있는 단점도 존재합니다.

 

 

초반 세팅이 불편하다

  • TypeScript는 독자적인 언어가 아니기 때문에, 기존에 존재하는 자바스크립트 엔진에서 실행됩니다.
  • 이를 위해 기본적으로 설치해야 하는 모듈들이 있으며, 컴파일을 하기 위한 옵션들도 설정해야 합니다.
  • 모듈들을 사용할 때에도, 프레임워크를 사용할 때에도 초기 설정이 까다로운 편입니다.

 

타입때문에 귀찮기도 합니다.

  • 자동으로 타입이 지정되기도 하지만, 필요한 부분은 넣어주기도 합니다.
  • 이로 인해, 생산성이 낮아지며 TypeError로 인한 빨간 줄을 많이 보기도 합니다.

 

interface나 class 등의 이름 때문에 오류가 생길 때도 있습니다.

  • 같은 내용을 담고 있다고 하더라도 이름이 다른 경우 문제가 생길 수 있습니다.
  • 또한 다른 내용이나 목적이 비슷하여 이름을 짓는 경우 문제가 생길 수 있습니다.
  • JavaScript에서는 따로 해주지 않아도 되는 것들에 대한 이름이 문제를 야기할 수 있습니다.

 

가독성이 상대적으로 떨어집니다

  • 같은 코드를 입력한다고 하더라도, JavaScript와 TypeScript의 가독성은 현저히 차이가 납니다.
  • 코드의 길이가 어쩔 수 없이 길어지게 되며
  • 선언되는 타입들에 대한 이름을 만들어주면서 목적성을 잃기도 합니다.

 

결국, TypeScript는 JavaScript에서 생기는 오류를 피할 수는 없습니다.

  • 많은 노력을 기울여 TypeError를 해결했음에도, 
  • JavaScript의 고질적인 에러는 계속 발생할 수 있다는 뜻입니다.

 


 

정리하며

 

TypeScript, 점점 인기가 많아지고 있는 언어입니다.

 

그리고 점점 다양한 라이브러리, 모듈, 그리고 프레임워크가 지원을 하고 있습니다.

 

하지만 굳이 배울 필요는 없습니다. JavaScript의 시장이 훨씬 더 크며, 안정적입니다.

 

TypeScript가 JavaScript의 단점을 충분히 해결해주었지만, 그 해결된 단점이 또다른 단점이 되어 돌아왔습니다.

 

하지만, 지금까지 Java, C 처럼 타입이 정해진 언어를 배운 뒤에, JavaScript를 배우기에는 어색할 수 있습니다.

 

이 때에, TypeScript를 익히는 것은 도움이 될 것이라고

개인적으로

생각합니다.

 

TypeScript를 배운 사람이 JavaScript를 못 쓸수는 없기 때문입니다.

 

물론,,, 다시 돌아가게 됩니다.

 

이 글이, TypeScript라는 언어의 도입 결정에 도움이 될 수 있기를 바랍니다~