
타입 스크립트는 자바 스크립트의 한계를 보안하기 위해 개발된 언어라고 배웠습니다.
이번 포스트에서는 자바 스크립트의 한계점과 이를 타입 스크립트에서 어떻게 보안하고 있는지 담아보았습니다.
모든 언어에는 타입 시스템이 있다. 이는 간단히 말해 언어의 문법 체계이다. 프로그래밍 언어에 따라 값, 변수, 표현식 등 다양한 요소들이 어떤 “타입(자료형)”에 속하는지 분류하고, 이를 언제 어떻게 검사해야 등 타입에 관련해서 지켜야 하는 규칙들의 모음이다.
타입 시스템은 두가지로 구분할 수 있는데, 정적 타입 시스템과 동적 타입 시스템이다.
1️⃣-1️⃣ 정적 타입 시스템
변수나 표현식의 타입을 컴파일 시점(코드 실행 전)에 검사한다.오류를 미리 발견할 수 있어 안정성이 높다.
예시 - C, Java
1️⃣- 2️⃣ 동적 타입 시스템
변수의 타입을 실행 시점(런타임)에 검사한다. 유연하지만, 실행 중 오류가 발생할 수 있다.
예시 - Python, JavaScript

동적 타입 시스템의 경우 데이터 타입이 유동적으로 결정되기 때문에 개발 시 변수에 타입을 정하지 않아도 된다는 장점이 있습니다.
또한 변수의 타입이 고정되지 않고 현재 변수에 담긴 값에 따라서 값이 동적으로 변경된다는 장점도 있습니다.
하지만 이런 장점으로 인해 단점도 있다. 큰 단점으로는 컴파일 시점에 타입 검사가 이루어지지 때문에, 잘못된 타입의 값이 변수에 할당되어도 바로 에러가 발생하지 않고 이로 인해 프로그램 실행 도중(런타임)에 예상치 못한 타입 오류(TypeError)가 발생할 수 있다.
또한, 타입 정보가 코드상에 명확하게 드러나지 않기 때문에, 코드의 의도를 파악하거나 문제를 추적하는 과정이 복잡해지며, 이는 유지보수와 협업에 불리하게 작용할 수 있다.
정적 타입 시스템의 경우 코드를 실행하기 전에 모든 변수의 타입을 결정한다. 즉, 변수 선언 시 타입도 함께 명시를 해주어야 한다.
만약 정적 타입 시스템을 사용하는 언어는 타입 관련 오류가 있다면 에디터 상에서 애초에 오류를 바로 알려주고 실행 되기 전에 타입을 잘못 쓰지 않았는지 검사까지 모두 마치고 실행되기 때문에 오류가 있다면 애초에 실행이 불가능하다. 이러한 이유로 정적 타입 시스템에서는 동적 타입 시스템에서 발생하는 타입 오류 등의 문제가 잘 발생하지 않는다.
하지만 변수 선언 시 타입도 함께 명시해준다는 것은 번거로움과 그만큼 더 많은 코드를 작성해야 한다는 단점이 있다.
타입 스크립트에서는 이 두 타입 시스템의 장점을 가져온 점진적 타입 시스템을 사용한다.
정적 타입 시스템 장점 - 타입 오류 검사
점진적 타입 시스템에서는 변수를 정적 타입 시스템처럼 변수 타입을 코드 실행 전 검사하여 런타임 오류를 예방해주고 있다. 아래 사진과 같이 number 타입 변수에 문자열 메소드를 실행하려고 하면 오류를 발생시켜 알려주는 것을 볼 수 있다.

동적 타입 시스템 - 변수 타입 명시 불필요
점진적 타입 시스템에서는 동적 타입 시스템과 같이 변수 타입 명시를 필수도 하지 않아도 된다. 이는 타입스크립트에서 변수에 담기는 초기값을 기준으로 타입을 알아서 추론하기 때문이다.

모든 프로그래밍 언어에는 타입 시스템이 있고 타입 시스템은 크게 동적 타입 시스템과 정적 타입 시스템으로 나눌 수 있었다. 타입 스트립트의 경우 각 타입 시스템의 장점을 가져온 점진적 타입 시스템을 사용하고 있다.
