06.4. 데이터 타입의 필요성과 동적 타이핑
데이터 타입의 필요성
1) 데이터 타입에 의한 메모리 공간의 확보와 참조
값은 메모리에 저장하고 참조할 수 있어야 한다. 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기를 결정해야 한다. 즉, 몇 바이트의 메모리 공간을 사용해야 낭비와 손실없이 값을 저장하는 지 알아야 한다.
자바스크립트 엔진은 데이터 타입, 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다. 즉, 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.
동적 타이핑
1) 동적 타입 언어와 정적 타입 언어
자바스크립트의 모든 값은 데이터 타입을 갖는다. 그렇다면 변수는 데이터 타입을 가질까? C나 자바 같은 경우 정적타입언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류 즉, 데이터 타입을 사전에 선언해야 한다. 이를 명시적 타입 선언이라 한다.
정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다. 정적 타입 언어는 컴파일 시점에 타입 체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사하는 처리)를 수행한다. 이를 통해 타입의 일관성을 강제하면서 통과되지 못할 경우 에러를 발생시켜 프로그램의 실행을 막는다.
Key Point💡
대표적인 정적 타입 언어 : C, C++, Java, Kotlin, Go, Haskell, Rust, Scala
자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다. 다만, var, let, const 키워드를 사용해 변수를 선언할 뿐이다. 자바스크립트의 변수는 정적 타입 언어와 같이 미리 선언한 데이터 타입의 값만 할당할 수 있는 것이 아니다. 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
변수를 하나 선언하고 데이터 타입의 값을 할당한 다음, typeof
연산자로 변수의 데이터 타입을 조사할 수 있다.
자바스크립트 변수에는 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있으므로 정적 타입 언어에서 말하는 데이터 타입과 개념이 다릅니다. 정적 타입 언어는 변수 선언 시점에 변수의 타입이 결정되고 변수의 타입을 변경할 수 없습니다. 자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경할 수 있습니다.
즉, 자바스크립트의 변수는 선언이 아닌 **할당에 의해 타입이 결정(타입 추론)**되고, 그 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있습니다. 이러한 특징은 동적 타이핑언어 입니다.
Key Point💡
대표적인 동적 타입 언어 : JavaScript, Python, Ruby, PHP, lISP , Peri
2) 동적 타입 언어와 변수
동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있습니다. 이러한 점은 편리하지만, 위험한점도 있습니다. 모든 SW아키텍쳐에는 트레이드오프(trade-off)가 존재합니다. 모든 애플리케이션에 적합한 탄환은 없든 동적 타입 언어 또한 구조적 단점이 있습니다.
변수 값은 언제든지 변경될 수 있기 때문에, 복잡한 프로그램에서는 변화하는 변수 값을 추적하기가 어려울 수 있습니다. 또한 변수의 타입이 고정되어 있지 않고 동적으로 변하는 동적 탕비의 언어의 변수는 값의 변경에 의해 타입도 언제든지 변경될 수 있습니다. 따라서 동적 타입 언어의 변수는 값을 확인하기 전에는 타입을 확신할 수 없습니다.
결국, 동적 타입 언어는 유연성은 높지만 신뢰성이 떨어집니다.
요약
자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경할 수 있습니다.
자바스크립트는 동적 타이핑 언어이다.
자바스크립트는 변수 선언이 아닌, 할다엥 의해 타입이 결정되고 재할당에 의해 타입이 변할 수 있습니다.
Last updated