Record4me

시작하면 끝을 봐야지

개발일지

[TIL] 24_0304 자바스크립트의 약점

잇츄미 2024. 3. 4. 16:40

✨ 자바스크립트의 약점

 

📌 1. 실행시간에 결정되는 변수타입

- 자바스크립트는 변수 타입이 실행 시간에 결정되니 때문에

따로 타입을 지정하지 않았어.

 

예를 들면, common.js 시절에는 var라는 키워드, es6 때의 경우는 let, const라는 키워드를 써서 변수를 정의했어.

const는 상수, let은 변수라고 보면 돼.

말 그대로 이 변수가 값이 변할 수 있는지 또는 고정되어 있는 지를 보고,

소수점 숫자인 지, 문자인 지 타입을 명확하게 지정하지 않았어.

 

=> 그래서 자바스크립트는 변수 타입이 실행 시간에 결정될 수 밖에 없어.

들어올수 있는 변수의 데이터들이 너무 다양하기 때문이야.

 

 

 

📌 2. 약한 타입을 체크

- 그 외에는 개발자의 실수로 인한 오류가 발생하기 쉬워.

이런 오타같은 실수가 들어왔을 때 에러가 났어라고 세세하게 log를 남겨주지 않으면 찾기 어려워.

 

예를 들면, 변수에 잘못된 타입의 값이 할당됐다면,

id라는 변수(유니크하게 증가하는 값)에 갑자기 hello같은 문자열이 들어갔다고 하면.

 

=> 이 실행시간에 변수의 값과 타입을 모두 확인해야하는 번거로움이 있어.

let a = 1; a = "Hello";

 

숫자였는데 hello가 되는 순간 문자열이 되어버려.

이게  불가능한 코드는 아니야.

 

a=1이 hello가 되면 잘못된 return 값과 잘못된 연산 DB에 쓰일 수 있는 side effect가 커질 수 있어.

 

 

📌 3. 유연하게 수시로 변경되는 객체의 성질

예시를 보자, 위도, 경도를 갖고 있는 객체로.

const obj = { latitude: 11.5, longitude: 47.1 };
const result = obj.latitude * obj.longitute; // 보통은 이런 실수는 컴파일러가 잡아줘야 되는데
console.log(result) // NaN이라는 엉뚱한 값 출현!

 

longitude인데 longitute라고 d를 t로 적는 오타같은 실수로
엉뚱한 값이 찍혀. 그렇게 return하는 값이 없어서 undefind란 엉뚱한 값이 찍혀.

 

이렇게 스펠링을 틀렸을 때 오류가 나서 고쳐야되는 인식이 잡혀야하는데

자바스크립트는 그냥 실행시켜버려.

 

결국 디버깅이 어려워져.

=> 그래서 객체는 성질이 확실히 정해져야 해.

 

 

다른 예로,

스펠링 뿐만이 아닌 time이라는 값을 넣어볼 수 있는데,

나 혼자가 아닌 협업할 때 time이란 속성이 없었는데 생겼을 때 당황할 수 있어.

이런 경우 프로그래머가 수시로 속성을 변경시켜줄 수 있는 유연함이 약점이 되는 거야.

 

=> 자바 스크립트는 이런 유연함이 약점이 돼.

 

 

 

📋 느낀 점

- 자바스크립트가 계속 오래 쓰이면서 그만큼 단점도 보이니 보완할 수 있는 무언가가 필요한 것 같아. 그리고 그걸 타입스크립트가 할 수 있는 것 같아.