[JavaScript] 데이터 타입

2022-06-24

데이터 타입

자바스크립트의 데이터 타입은 원시타입과 참조타입으로 나눌 수 있다.

1.원시타입

숫자(number)타입, 문자열(stirng)타입, 불리언(boolean)타입, undefined타입, null타입, 심벌(symbol)타입 위 심벌타입의 경우 ES6문법에서 새롭게 추가되었다.

2.참조타입

객체, 함수, 배열 등 원시타입을 제외한 모든 타입

자바스크립트의 경우 문자열 타입과 숫자 타입의 데이터만 메모리 공간의 크기가 지정되어 있고, 이 외에 다른 데이터 타입의 경우 자바스크립트 엔진 제조사에 따라 상이하다. 변수 할당 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다. 즉, 메모리에 값은 저장되고 참조 된다.

undefinednull 타입

원시 타입 중 undefinednull 타입의 차이는 무엇일까? 두 타입 모두 변수의 값이 할당되어 있지 않다는 점은 같지만, 아래와 같은 차이가 있다.

  1. undefined var로 선언한 변수는 호이스팅 되어 최상단에 끌어올려 진다. 이때, 호이스팅이 일어나면서 변수 값이 초기화 된다. 이때 변수를 참고하게 되면 undefined가 출력된다. 또한 변수를 선언한 후 할당되지 않은 변수를 참조하게 될 경우에도 undefined가 반환된다.

그렇다면, 변수에 값이 없다는 것을 명시하고 싶을때는 어떻게 할까?

  1. null 그 경우에는 명시적으로 변수에 null 값을 개발자가 할당하면 된다. 즉 undefined의 경우 아직 정의되지 않은, 즉 할당하지 않은 변수를 의미하고 null은 의도적으로 변수 값이 없다는 것을 명시, 할당된다는 것에 차이가 있다.

위처럼 자바스크립트의 모든 값은 타입을 갖는다고 할 수 있다. 그렇다면, 변수는 타입을 가질까?

동적 타입의 언어

결론부터 말하자면 변수의 경우 할당되는 값에 따라 타입이 결정된다고 할 수 있다. 자바스크립트의 경우 var, let, const로 변수가 선언되고 값이 할당되는데, 변수를 선언할때 변수의 타입을 선언하지 않고 값을 할당하는 시점에 변수의 타입이 자유롭게 결졍되고 또 varlet으로 선언된 변수의 경우 재할당으로 언제든지 자유롭게 변수의 타입을 변경할 수도 있다. 이를 동적 타입 언어라고 하며, 자바스크립트는 동적 타입의 연어로 유연성은 높지만 신뢰성은 정적 타입의 언어(C, C++, Java 등) 에 비해 떨어지는 언어이다.

References

자바스크립트 DeepDive