자바스크립트는 느슨한 타입(Loosely type)의 동적(Dynamic)언어이다.
JavaScript의 변수는 특정 type과 연결되지 않으며,
모든 type의 값으로 할당(및 재할당)이 가능하다.
라고 하는데 듣기만 해서는 전혀 이해가 되지 않는다
근데 천천히 생각해보면 내가 맨날 하고있는거였음
밑의 예시를 보자
let sungho = 27 // "sungho"는 숫자임
sungho = "male" // "sungho"는 이제 문자열임
sungho = true // "sungho"는 이제 boolean임
이런식으로, 자바스크립트에서 변수를 선언할 때, type을 지정하지 않아도 된다
그래서, 언제든지 형변환이 가능하다!
그래서 '느슨한 타입(loosely type)'이라고 부르나보다
또한, 변수에 저장되는 값의 type도 언제든지 바꿀 수 있기 때문에
'동적 타입(dynamic type)'이라고 부를 수 있다
그래서 합쳐서
"느슨한 타입의 동적 언어"
라는 좀 입에 안 붙는 이름이 탄생했나보다
근데 이게 마냥 좋은건 또 아니란다.
자바스크립트의 약점이라고 하는데,
자바스크립트는 컴파일 된 후 실행되는 것이 아니라,
실행되는 순간 한 줄씩 읽으며 실행이 된다.
즉, 컴파일되는 과정이 따로 없기 때문에
type error를 실행 전에 체크할 수 없다
밑의 예시를 보자
let a = 1;
console.log(a + true);
위 코드를 실행하면 어떤 결과가 나올까?
당연히! number와 boolean type을 더하려고 했으니까
에러 메세지를 띄워줄 것임
근데 자바스크립트는
이렇게 숫자 "2"를 출력한다.
물론 대부분의 언어는 허락하지 않음.
중간에 멈추고, 에러메세지를 통해
"야, 숫자랑 true를 어떻게 더하냐? ㅋㅋ"
라고 할거임
근데 자바스크립트는 어떻게든 실행해보려고
true를 binary로 변환해서 1로 만들어서 더해줌
그래서 이런것도 가능함
물론 내 멍청한 코드를 실행시켜주려고 하는 자바스크립트가
너무 고맙긴 한데,
저런 코드는 보통 무언가 잘못되었거나 실수했을 때 쓰이니까
실행시켜버리기 보다는, 에러를 띄워주는게 더 좋을듯
그래서 이런 문제들을 보완하기 위해서는
특히 타입스크립트는 자바스크립트에 type을 지정할 수 있도록 해주면서,
에러메세지도 굉장히 구체적으로 보여준다.
자바스크립트 에러메세지가 넘 추상적이고 추적 어려워서 더 구체적으로 보임
아무튼, 규모가 크고 많은 사람이 참여하는 프로젝트 같은건
타입스크립트 쓰는게 여러모로 좋을 것으로 보인다