모던 자바스크립트 Deep Dive (6장 데이터 타입)

Jung Hong·2022년 12월 13일
0

모던 자바스크립트 6장, 데이터 타입을 공부하며, 더 세부적으로 조사한것과 중요한 내용을 정리해 보았다. 기본적인 내용은 배제하였다.

null, undefined 의 차이점?

1) undefined: 값이 할당되지 않은 변수 혹은 속성을 참조할 때 undefined
2) null: '없음'을 나타내기 위해 사용(의도적 부재를 나타낼 때 사용)
-> 개발자 입장에서 명시적으로 부재를 나타내고 싶을 때 사용한다. undefined와의 구분을 해줄 필요가 있다.
(변수에 null 을 할당 -> 참조를 명시적으로 제거하는 것 -> JS엔진에 의해 해당 변수의 메모리 공간에 가비지 콜렉션을 수행)

  • null은 메모리 자체가 할당되지 않았음을 의미
  • undefined는 메모리는 할당 되었지만, 값이 할당되지 않았음 (변수 선언 단계)

심벌(Symbol) 타입의 실제 사용 예시?

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

  • Symbol 값은 Symbol 함수를 이용해서 만든다
  • Symbol 값은 JavaScript 런타임 환경에서 Symbol 함수에 의해 동적으로 생성되며, 다른 값과 중복되지 않는 고유한 값이다.
  • Symbol 값은 외부로 노출되지 않는다.
const key = Symbol('SYMBOL_DESCRIPTION'); // Symbol 함수에는 생성된 Symbol에 대한 설명을 넣을 수 있음(디버깅 용도)
key.description; //'SYMBOL_DESCRIPTION'
key.toString(); // "Symbol('SYMBOL_DESCRIPTION')"
!key // true
key + 'test' // Uncaught Error
  • description, toString 은 Symbol.prototype의 프로퍼티
  • 객체의 프로퍼티로 사용할 수 있음 -> Symbol 값은 유일한 값이므로, 객체의 어떤 키값과도 충돌하지 않는다
const obj = {};
const symKey = Symbol('description');
obj.symKey = '12345';

  • Symbol함수 객체의 값을 브라우저 콘솔에서 찍어보면, 여러가지 프로퍼티와 메소드를 가지고 있음을 확인할 수 있다.

데이터 타입의 필요성?

  • 데이터 타입에 의한 메모리 공간 확보, 즉 데이터 타입에 따라 데이터를 저장하기 위해 확보해야 하는 공간(n바이트)의 크기가 달라진다.
  • 문자열/숫자 타입을 제외하고는 데이터 타입에 따라 확보되는 메모리 공간의 크기가 자바스크립트 엔진 제조사에 따라 다르다.
  • 숫자타입: 실제로는 배정밀도 64비트 부동소수점 형식으로 저장
    (단정밀도: 32비트 --> 상대적으로 부정확)
    (부동소수점: 소수점이 고정되어 있지 않음, 고정소수점: 소수점이 고정)
  • 변수명은 변수값이 저장되어 있는 공간의 시작 주소
    (C언어에서 배열명은 배열의 시작주소...)
  • 한번에 읽어들여야 할 메모리 셀의 크기는? 해당 변수에 저장된 값의 타입을 확인 (by 자바스크립트 엔진)

<참고.https://hbsowo58.tistory.com/460>

데이터 타입이 필요한 이유?

1) 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
2) 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
3) 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

동적 타입 언어 Vs. 정적 타입 언어

  • 동적타입언어: 변수 선언이 아닌 할당에 의해서 타입이 결정(타입 추론), 재할당에 의해서 타입이 바뀔 수 있음(JavaScript, Python, Ruby, PHP...)
    : 변수는 타입이 없다. 변수의 타입은 값에 의해 결정된다

  • 정적타입언어: 변수를 선언할 때, 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언(C, C++, Kotlin, Go, ...)
    : 정적 타입 언어는 컴파일 시점에 타입을 체크한다

타입스크립트의 등장 배경...

  • 동적타입언어는 유연성은 높지만 신뢰성이 떨어진다. 이를 극복하기 위해 타입스크립트를 사용.

참조

0개의 댓글