[Javascript] 데이터의 메모리 할당

한별·2024년 4월 26일

Javascript

목록 보기
21/25

데이터는 메모리에 어떤 방식으로 저장될까?

데이터 타입

메모리에 할당되는 방식은 변수의 데이터 타입에 따라 나뉜다.
데이터 타입에는 두 가지가 있다. 기본형과 참조형!

  • 기본형에는 우리가 자주 사용하는 number, string, boolean, null, undefined, Symbol이 있고,
  • 참조형Object이다. 이는 함수, 배열, Date, Map, Set 등을 포함한다.

기본형의 할당

var str = 'test!';

  • 변수 영역에 변수 이름 str을 저장한다.
  • 데이터 영역에 'test!'가 존재하지 않으므로 저장한다.
  • 변수 영역에 'test!'의 주소 @5001을 저장한다.

왜 이렇게 저장할까?

그냥 변수 영역에 바로 변수 이름, 데이터를 저장하면 안될까?

(1) 저장하는 값의 크기가 커진다면?

숫자형과 달리 문자열의 크기는 일정하지 않다. (영문: 1byte, 한글: 2byte)

var str = 'test!';
str = 'test!test!test!test!test!test!test!';


넣을 자리가 없어진다..

(2) 똑같은 데이터를 여러번 저장한다면?

var a = 1; var b = 1; var c = 1; var d = 1;
변수로 저장주소로 저장
메모리 낭비 : 1을 4번 저장1을 한 번만 저장하고 4번 참조

가비지 컬렉터

데이터 영역에 쓰지 않는 변수가 저장되면 가비지 컬렉터가 정리해준다!

var hanbyeol = '바보'; // (1)
hanbyeol = '천재'; // (2)
(1)(2)
더 이상 쓰이지 않는 '바보' 데이터는 정리된다

참조형의 할당

참조형 데이터는 별도 저장공간(obj1을 위한 별도 공간)이 필요하다
변수 영역은 그 별도 저장공간의 주소를 담고 있다.

var obj = {
	a: 1,
	b: 'bbb,
};


중첩객체의 할당

var obj = {
	x: 3,
	arr: [3, 4, 5],
}


변수 복사 비교

var a = 10;
var obj1 = { c: 10, d: 'ddd' };

var b = a;
var obj2 = obj1; //참조형

이때, 기본형은 문제 없지만 참조형인 경우, 같은 obj 영역(@7103 - @7104)을 가리킨다.
따라서, obj1만 수정해도 obj2의 내용도 바뀐다.

profile
글 잘 쓰고 싶어요

0개의 댓글