TypeScript를 알기 전에 JavaScript를 먼저 짚고 넘어가보자!
- JavaScript는 1995년 넷스케이프사의 브렌던 아이크(Brendan Eich)가 개발한 스크립트 언어이다.
- 서둘러 출시된 언어인데다가 과거 웹페이지의 보조적인 기능을 수행하기 위해 한정적인 용도로 만들어진 태생적인 한계를 가지고 있다.
하지만 한낮 보조 기능을 수행하는데 불과했던
JavaScript의 위상은 달라지기 시작하는데..🚀
- HTML5의 등장 (2014.10.28)
- 기존의 웹 애플리케이션은 플러그인에 의존하여 구축되었다면,
HTML5 등장으로 JavaScript가 그 자리를 대신하게 되었다.
- AJAX의 활성화
- AJAX(Asynchronous JavaScript and XML)는 JavaScript를 이용해 비동기식으로 XML을 이용해 서버와 통신하는 방식
- 서버 측이 담당하던 많은 일들이 클라이언트측으로 이동하게 되었다.
JavaScript는 C, JAVA와 구별되는 특성이 있는데 다음과 같다.
- 프로토타입 기반 프로그래밍(Prototype-based Object Oriented Language)
- Scope와 this
- 동적 타입(dynamic typed) 언어 혹은 느슨한 타입(loosely typed) 언어
이러한 특징은 클래스 기반 객체지향 언어(Java, C++, C# 등)에 익숙한 개발자를 혼란스럽게 했다. 이러한 문제를 극복하고자 자바스크립트 대체 언어가 등장하기 시작했다. 그 예로, CoffeScript, Dart, Haxe 등이 있겠다.
아무튼 타입스크립트 역시 자바스크립트의 문제를 극복하고자 등장한
자바스크립트 대체 언어이다.
정적타입과 동적타입은 아래에서 조금 더 자세하게 다뤄보겠다.
💁🏻♀️ ECMAScript
- JavaScript의 기반이 되는 스크립팅 언어 명세
- ES6 (ECMAScript 2015)의 클래스, 모듈 등과 ES7의 Decorator 등을 지원한다.
- ES6의 새로운 기능을 사용하기 위해 Babel과 같은 트랜스파일러(Transpiler)를 사용하지 않아도 실행할 수 있다.
출처: Google Trends, 검색어 TypeScript
TypeScript를 사용하는 가장 큰 이유 중 하나는 정적 타입을 지원한다는 것이다.
💁🏻♀️ 동적 타입이란? (Dynamic)
- 컴파일 시 자료형을 정하지 않고, 코드를 실행할 때 결정한다.
- 예시
let num = 1; // 숫자 num = "number 1"; // 문자
💁🏻♀️ 정적 타입이란? (Static)
- 컴파일 시 변수의 타입이 결정되는 언어
- 변수 생성 시 타입을 같이 명시해주는 것
- 예시
- num 변수가 int로 타입 선언된다.
Int num = 1;
아래의 함수는 두개의 인자를 받아 합계를 구하는 함수로 보인다.
하지만, 전달되는 인수나 return되는 값이나 Type이 명확하지 않다.
이는 JavaScript의 동적 타이핑에 의해 발생된 것이다.
// JavaScript
function sum(a, b) {
return a + b;
}
sum('x', 'y'); // 'xy'
그럼 정적 타입핑은 왜 좋은 것일까?
우선 첫째, 컴파일 단계에서 오류를 잡아낼 수 있다.
그리고 둘째, 개발자의 의도를 명확하게 하여, 예측할 수 있게하고 디버깅을 쉽게 한다.
// TypeScript
function sum(a: number, b: number) {
return a + b;
}
sum('x', 'y'); // error
TypeScript를 사용하는 가장 큰 장점은
IDE(통합개발환경)을 포함한 다양한 도구의 지원을 받을 수 있다는 것이다.
💁🏻♀️ IDE(Integrated Development Environment)
- 코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을
하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어- 대표적인 IDE : VScode, Eclipse
TypeScript는 인터페이스, 제네릭 등과 같은 강력한 객체지향 프로그래밍 지원한다.
💁🏻♀️ 그래서 TypeScript를 왜 쓰는데요?
1. 정적 타입을 지원
- 컴파일 단계에서 오류 잡아낼 수 있음
- 개발자의 의도를 명확하게 하여, 예측할 수 있게하고 디버깅을 쉽게 한다.
2. VSCode와 같은 IDE(통합개발환경)을 포함한 다양한 도구의 지원
3. interface, generic과 같이 객체지향 프로그래밍을 지원
4. 최신문법을 별도의 컴파일러(babel 등) 없이 사용 가능
이 글은 아래의 글을 바탕으로 공부하며 개인적으로 정리한 글입니다.
이미지에 대한 출처는 아래의 포스팅에 있습니다.