2. FrontEnd/TypeScript / / 2023. 5. 26. 17:39

[TS] JS의 한계점, TS 차이점

목표

- 자바스립트에는 어떤 한계점?

- 타입스크립트는 이 한계점을 어떻게 극복함?

- 타입스크립트가 다른 언어 대비 갖는 차별점은?

 

✅ 모든 프로그래밍 언어에는 타입 시스템이 있다.

자바스크립트를 포함해서 우리가 알고 있는 모든 프로그래밍언어에는 사실 타입 시스템이라는게 존재한다.

✅ 타입 시스템이란?

언어에서 사용할 수 있는 아주 여러가지 값들을 어떤 기준으로 묶어서 타입으로 정할지 결정하고 또 코드의 타입을 언제 검사할지 그리고 어떻게 검사할지 등의 우리가 프로그래밍 언어를 사용할때 타입과 관련해서 지켜야 하는 규칙들을 모아둔 체계입니다. 

즉, 언어의 타입 관련된 문법 체계 라고도 볼 수 있습니다.

이 타입 시스템은 크게 두가지로 나눌 수 있는데요 

- 정적 타입 시스템 : 코드 실행전에 모든 변수의 타입을 고정적으로 결정 (엄격하고 고정적인 시스템)

- 동적 타입 시스템 : 코드를 실행하기 전에는 타입을 결정하지 않고, 코드를 실행할떄마다 유동적으로 변수의 타입을 결정 (자유롭고 유연한 시스템)

▶️ 동적 타입 시스템

자바스크립트가 사용하는 동적 타입 시스템은 기본적으로 변수의 타입들을 코드가 실행 되는 도중에 결정하기 때문에 미리 변수에 타입을 설정하지 않아도 된다는 유연함을 장점을 가진다.

변수의 타입이 어떤 하나의 타입으로 고정되지 않고, 현재 변수에 담긴 값에 따라서 변수의 타입이 동적으로 계속해서 달라진다.


변수 a는 첫번째에서는 문자열 값을 담기에 문자열타입(string)이 되고, 두번째에서는 숫자 값을 담기에 숫자 타입(number)이 됩니다.

 

 

 

 

 

toUpperCase는 문자열에만 사용할 수 있는 메서드인데, 변수 a는 숫자이므로 오류 발생

중요하게 살펴봐야 할 부분은 이 코드가 실행이 된다는 점이다. 

사실 애초에 오류가 발생할 코드 였다면 실행 전에 검사를 거쳐서 실행하지 못하도록 막는게 좋다. 프로그램이 런타임에 오류가 발생하게 되면 아주 치명적인 문제가 됨

 

 

 

 

 

▶️ 정적 타입 시스템

코드를 실행하기 전에 모든 변수의 타입을 결정, 변수를 선언 함과 동시에 타입도 함께 명시

자바같은 정적 타입 시스템을 사용하는 언어는 타입 관련 오류가 있으면 에디터 상에서 애초에 오류를 바로 알려주고 실행 되기 전에 타입을 잘못 쓰지 않았는지 검사까지 모두 마치고 실행되기 때문에 오류가 있다면 애초에 실행이 불가능합니다.

단점

모든 변수에 일일히 타입을 다 정의해야 하기 때문에 일단 매우 귀찮고 우리가 작성해야 하는 코드의 양이 상당히 늘어난다.

 

▶️ 타입스크립트 = 점진적 타입 시스템을 사용한다.

점진적으로 타입이 정의된 변수들에 대해서는 타입을 미리 결정하고 타입이 정의되지 않은 변수들에 대해서는 타입을 자동으로 추론하는 그런 타입 시스템

 

모든 프로그래밍 언어에는 타입 시스템이 있다

 

타입 시스템은 변수의 타입을 언제 결정 하느냐에 따라서 -> 실행 중에 결정하면 동적 타입 시스템 / 실행 전에 결정하면 정적 타입 시스템


동적 타입 시스템(JS)에서는 코드에 타입 관련 오류를 미리 검사할 수 없기 때문에 실행 도중 예상치 못한 오류가 발생할 수 있는 단점
정적 타입 시스템(Java)에서는 위의 단점을 해결할 수 있지만, 모든 변수에 타입을 지정해 주어야하는 불편함

 

타입스크립트는 점진적 타입 시스템을 채택해서 정적 타입 시스템처럼 프로그램 실행 전에 타입을 올바르게 썼는지 타입 검사를 해 타입 안정성을 확보하면서도 동적 타입 시스템처럼 변수에 우리가 일일히 모두 다 타입을 지정해주지 않아도 되는 유연함까지 확보한 독특한 타입 시스템을 갖추고 있는 언어

728x90

'2. FrontEnd > TypeScript' 카테고리의 다른 글

[TS] 타입스크립트 동작 원리  (0) 2023.05.30
[TS] TypeScript의 탄생  (5) 2023.05.23
[TS] Union Type, Literal Type, Type Aliases  (0) 2022.08.31
[TS] 타입스크립트란?  (0) 2022.08.25
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유