데이터 타입(06)

늘보·2021년 7월 6일
0

Javascript Deep Dive

목록 보기
1/30

숫자 타입

  • C나 Java의 경우 정수, 실수 등을 구분하여 int, float, long, double 등 다양한 숫자 타입을 제공한다.

  • 하지만 JS는 실수 단 하나의 숫자 타입만 존재하며, 정수만 표현하기 위한 데이터 타입이 따로 존재하지 않는다.

console.log(1 === 1.0) // true
  • 또한 JS는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 아래와 같은 값을 참조하면 모두 10진수로 해석된다.

  • 추가적으로 Infinity, -Infinity, NaN값 또한 숫자 타입에 속한다.

console.log(1 * 'String'); // Nan

문자열 타입

  • C는 문자열 타입을 제공하지 않고 배열로 문자열을 표현하고, Java는 문자열을 객체로 표현한다. 그러나 JS의 문자열은 원시(primitive) 타입이며, 변경 불가능한 값이다. 이는 문자열이 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.

undefined 타입

  • undefined 타입의 값은 undefined가 유일하다.
var variable;
  • 위와 같이 var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.
  • 따라서 변수를 참조했을 때 undefined가 반환된다면 선언 이후 값이 할당된 적이 없는 변수라는 것을 확인할 수 있다!

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

  • null을 할당한다. null 타입에 관해서는 이후에 살펴보자.

null 타입

  • null 타입의 값은 null이 유일하다.

  • null은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.

  • 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, JS 엔진은 누구도 참조하지 않는 메모리 공간에 대해 Garbage Collection을 수행할 것이다.


Symbol 타입

  • ES6에 추가된, 변경 불가능한 원시 타입의 값. 다른 값과 중복되지 않는다.
  • 따라서 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다!

데이터 타입의 필요성

  1. 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기를 결정해야 한다. 이 크기를 결정하는 요소가 바로 데이터 타입이다.

  2. 또한 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해 필요하다.


동적 타이핑

  • Java, Typescript 같은 정적 타입 언어는 변수를 '선언'할 때 데이터 타입도 같이 선언해야 한다.

  • 반면 JS는 동적 타입 언어로, 데이터 타입을 선언하지 않으며 재할당에 의해 어떠한 데이터 타입의 값이라도 자유롭게 할당이 가능하다.

  • JS는 값을 선언이 아닌 '할당'하는 시점에 변수의 타입이 동적으로 결정된다.

  • 위의 두 가지 특징을 종합한 것이 '동적 타이핑'이다.

💡 동적 타입 언어는 데이터 타입에 대해 무감각해질 정도로 편리하다!

❓ 그렇다면 요즘 Typescript(정적 언어)가 대세가 되고 있는 이유는 무엇일까? 왜 편리한 동적 타입 언어를 쓰지 않는 것일까?


동적 타입 언어의 단점

  • 변수의 타입이 고정되어 있지 않기 때문에 값의 변경에 의해 타입도 언제든지 변경될 수 있다. 따라서 값을 확인하기 전에는 타입을 확신할 수 없다.

  • 또한 JS는 개발자의 의도와는 상관 없이 타입이 자동으로 변환되기도 한다.

  • 이러한 특징으로 볼 때, 동적 타입 언어는 유연성은 높지만 신뢰성이 떨어진다고 할 수 있다.

정리

Javascript Deep Dive 책을 6강까지 읽었다! 지금까지 책은 읽기만 했지 어디간에 정리를 하지 않았었다. 정리가 되니 확실히 이해한 듯한 느낌 + 어디서든 원할 때 다시 읽을 수 있게 되었다! (그리고 이 책 재밌다..!)

0개의 댓글