개발 여정/JavaScript

[JavaScript] 기본형 데이터 할당 시 메모리 구조

calm-lee 2022. 10. 20. 18:28

 

 

 

변수

: 변경 가능한 데이터가 담길 수 있는 공간

 

식별자

: 변수의 이름

 

 

변수에 기본형(Primitive) 데이터 할당할 경우

let a; // 변수 선언, 식별자 a 지정
a = 'abc'; // 변수 a에 기본형 String 데이터 할당

 

  1. 변수 영역에서 빈 공간(@1003) 확보
  2. @1003에서 데이터 이름(식별자)를 a로 지정
  3. 데이터 영역에서 빈 공간(@5003)에 문자열 'abc' 저장
  4. 변수 영역에서 식별자 a 검색해서 @1003으로 이동
  5. 변수 영역 @1003에 데이터 영역 주소 @5003 저장

 

 

변수 영역에 값을 직접 대입하지 않고 굳이 데이터 영역을 추가하는 이유

 

기본형(Primitive) 데이터에서 숫자형 데이터는 64bit(8byte)로 공간 값이 정해져 있지만, 문자열은 공간값이 특별히 정해지지 않았음. 언어에 따라서도 필요한 Byte가 다르고, 글자수 역시 가변적이기 때문에 필요한 메모리 공간이 항상 다름.

 

 만약 문자열 데이터를 변수 영역에 저장한다면, 문자열 변환을 할 때 문제가 생김. 문자열을 늘린다면 메모리 공간 역시 늘려야 함. 그러면 데이터가 메모리 영역의 중간에 있을 경우, 그 뒤에 저장되어 있는 데이터들을 전부 뒤로 옮기고 식별자도 다시 연결해야 하는 수고가 듦.

 

 하지만 변수와 데이터 영역을 나눌 경우, 변수 영역에는 변환된 데이터 영역 주소만 연결하면 되기 때문에 편리함.

 

예시) a의 값 'abc'에 'def'를 추가할 경우

 

 

변수 a에 'abc'에 'def'를 추가하면 컴퓨터는 기존의 @5003에 'abcdef'를 할당하는 게 아니라, 데이터 영역의 새로운 공간@5004에 'abcdef' 문자열을 새로 만들어 저장함. 그리고 변경된 주소 @5004를 변수영역 @1003에 대입함.

 

이렇게 데이터 영역을 분리하면, 변수영역에서 처리하는 연산의 수가 줄어들기 때문에 메모리를 효율적으로 사용할 수 있음.

 

 

 

 

참조

코어 자바스크립트 (정재남 저)