자바스크립트는 대표적인 동적 언어로, 어떤 특정한 타입과 연결되지 않고, 따로 명시하지 않아도 모든 타입으로 유연하게 할당 및 재할당이 가능하다.
정적 타입 언어
C, C++, Java, C#, Swift 등의 정적 타입 언어는 변수를 선언할 경우 데이터 타입을 사전에 선언해야 한다. 정적 타입 언어는 컴파일 시 선언한 데이터 타입에 맞는 값을 할당했는지 검사하고, 맞지 않을 경우 에러를 보낸다. 변수 선언 시점에서 타입이 결정되고, 타입을 변경할 수 없다. 이는 컴파일 시 타입을 결정하기 때문에 실행 속도가 빠르고, 타입의 일관성을 강제함으로써 안정적인 코드를 구축 가능한 이점이 있다.
동적 타입 언어
반면 자바스크립트는 동적 타입 언어이다. var, let, const로 변수를 선언하고 데이터 타입은 선언하지 않는다. 값을 할당하는 시점에, 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다. 이를 동적 타이핑(Dynamic Typing) 이라 한다. 타입 없이 변수를 선언하기 때문에 느슨한 타입(Loosely Typed)언어로도 불린다. 동적 타입 언어는 JavaScript, Ruby, Python, PHP, SmallTalk, Lisp 등이 있다.
동적 타이핑의 장단점
동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있어 입문자가 이해하기 쉽고, 사용하기 편리하다. 또한 런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 많은 선택의 여지가 있다.
하지만 이러한 구조가 유연성(Flexibility)은 높지만 신뢰성(Reliability)은 떨어지는 단점이 생기는데, 동적으로 결정되는 부분에 있어 프로그램이 복잡할 경우 때때로 변수 값의 추적이 어려워질 수 있다. 자바스크립트는 개발자의 의도와 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다. 이러한 잘못된 예측은 코드의 양이 방대할수록 타입 에러를 찾아내기가 어려워진다.
변수를 사용할 때 주의할 사항
1. 변수의 개수가 많아지만 오류가 발생할 확률이 높아지므로,
꼭 필요한 경우에 한해 제한적으로 사용한다.
2. 변수의 유효 범위(Scope)는 최대한 좁게 만들어 변수의 부작용을 억제한다.
3. 전역 변수는 최대한 사용하지 않는다.
4. 상수를 사용하여 값의 변경을 억제한다.
5. 변수의 목적이나 의미를 파악할 수 있도록 네이밍하는 습관을 기른다.
컴퓨터가 이해하는 코드는 어떤 바보도 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다.
-- Martin Fowler
Reference
JavaScript data types and data structures - JavaScript | MDN