
(이미지 출처 : https://velog.io/@imjkim49/자바스크립트-데이터-타입-정리)
자바스크립트에서 값의 타입은 크게
1. 기본형(Primitive Type)
2. 참조형(Reference Type)으로 구분
기본형과 참조형의 구분 기준은 값의 저장 방식과, 불변성 여부 이다.
1. 복제의 방식
a. 기본형 : 값이 담긴 주소값을 바로 복제
b. 참조형 : 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
2. 불변성의 여부
a. 기본형 : 불변성을 띔
b. 참조형 : 불변성을 띄지 않음
메모리, 데이터
비트
바이트
0과 1만 표현하는 비트를 모두 찾기는 부담
1개 → 2개 → … → 8개(새로운 단위 : byte)

(이미지 출저)(https://namu.wiki/w/%EB%B0%94%EC%9D%B4%ED%8A%B8))]
메모리(memo + ry) : byte 단위로 구성
1. 모든 데이터는 byte 단위의 식별자인 메모리 주소값을 통해서 서로 구분이 됩니다.
만일, 64비트(8바이트) 정수는 메모리에 어떻게 저장할 수 있을까요?
⇒ 64비트를 8개의 바이트로 분할하고, 각 바이트를 메모리에 저장해야 해요. 각 바이트는 8개의 비트를 가므로 64비트 정수는 메모리에서 8개의 연속된 바이트에 저장된답니다.
java, c와 다른 javascript의 메모리 관리 방식(feat. 정수형)
식별자, 변수
/** 선언과 할당을 풀어 쓴 방식 */
var str;
str = 'test!';
/** 선언과 할당을 붙여 쓴 방식 */
var str = 'test!';
| 주소 | … | 1002 | 1003 | 1004 | 1005 | … |
|---|---|---|---|---|---|---|
| 데이터 | ||||||
| 주소 | … | 5002 | 5003 | 5004 | 5005 | … |
| 데이터 |
값을 바로 변수에 대입하지 않는 이유(=무조건 새로 만드는 이유)
자유로운 데이터 변환
메모리의 효율적 관리
2-1.
똑같은 데이터를 여러번 저장해야 한다면?
2-2.
1만개의 변수를 생성해서 모든 변수에 숫자 1을 할당하는 상황을 가정해 봅시다. 모든 변수를 별개로 인식한다고 한다면, 1만개의 변수 공간을 확보해한다.
바로 대입하는 case) 숫자형은 8 바이트 고정이다
a. 1만개 * 8byte = 8만 byte
변수 영역에 별도 저장 case)
a. 변수 영역 : 2바이트 1만개 = ****2만바이트
b. 데이터 영역 : 8바이트 1개 = 8바이트
c. 총 : 2만 8바이트
메모리를 기준으로 다시한번 생각해보는 두 가지 주요 개념
a. 변수 vs 상수
변수 : 변수 영역 메모리를 변경할 수 있음
상수 : 변수 영역 메모리를 변경할 수 없음
b. 불변하다 vs 불변하지 않다.
불변하다 : 데이터 영역 메모리를 변경 할 수 없음
불변하지 않다 : 데이터 영역 메모리를 변경할 수 있음
불변값과 불변성 ( with 기본형 데이터 )
// a라는 변수가 abc에서 abcdef가 되는 과정을 통해 불변성을 유추해자!
// 'abc' 라는 값이 데이터 영역의 @5002라는 주소에 들어갔다고 가정해보자
var a = 'abc'
// 'def'라는 값이 @5002라는 주소에 추가되는 것이 아니다.
// @5003에 별도로 'abcdef'라는 값이 생기고 a라는 변수는 @5002 -> @5003
// 즉, "변수 a는 불변하다." 라고 할 수 있다.
// 이 때, @5002는 더 이상 사용되지 않기 때문에 가비지컬렉터의 수거 대상이 된다.
a = a + 'def'
가변값과 가변성( with 참조형 데이터 )
a. 참조형 데이터 변수 할당 과정
// 참조형 데이터는 별도 저장공간( obj1을 위한 별도 공간)이 필요!!
var obj1 = {
a : 1,
b : 'bbb'
}
| 주소 | 1001 | 1002 | 1003 | 1004 |
|---|---|---|---|---|
| 데이터 | obj1/ | |||
| 주소 | 5001 | 5002 | 5003 | 5004 |
| 데이터 | 1 | 'bbb' |
| 주소 | 7103 | 7104 | 7105 | 7106 |
|---|---|---|---|---|
| 데이터 | a/a5001 | b/5002 |
b. 기본형 데이터의 변수 할당 과정과 차이점 : 객체의 변수(프로퍼티) 영역의 별도 존재 여부
c. 참조형 데이터가 불변하지 않다( 가변하다) 라고 하는 이유
var obj1 = {
a: 1,
b: 'bbb',
};
// 데이터를 변경해보면
obj1.a = 2;
멋집니다.