자바스크립트의 동적 타이핑
동적타이핑
C나 자바 같은 정적타입 언어는 변수를 생성할 때 변수에 할당할 수 있는 값의 종류 즉 데이터 타입을 사전에 선언해야 한다. 이를 명시적 타입 선언 이라고 한다.
정적 타입 언어에서는 변수의 타입을 변경 할 수 없으머 변수에 선언한 타입에 맞는 값만 할당이 가능하다. 컴파일 시점에서 타입 체크를 수행한다. 이때 통과를 하지 못하면 에러가 발생하고 프로그램이 실행 되지 않는다. 이를 통해 타입의 일관성을 강제함으로써 안정적인 코드의 구현으로 실행시 일어나는 에러를 줄일 수 있다.
하지만 자바스크립트는 변수를 선언할때 타입을 명시하지 않는다. 이로 인해 어떠한 값도 변수에 할당이 가능하다. 이러한 특징으로 인해 정적 타입 언어에서의 데이터 타입과 개념이 조금 다르다.
자바스크립트는 값을 할당하는 시점에 변수의 데이터 타입을 동적으로 결정한다. 또한 이 값을 언제든 변경이 가능하다.
즉 자바스크립트에서 변수는 선언이 아닌 할당에 의해 타입이 결정되고 재할당에 의해 변수의 타입은 변경이 언제든지 가능하다고 볼 수 있다. 이러한 특징을 통적 타이핑이라 한다.
동적 타입 언어와 변수
동적 타입 언어에서는 변수에 어떤 데이터 값도 자유롭게 할당이 가능하다. 이는 너무나도 편하고 좋은 기능이다. 하지만 떄로는 위험도 있는 것이 동적 타이핑의 단점이다.
모든 소프트웨어 아키텍쳐에는 트레이드오프가 존재한다. 이러한 문제를 해결할 명확한 해결책은 없듯이 동적 타입 언어 구조 또한 구조적인 단점이 존재한다.
트레이드 오프 두개의 정책이나 목표 중 하나를 달성하려할 때 다른 목표의 달성이 늦어지거나 손실이 생기는 모순적인 상황을 의미한다.
동적 타이핑의 구조적 단점으로는 변수값이 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서 변하는 값을 추적하기 어렵다는 단점 그리고 변수의 타입이 고정되어 있지 않고
동적으로 변하는 언어의 변수는 값의 변경만으로 타입이 변할 수 있다는 단점이 있다. 즉 동적 타입 언어의 변수는 값을 확인하기 전까지 값의 타입을 확신 할 수 없다.
또한 자바스크립트는 개발자의 의도와 상관없이 타입이 엔진에 의해 변하는 상황이 생기기도 한다. 이러한 문제들로 인해 동적 타이핑은 유연성이 높다는 장점을 가지고 신뢰성이 떨어진다는 단점이 존재한다.
이때문에 자바스크립트에서 변수를 사용할 때는 다음과 같은 주의 사항이 필요하다.
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용한다. 값은 언제든지 변경이 가능하므로 오류의 발생 가능성이 존재하며 변수의 개수가 많을수록 오류가 발생하게될 확률이 높아진다. 따라서 무분별한 변수의 사용은 자제하며 필요한 경우에 한해 제한적으로 사용한다.
- 변수의 유효범위를 최대한 좁게 만들어 부작용을 억제한다.
- 전역변수는 최대한 사용하지 않는다. 어디서든 참조가 가능한 변수는 언제든지 의도하지 않은 대로 값이 변경될 가능성이 크고 다른 코드의 영향을 줄 가능성이 있다.
- 변수보다는 상수를 사용하여 값을 억제한다.
- 변수 이름은 변수의 목적이나 의미를 파악하도록 네이밍을 한다.
자바스크립트의 동적 타이핑