타입스크립트

- 타입스크립트는 기존의 자바스크립트를 더 안전하게 사용할 수 있도록 타입과 관련된 기능을 추가한 언어입니다.
- 자바스크립트의 확장판이라고 할 수 있습니다.
타입스크립트를 쓰는 이유
- 기존 자바스크립트는 엄격한 문법을 갖출 필요가 없습니다. 대신 버그로부터의 안정성은 높지 않습니다.
- 기존 자바스크립트는 동적 타입 시스템으로 코드의 타입 오류를 미리 검사할 수 없으며, 예기치 못한 오류가 발생할 수 있는 위험이 있습니다.
- 타입스크립트는 점진적 타입 시스템을 도입해 실행 전 검사를 통해 타입 안정성을 확보하고, 자동으로 초기값을 통해 변수의 타입을 추론할 수 있는 유연함도 갖추고 있습니다.
타입 시스템
- 타입 시스템은 언어에서 사용하는 여러 값을 묶어 어떤 타입으로 정할지 결정하고, 언제 어떻게 타입을 검사할지 등 프로그래밍 언어를 사용할 때 타입과 관련해 지켜야 하는 규칙들을 모아둔 체계입니다.
정적 타입 시스템
- 정적 타입 시스템은 코드를 실행하기 전 모든 변수의 타입을 결정합니다.
- 변수를 선엄함과 동시에 타입도 함께 명시해야 합니다.
- 타입을 잘못 사용한다면 에디터 상에서 빨간 줄과 함께 오류가 발생합니다.
- 코드 실행 전 타입 오류를 알 수 있습니다.
- 모든 변수에 일일히 타입을 정의해야 하기 때문에 귀찮을 수 있고 작성해야 하는 코드의 양이 늘어납니다.
동적 타입 시스템
- 동적 타입 시스템은 기본적으로 변수의 타입들을 코드가 실행 되는 도중에 결정하기 때문에 우리가 미리 변수에 타입을 설정하지 않아도 된다는 유연함을 장점으로 갖습니다.
- 변수의 타입이 하나의 타입으로 고정되지 않고 현재 변수에 담긴 값에 따라 변수의 타입이 동적으로 계속 달라집니다.
- 하나의 변수에 다양한 타입의 값을 넣을 수 있는 유연함을 장점으로 생각할 수도 있습니다.
- 하지만 실행 전 타입 오류를 확인할 수 없어서 런타임에 오류가 발생할 수 있는 코드도 실행 전에는 문제를 발견하지 못하기도 합니다.
점진적 타입 시스템
- 타입스크립트는 동적 타입 시스템과 정적 타입 시스템을 혼합한 것 같은 독특한 타입 시스템을 사용합니다.
- 정적 타입 시스템처럼 변수의 타입을 코드 실행 전에 결정하고 타입 오류가 없는지 프로그램 실행 전에 코드를 검사합니다.
- 동적 타입 시스템처럼 모든 변수에 일일이 직접 타입을 명시하지 않아도 됩니다.
- 타입스크립트에서는 변수의 타입을 직접 정의하지 않아도 변수에 담기는 초기값을 기준으로 타입을 추론합니다.
- 이런 타입 시스템을 점진적 타입 시스템이라고 부릅니다. 점진적으로 타입이 정의된 변수들에 대해서는 타입을 미리 결정하고, 타입이 정의되지 않은 변수들에 대해서는 타입을 자동으로 추론하는 타입 시스템입니다.
자바스크립트의 한계
- 자바스크립트는 동적 타입 언어입니다.
- 자바스크립트는 타입을 미리 설정하지 않아도 된다는 장점이 있지만, 실행 도중 예상치 못한 타입이 들어와 타입 에러를 발생시키는 경우가 있습니다.
- 추가적인 설명이 없다면 함수의 파라미터에 어떤 타입의 값이 들어가고 리턴되는지 구체적인 코드를 봐야 이해할 수 있습니다.
타입스크립트의 장점
- 타입스크립트는 점진적 타입 언어입니다.
- 타입 오류가 없는지 프로그램 실행 전 코드를 검사하여 컴파일 단계에서 오류를 포착할 수 있습니다.
- 코드를 통해 어떤 타입의 값이 필요한지 쉽게 파악할 수 있습니다.
- 제네릭 등을 지원해 객체지향 프로그래밍에 도움을 줍니다.
정리
- 타입 시스템은 변수의 타입을 언제 결정하느냐에 따라 실행 중에 결정하면 동적 타입 시스템, 실행 전에 결정하면 정적 타입 시스템으로 나눌 수 있습니다.
- 자바스크립트는 동적 타입 시스템으로 타입 관련 오류를 실행 전 미리 검사할 수 없어서 실행 도중 예상치 못한 오류가 발생할 수 있습니다.
- 타입스크립트는 점진적 타입 시스템을 가지고 있어서 정적 타입 시스템처럼 프로그램 실행 전 타입 검사를 통해 타입 안정성을 가지고, 동적 타입 시스템처럼 변수에 모두 다 타입을 지정하지 않아도 되는 유연함을 가지고 있습니다.