Javascript의 모든 값은 데이터 타입을 갖는다. 그렇다면 변수는 데이터 타입을 갖는가?
"컴퓨터가 이해하는 코드는 어떤 바보도 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다."
-마틴 파울러, <리팩토링>의 저자
C언어나 Java같은 정적 타입(static/strong type) 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 한다. 이를 명시적 타입 선언이라 한다.
// C 변수에는 1바이트 정수 타입의 값(-128 ~ 127)만 할당할 수 있다.
char c;
// num 변수에는 4바이트 정수 타입의 값 (-2,124,483,648 ~ 2,124,483,647)만 할당할 수 있다.
int num;
동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있다. 이러한 동적 타입 언어의 특징은 데이터 타입에 대해 무감각해질 정도로 편리하다는 것이다. 하지만 언제나 그렇듯 편이함의 이면에는 위험이 도사리고 있다.
모든 소프트웨어 아키텍처에는 'Trade-Off'가 존재하며, 모든 애플리케이션에 적합한 'Silver-Bullet'은 동적 타입 언어 또한 구조적인 단점이 있다.
변수는 꼭 필요한 경우에 한해 제한적으로 사용
: 변수 값은 재할당에 의해 언제든지 변경될 수 있다. 자바스크립트는 타입을 잘못 예측해 오류가 발생할 가능성이 크며, 변수의 개수가 많으면 많을수록 오류 발생 확률이 높아진다.
변수의 유효 범위(스코프)는 최대한 좁게 만든다.
: 변수의 유효 범위가 넓으면 넓을수록 변수로 인해 오류가 발생할 확률이 높아진다.
전역 변수는 최대한 사용하지 않도록 한다.
: 어디서든 참조/변경이 가능한 전역 변수는 의도치 않게 값이 변경될 가능성이 높고 다른 코드에 영향을 줄 가능성도 높다. 우리는 몇 백줄이 넘는 코드를 모두 확인하면서 변수를 사용하기 어렵다. 선언하는 단계에서 이 부분에 대한 경각심이 있는 상태에서 변수를 선언해야한다.
변수보다는 상수를 사용해 값의 변경을 억제한다.
: const 사용
변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
: 변수 이름뿐 아니라 모든 식별자(변수, 함수, 클래스 이름 등)는 존재 이유를 파악할 수 있는 적절한 이름으로 지어야 한다.