본문 바로가기
개발 일지/TIL

[ 스파르타 / TIL ] 내일배움캠프 #22

by CODESIGN 2022. 11. 29.

목차


  1. 데이터 타입의 종류
  2. 비트(bit)와 바이트(Byte)
  3. Hoisting(호이스팅)이란?
  4. 변수 영역에는 변수만 저장하고 데이터 영역에는 데이터만 저장하는 이유

 

1. 데이터 타입의 종류


기본형(Primitive Type) 


값이 담긴 주소 값을 바로 복제한다.

ex.Number, String, Boolean, null, undefined, Symbol

 

참조형 (Reference Type)


값이 담긴 주소 값들로 이루어진 묶음을 가리키는 주소 값을 복제한다.

ex. Object - Array, Function, Date, RegExp, Map & WeakMap, Set & WeakSet

(이미지 출처 :  https://velog.io/@imjkim49/자바스크립트-데이터-타입-정리)

 

 

2. 비트(bit)와 바이트(Byte)


컴퓨터가 의사소통을 하기 위해 필요한 언어이다.

 

bit


2진수로써 0 또는 1의 값을 가진다.

 

Byte


  • 1Byte = 8bit
  • 1Byte는 총 256 (2^8) 개로 0부터 255까지의 값을 가질 수 있다.

 

Extra


숫자: 8byte (64bit)

문자: 영어(1byte), 한글 (2byte)



3. Hoisting(호이스팅)이란?


쉽게 말해 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것이다.

ex. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화한다. 

 

🚨 주의


자바스크립트의 모든 선언에는 호이스팅이 일어난다. 하지만 let, const, class를 이용한 선언문에는 호이스팅이 발생하지 않는 것처럼 동작한다. var 키워드로 선언된 변수와는 달리 let 키워드로 선언된 변수를 선언문 이전에 참조하면 참조 에러(ReferenceError)가 발생한다. 그 이유는 let 키워드로 선언된 변수는 스코프의 시작에서 변수의 선언까지 일시적 사각지대(Temporal Dead Zone)에 빠지기 때문이다.

 

// 호이스팅 때문에 선언이 끌어올려져서 오류가 나지 않는다.
console.log(text); // (선언 + 초기화 된 상태)
text = 'Hello!'; // (선언 + 초기화 + 할당 된 상태)
var text;
console.log(text);

 

 

4. 변수 영역에는 변수만 저장하고 데이터 영역에는 데이터만 저장하는 이유


  • 자유로운 데이터 변환
  • 메모리의 효율적 관리

 

예제


아래와 같이 변수 영역에 숫자 5를 800개 저장하려고 할 때, 8byte * 800 = 6400 byte가 필요하다.

  1002 1003 1004
변수 영역 5 5 5
  5002 5003 5004
데이터 영역      

 

 

반면, 데이터 영역에 800개의 5를 저장한 뒤 그 주소를 변수 영역에 저장하면, 2byte * 800 + 8byte(데이터 영역에 저장한 5의 메모리)= 1608 byte.

  1002 1003 1004
변수 영역 5002 5002 5002
  5002 5003 5004
데이터 영역 '5' (8byte)    

 

결론


데이터를 따로 저장하면 메모리가 훨씬 절약된다. 

 

 

댓글