언어는 변수가 데이터 타입을 가지는지, 변수의 데이터 타입이 변경될 수 있는지에 따라 동적 타입 언어와 정적 타입 언어로 나뉩니다.
정적 타입 언어
: C언어, 자바, 코틀린, 고, 하스켈..
동적 타입 언어
: 자바스크립트
정적 타입 언어의 변수는 변수에 미리 타입을 선언하고, 변경할 수 없습니다. 컴파일 시점에 타입 체크를 수행한 후 만약 통과하지 못하면 프로그램 실행 자체를 막아 런타임에 발생하는 에러를 줄입니다. (일관성을 강제)
동적 타입 언어는 변수의 타입을 선언하지 않고, 할당에 의해 타입이 결정(타입 추론)이 됩니다. 또한 재할당에 의하여 타입이 자유롭게 변경될 수 있습니다. 즉, 변수의 타입이 아닌 변수에 할당된 값의 타입이라고 말하는것이 정확합니다.
🚫 변수는 기본적으로 타입을 가지지 않습니다. => undefined
var foo;
console.log(typeof foo); //undefined
foo = 3;
console.log(typeof foo); //number
foo = "Hello";
console.log(typeof foo); //string
동적 타입 언어의 변수는 언제나 변경될수 있기 때문에 변화하는 변수의 값을 추적하기 어렵습니다. 또한, 자바스크립트 엔진이 암묵적으로 타입을 자동 변환하기도 하는데, 이때 잘못 예측하여 변환할시 오류가 발생할 수 있습니다.
🤓 결국! 동적 타입언어는 유연성은 높지만, 신뢰성이 떨어집니다. 따라서 다음과 같은 점을 기억하며 사용하는 것이 좋습니다.
꼭 필요한 경우
에만 사용 : 변수는 많아질수록 오류 발생 가능성이 높아진다.유효범위(스코프)
는 최대한 좁게
전역 변수
사용은 최소한
으로 : 어디에서나 참조/변경 할 수 있는 전역 변수는 프로그램 복잡성을 높여 흐름을 추적하기 어렵게 만들어 오류의 원인을 특정하기 어렵게 만듭니다.상수
를 사용 : 변수보다는 상수를 사용하여 변수의 변경을 억제합니다.네이밍
은 정확히 : 변수에 의미를 정확히 파악할 수 있는 네이밍을 해줍니다.