이정환 님의 한 입 크기로 잘라먹는 타입스크립트 를 수강한 내용 입니다.
복잡한 대규모의 프로그램을 만들 때 자바스크립트로 하기에는 한계점이 있었기 때문에 타입스크립트가 필요했고 등장했다고 살펴보았습니다.
이번시간에는 자바스크립트에 구체적으로 어떤 한계점이 있고 타입스크립트는 이런 한계점을 어떻게 극복하는지 살펴보도록 하겠습니다.
타입 시스템이란
모든 프로그래밍 언어에는 타입 시스템이 있습니다.
타입 시스템 정의
언어에서 사용할 수 있는 아주 여러가지 값들을 어떤 기준으로 묶어서 타입으로 정할지 결정하고
코드의 타입을 언제 검사할지 그리고 어떻게 검사할지 등의 우리가 프로그래밍 언어를 사용할때 타입과 관련해서 지켜야 하는 규칙들을 모아둔 체계입니다.
타입 시스템은 언어의 타입 관련된 문법 체계 라고도 볼 수 있습니다.
타입 시스템은 크게 두 가지로 나눌 수 있다.
동적 타입 시스템
자바스크립트가 사용하는 동적 타입 시스템은
기본적으로 변수의 타입
들을 코드가 실행 되는 도중에 결정하기 때문에 우리가 미리 변수에 타입을 설정하지 않아도 된다는 유연함을 장점으로 갖습니다.
- 변수의 타입이 어떤 하나의 타입으로 딱 고정되지 않고
현재 변수
에 담긴 값에 따라서 변수의 타입이 동적으로 계속해서 달라집니다.
만약 위의 코드에서 변수 a에 toUpperCase라는 문자열을 대문자로 바꿔주는 문자열 전용 메서드를 사용하면 ?
실행은 되지만 당연히 오류가 발생합니다.
오류가 발생하는데 실행이 된다❓
복잡한 프로그램을 만들때에는 코드도 따라서 매우 복잡해지고 많아지게 되면서 저런 오류가 실행과 동시에 발생하지 않고 완전 나중에 몇 일 있다가 발생하게 될 수도 있습니다.
대규모 서비스라면 막대한 손해 입니다.
정적 타입 시스템
반면에 C나 Java 같은 언어들은 정적 타입 시스템을 가지고 있는데
- 정적 타입 시스템은 코드를 실행하기 전에 모든 변수의 타입을 결정합니다.
정적 타입 시스템의 장점
타입 관련 오류가 있으면
에디터 상에서 애초에 오류를 바로 알려주고
실행 되기 전에 타입을 잘못 쓰지 않았는지 검사까지 모두 마치고 실행되기 때문에 오류가 있다면 애초에 실행이 불가능합니다.
그래서 프로그래머가 의도치 않은 실수를 하더라도 미리 확인할 수 있는 기회가 주어집니다.
장점이 있으면 단점도 있겠지 ❓
정적 타입 시스템 언어들에서는 모든 변수에 일일히 타입을 다 정의해야 하기 때문에 일단 매우 귀찮고 우리가 작성해야 하는 코드의 양이 상당히 늘어납니다.
하지만 타입스크립트는..❗️
그동안 작성해왔던 자바스크립트코드에 이렇게 모든 변수에 다 타입을 정의해야 한다고 하면 굳이 자바스크립트를 쓸 이유가 없습니다.
타입스크립트와 점진적 타이핑
마치 자바스크립트의 동적 타입 시스템과 자바의 정적 타입 시스템을 혼합한 것 같은 독특한 타입시스템을 사용 합니다.
일단 타입스크립트에서는 마치 정적 타입 시스템처럼 변수의 타입을 코드 실행 전에 결정하고 타입 오류가 없는지 프로그램 실행 전에 코드를 검사합니다.
변수 a를 number 타입으로 정의
했기 때문에 a에 toUpperCase 같은 문자열 메서드를 사용하려고 하면 미리 오류를 띄워 우리에게 알려줍니다.
타입스크립트의 추론 ❓
이번에는 변수 a의 타입을 정의하지 않았습니다.
근데 그럼에도 변수 a를 숫자 타입으로 자동으로 인지
해서 코드에 오류가 있음을 빨간줄로 알려줍니다.
타입스크립트에서는 이렇게 변수의 타입을 직접 정의 하지 않아도 변수에 담기는 초기값을 기준으로 자동으로 타입을 알아서 추론 합니다.
자.. 타입스크립트가 뭐라고 ❓
위와 같은 타입 시스템을 점진적으로 타입을 결정한다 라고 해서 점진적 타입 시스템이라고 부릅니다.
타입이 정의된 변수들에 대해서는 타입을 미리 결정하고 타입이 정의되지 않은 변수들에 대해서는 타입을 자동으로 추론하는 타입 시스템
정리
타입스크립트는 점진적 타입 시스템을 채택해서
정적 타입 시스템
처럼 프로그램 실행 전에 타입을 올바르게 썼는지 타입 검사를 해 타입 안정성을 확보하면서도동적 타입 시스템
처럼 변수에 일일히 모두 다 타입을 지정해주지 않아도 되는 유연함까지 확보한 독특한 타입 시스템을 갖추고 있는 언어