자바스크립트 원시타입과 메모리

Dev.Jo·2022년 2월 21일
0

JS

목록 보기
7/7

우리가 (아마) 알고있는 사실

  1. 데이터는 메모리에 저장된다

  2. 메모리는 주소가 있다.

  3. 메모리에 저장된 데이터는 주소(값)을 가진다

  4. 개발자는 변수를 통해 메모리에 저장된 데이터에 접근한다

자바스크립트 두가지 데이터 타입

자바스크립트의 데이터는 두가지로 나뉜다

  1. 원시 값
  2. 참조

데이터 종류에 따라 메모리에 저장되는 방식, 접근하는 방식이 달라진다

원시값과 메모리

let a = 10
  1. 변수 a에 Number 타입 데이터 값 10을 할당한다 (Number은 원시타입)

  2. 데이터 값 10은 메모리에 저장된다

  3. 편의상 저장된 주소를 1번 주소라고 하자

메모리 주소데이터
1번 (변수 a)10
2번
3번
4번

let a = 10
let b = 10
a = 20
  1. 마찬가지로 변수 b를 할당하면 마찬가지로 데이터가 메모리에 저장되고 변수는 메모리 주소를 가진다
  2. a에 데이터 20을 재할당하면 새롭게 메모리 주소를 확보한다
  3. 더이상 사용되지 않는 데이터 값 10의 메모리는 가비지 컬렉터에 의해 제거된다
메모리 주소데이터
1번 (제거될 메모리 주소)10
2번 (변수 b)10
3번 (변수 a)20
4번

불변성

원시 타입 데이터는 불변하다. 다시 말해 값이 바뀌지 않는다.
1번 주소 의 데이터는 불변하기 때문에 1020으로 바뀌지 않는다
불변성을 지키기 위해 새로운 메모리 주소를 확보하고 데이터를 저장한다

메모리 주소데이터
1번 (변수 a)10 ->20
2번 (변수 b)10
3번
4번

let a = 10
let b = 10
a = 20
let c = a

만약 변수에 값을 할당할 때 다른 변수를 할당하면 어떻게 될까?
이를 복사라고 한다

  1. 원시 값을 복사하면 복사되는 데이터가 새로운 메모리에 할당된다
  2. 복사되는 변수는 새롭게 할당된 메모리의 주소를 가진다
  3. 즉, 변수 a와 변수 c는 독립적으로 별개의 메모리 주소를 가진다
메모리 주소데이터
1번
2번 (변수 b)10
3번 (변수 a)20
4번 (변수 c)20

정리

  1. 자바스크립트 원시타입 데이터는 불변성을 지킨다
  2. 원시타입 데이터가 복사되는 경우 새로운 메모리에 데이터가 저장된다
profile
소프트웨어 엔지니어, 프론트엔드 개발자

0개의 댓글