자바스크립트는 진짜 오류를 거의 만들지 않는다. 그냥 어떻게든 실행시켜줄려고 한다.
그래서 아래와 같은 코드도 작동이된다.
[1, 2, 3, 4] + false
// '1,2,3,4false'
이런식으로 array와 boolean을 그냥 string으로 만들어서 합쳐버린다.
엄청 이상한 일인데 자바스크립트는 아무렇지 않듯이 작동시켜준다.
다른 언어는 이를 허용하지 않는다.
허용되서는 안 되는 코드인데 허용이 된다니 ....
바로 이게 자바스크립트의 가장 큰 단점중에 하나이다.
이상적인 상태는 저렇게 했을때 자바스크립트가 저 부분이 잘못되었다고 알려주는 것이다.
"왜 배열에 boolean을 더하려고 하나요?" 라고 말이다.
다른 경우도 보자
function divide(a, b) {
rueturn a/b
}
divide(2,3)
// 0.666666666666666
divide("xxxxxxx")
NaN
이렇게 숫자가아닌 문자를 넣었는데 자바스크립트는 실행을 막아주지 않고 그냥 숫자가 아니라는 것만 알려준다.
원래는 이렇게 숫자가 아니면 divide 함수를 실행시켜주면 안 된다. 저렇게 NaN이 아니라 에러를 띄워줘야한다.
그리고 입력값을 두 개를 받도록 되어있는데 하나만 보냈는데도 자바스크립트는 그냥 실행시켰다.
다른언어 예를 들어 Java, C#, Go, Rust와 같은 언어들은 위와 같이 실행되지 않고 에러를 띄워 개발자들을 보호해준다.
더 최악의 단점이 있다.
바로 런타임 에러이다.
const hi = { name: "kim" };
hi.hello();
이런식으로 작성할때는 아무런 표시가 없다. 그리고 코드를 작동시키면 그때서야
TypeError: hi.hello() is not a function 이라는 에러가 뜬다.
즉 유저의 컴퓨터에서 코드가 실행되면 나타나는 에러이다. 결코 좋은 것이 아니다.
좋은 프로그래밍 언어라면 hi 객체를 분석해서 hello()함수가 없다는 걸 개발자한테 알려줄 것이다.
그렇기때문에 위와 같은 코드는 실행할 수 없다고 미리 알려줄 것이다.
rust나 go에서는 위와 같이 만들면 실행조차 되지 않는다. hi객체에 hello가 없다고 그전에 알려준다.
이러한 단점들을 보완하기 위해 만들어 진것이다.
바로 "타입스크립트"이다.
타입스크립트를 사용하면 아래와 같은 걱정을 할 필요가 없다.
1. array와 boolean이 더해지는 것을 허용하지 않는다.
2. 입력값 두개가 필요한데 하나이면 두 개를 입력하라고 할 것이고 숫자가 아닌 다른 타입을 입력하면 숫자타입을 입력하라고 알려준다.
3. 런타임 이전에 유저한테 이 코드를 실행하면 에러가 날것이라고 경고해준다.
이렇게 타입스크립트는 자바스크립트에 없는 여러 보호장치들을 가지고 있다.
source
노마드코더 - 타입스크립트
'Typescript > 개념' 카테고리의 다른 글
[Typescript] call signatures // overloading (0) | 2022.09.22 |
---|---|
[Typescript] Type part 3 ( unknown / void / never ) (1) | 2022.09.21 |
[Typescript] Type part 2 ( readonly / Tuple / any ) (1) | 2022.09.21 |
[Typescript] 타입 - 1 (0) | 2022.09.20 |
[Typescript] Typescrip를 사용하는 방법 (1) 기초편 (1) | 2022.09.19 |