[JavaScript] 데이터 타입
데이터 타입
자바스크립트의 데이터 타입은 원시타입과 참조타입으로 나눌 수 있다.
1.원시타입
숫자(number)타입, 문자열(stirng)타입, 불리언(boolean)타입, undefined타입, null타입, 심벌(symbol)타입 위 심벌타입의 경우 ES6문법에서 새롭게 추가되었다.
2.참조타입
객체, 함수, 배열 등 원시타입을 제외한 모든 타입
자바스크립트의 경우 문자열 타입과 숫자 타입의 데이터만 메모리 공간의 크기가 지정되어 있고, 이 외에 다른 데이터 타입의 경우 자바스크립트 엔진 제조사에 따라 상이하다. 변수 할당 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다. 즉, 메모리에 값은 저장되고 참조 된다.
undefined
와 null
타입
원시 타입 중 undefined
와 null
타입의 차이는 무엇일까? 두 타입 모두 변수의 값이 할당되어 있지 않다는 점은 같지만, 아래와 같은 차이가 있다.
undefined
var
로 선언한 변수는 호이스팅 되어 최상단에 끌어올려 진다. 이때, 호이스팅이 일어나면서 변수 값이 초기화 된다. 이때 변수를 참고하게 되면undefined
가 출력된다. 또한 변수를 선언한 후 할당되지 않은 변수를 참조하게 될 경우에도undefined
가 반환된다.
그렇다면, 변수에 값이 없다는 것을 명시하고 싶을때는 어떻게 할까?
null
그 경우에는 명시적으로 변수에null
값을 개발자가 할당하면 된다. 즉undefined
의 경우 아직 정의되지 않은, 즉 할당하지 않은 변수를 의미하고null
은 의도적으로 변수 값이 없다는 것을 명시, 할당된다는 것에 차이가 있다.
위처럼 자바스크립트의 모든 값은 타입을 갖는다고 할 수 있다. 그렇다면, 변수는 타입을 가질까?
동적 타입의 언어
결론부터 말하자면 변수의 경우 할당되는 값에 따라 타입이 결정된다고 할 수 있다. 자바스크립트의 경우 var
, let
, const
로 변수가 선언되고 값이 할당되는데, 변수를 선언할때 변수의 타입을 선언하지 않고 값을 할당하는 시점에 변수의 타입이 자유롭게 결졍되고 또 var
와 let
으로 선언된 변수의 경우 재할당으로 언제든지 자유롭게 변수의 타입을 변경할 수도 있다. 이를 동적 타입 언어
라고 하며, 자바스크립트는 동적 타입의 연어로 유연성은 높지만 신뢰성은 정적 타입의 언어(C
, C++
, Java
등) 에 비해 떨어지는 언어이다.
References
자바스크립트 DeepDive