TypeScript 는 JavaScript의 확장 언어이다.
JavaScript 의 기능은 그대로 가져가면서 "타입" 을 추가로 지원하는 언어이다.
1. 나오게된 배경
JavaScript 는 브랜든 아이크가 10일만에 만든 언어이다.
브라우저에 짧은 코드 작성을 위한 용도로 만들어져으나, JS가 점차 유명해지고 짧은 코드가 아닌 수많은 코드를 작성해야하는 상황이 생긴 것이다.
짧은 코드를 위한 JS는 긴 코드로 작성시, 발생하는 오류가 있는데. 이는 JavaScript의 특징 때문이다.
바로 JS는 "동적 타입 언어" 라는 것.
여기서 동적 타입 언어는 어떠한 데이터 타입의 값도 자유롭게 변경할 수 있다는 것이다.
JS에서 값을 할당하는 시점에 변수의 타입은 동적으로 결정되고, 자유롭게 변경 가능하다.
변수에 저장된 값의 데이터 타입이 런타임에 결정된다.
> 이걸 풀어서 설명하면 코드가 실행되는 시점에서 변수에 어떤 값이 할당되느냐에 따라 데이터 타입이 정해진다.
여기서 헷갈리는 부분이 있다. JavaScript 의 선언문에는 cosnt
라는 놈이있다.
const
는 한번 값을 설정하면 그 이후에 값을 재할당 불가능하다는 특징이 있다.
그렇다면 const
는 다시 값을 변경할수 없으니 동적타입이랑 거리가 먼 것이아니냐? 라는 생각이 들수있다.
하지만, 값을 변경할수 없다는 표현에 대해서 주목해 보아야한다.
const
는 "변수 자체가 가리키는 메모리 주소(참조)" 를 변경할 수 없다는 것이다. (그 값이 객체나 배열일 경우, 내부 값 변경은 가능)
따라서, const
는 변수의 "참조"를 고정할 뿐, 타입을 고정하지는 않는다는 것이다.
결국은 JavaScript는 코드가 실행될때, 변수의 값에 따라 타입이 결정되고.
이러한 동적 타입 언어 때문에 발생하는 오류가 있다는 것이다.
동적 타입 언어의 장점은 유연성이 높다는 것이지만.
반대로 신뢰성이 떨어진다는 단점이 존재한다.
그리하여 안정적인 프로그램을 만들기 위한 변수 선언을 위해 데이터 타입을 설정하고 체크해주는 TypeScript 필요성이 높아진 것이다.
2. TypeScript의 주요 특징
1) 타입 시스템
- 변수, 함수, 객체 등에 타입을 명시적으로 지정
- 오류를 미리 확인하여 버그를 줄이고 더 안전하게 작성 가능
2) 컴파일 언어
- TypeScript는 브라우저가 바로 실행할 수 없음
- TypeScript 코드를 JavaScript 로 컴파일 해서 실행하여야함
3) JS 호환
- 기존 JavaScript 코드를 TypeScript 안에서 그대로 사용할 수 있음
4) 향상된 개발 경험
- 강력한 자동완성, 에러검출, 리팩토링 지원
** 리팩토링: 기존의 기능은 그대로 유지하면서, 코드의 구조나 가독성을 개선하는 작업.
> 중복제거, 성능개선, 확장성 강화, 버그 감소 <-> 리라이팅: 기존코드를 모두 버리고 새로 작성
JavaScript | TypeScript |
동적 타입 Dynamic Typing | 정적 타입 Static Typing |
런타임 오류 가능 | 컴파일 시 오류 감지 기능 |
제한적 | 강력한 IDE 지원( VsCode) |
간단, 즉시 실행 가능 | 타입 개념을 추가로 배워야함 |
빠른 개발 | 대규모, 복잡한 프로젝트에 적합 |
3. TypeScript와 Node.js
TypeScript 를 설치하기 위해서는 Node.js 를 설치해주어야한다.
Node.js의 npm이라는 라이브러리를 통하여 TypeScirpt를 설치해줄 수 있다.
1) Node.js
- Node.js 는 브라우저가 아닌 로컬 환경에서 JavaScript를 실행할 수 있는 런타임 환경이다.
- 타입 스크립트는 브라우저에서 직접 실행할 수 없고, 타입스크림트 파일(.ts)를 자바스크립트 파일로 컴파일해야만 브라우저에서 동작한다.
-> 타입스크림트 컴파일러 tsc 는 Node.js 환경에서 실행되기 때문에 타입스크립트 사용시 Node.js 를 설치해야한다.
- Node.js는 개발 도구일 뿐, 백엔드 기술로 쓰는 것은 아님.
Node.js는 "Chrom V8 JavaScript 엔진을 기반으로 만들어진 JavaScript 런타임 환경" 이다.
- 브라우저 외부에서 JavaScirpt를 실행할 수 있도록 해줌
- 주로 서버사이드 애플리케이션(백엔드)를 구축하거나 CLI(command line interface)도구, 스크립트 작업 등에서 사용됨
> 추후 다시 다룰 부분.
2) npm / Node Package Manager.
- 타입스크립트와 관련된 라이브러리나 도구를 관리할 때 사용딤