data life

📖 modern javascript Deep Dive 6장 본문

카테고리 없음

📖 modern javascript Deep Dive 6장

주술회전목마 2022. 11. 14. 23:10


 

데이터 타입

원시 타입

number
string
boolean
undefined
null
symbol

 

객체 타입

객체 함수 배열 등

 

원시 타입

1 . 숫자 타입

var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수

C나 JAVA의 경우, 정수와 실수를 구분하여 int, long, float, double과 같이 다양한 숫자 타입을 제공하는 반면 자바스크립트는 하나의 숫자 타입만 존재한다.

정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64bit 부동소수점 형식의 2진수로 저장되는데

자바스크립트는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문이다.

이 값을 참조하면 모두 10진수로 해석된다.

var binary = 0b0100001; // 2진수
var octal = 0o101;      // 8진수
var hex = 0x41;         // 16진수

console.log(binary);    // 65
console.log(octal);    // 65
console.log(hex);      // 65

자바스크립트는 모든 숫자 타입을 실수 처리한다.

console.log(1 === 1.0) // true
console.log(3 / 2 )    // 1.5

또한 3가지 특별한 값도 표현이 가능하다.

console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(11 * 'String'); // NaN

자바스크립트는 대소문자도 구별한다.

❗️NaN 표기 주의

 

2 . 문자열 타입

var String;

String = '문자열'; // 작은따옴표
String = "문자열"; // 큰따옴표
String = `문자열`; // 백틱(ES6)

 

3. 템플릿 리터럴

  • 멀티라인 문자열
  • 표현식 삽입
  • 태그드 템플릿
var template = `Template literal`;
console.log(template);   // Template literal

 

4. 불리언 타입

논리적 참 / 거짓

var foo = true;
console.log(foo);  //true

var foo = false;
console.log(foo);  //false

 

5. undefined 타입

자바스크립트 엔진이 변수를 초기화할 때 사용하는 값

 

6. null 타입

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

함수가 유효한 값을 반환할 수 없을 경우에도 명시적으로 null이 사용됨

 

7. 심벌 타입

변경 불가능한 원시 타입의 값

다른 값과 중복되지 않는 유일무이한 값으로 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.

// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key);  //symbol

//객체 생성
var obj={};

obj[key] = 'value';
console.log(obj[key]); // value

 

객체 타입

자바스크립트는 객체 기반의 언어이다.

데이터 타입의 필요성

1️⃣ 값을 저장하기 위해 확보해야 하는 메모리 공간의 크기를 결정하기 위해

2️⃣ 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해

3️⃣ 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

 

동적 타이핑

자바스크립트의 모든 값은 데이터 타입을 갖는다.

변수는 데이터 타입을 갖는지 에 대해 알아보자!

 

정적 타입 언어

>> 변수를 선언할 때 변수에 할당할 수 있는 값의 종류(데이터 타입)를 미리 선언해야 한다.

>> 다른 말로 명시적 타입 선언이라고도 한다.

>> 변수 타입의 변경 불가능❌ -> 변수에 선언한 타입에 맞는 값만 할당할 수 있다.

>> 컴파일 시점에 타입 체크를 수행

  if 타입 체크를 통과하지 못했다면 return error로 프로그램의 실행을 막는다.

>> 따라서, 타입의 일관성을 강제하여 더욱 안정적인 코드 구현이 가능하다.

>> 대표적으로 C, C++, JAVA, Kotlin, Go, Haskell, Rust, Scala 등

typeof 연산자로 변수를 연산하면 변수에 할당된 값의 데이터 타입을 반환한다.

 

📍따라서  동적 타이핑이란?

>> 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경이 가능하다.

>> 즉, 변수는 선언이 아닌 할당에 의해 타입이 결정된다. (타입 추론)

>> 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.

>> 이 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기에 어려움이 있어서 변수 값을 확인하기 전까지는 타입을 확신할 수 없다. (유연성⬆️ 신뢰성⬇️)

>> 대표적으로 자바스크립트, 파이썬, PHP, Ruby, 리스프, 펄 등