본문 바로가기
개발

[JS] 메모리와 데이터

by _Jun 2022. 1. 10.

컴퓨터는 우리의 명령(코드)에 따라 데이터를 조작하는 동작을 수행합니다. 이때, 조작의 대상인 데이터와 컴퓨터가 수행해야하는 명령어들은 컴퓨터의 메모리(RAM)에 저장됩니다. 코드에서 명령어와 변수에 선언하는 데이터들이 메모리에 저장되고, CPU 프로세서를 통해 명령어와 데이터를 읽어 동작하게됩니다.

 


 

 1. 메모리 

메모리에는 수많은 비트가 저장되고 각각의 비트는 고유한 식별자(unique identifier)를 통해 위치를 확인할 수 있습니다. 비트는 0이나 1의 두 가지 값만 표현할 수 있기 때문에 비트 단위로 데이터를 처리하는 것은 큰 용량의 데이터를 처리하기에는 매우 비효율적입니다. 비트를 여러 개를 하나의 단위로 관리한다면 하나의 단위로 표현할 수 있는 값의 수도 많아지고 처리 시간도 줄일 수 있어 더 효율적일 것입니다.

 

하지만 너무 많은 수의 비트를 모아서 하나의 단위로 사용하는 것에는 또 다른 문제가 있습니다. 낭비되는 비트가 생길 수도 있다는 점입니다. 100개의 비트를 하나의 단위로 사용한다고 가정했을 때, 하나의 단위로 총 2의 100승(2100) 개의 값을 표현할 수 있습니다. 하지만 이 단위로 숫자 10을 표현하고 싶다고 한다면 10은 이진수로 1010(2)로 4개의 비트만 사용하므로, 나머지 94개의 비트는 낭비되게 됩니다.

 

위 두 가지 사항을 고려하여 자주 사용하는 데이터를 제약 없이 표현하면서 낭비되는 비트도 최소화하기 위해 8개의 비트를 하나로 그룹지은 바이트(byte) 단위가 생겼습니다. 

비트와 바이트

 

메모리는 수많은 셀로 이루어져 있는데, 일반적으로 메모리에서 메모리 셀 하나의 크기는 1byte입니다. 비트에서처럼 바이트도 역시 식별자로 위치를 파악할 수 있습니다. 메모리에서는 바이트 단위의 식별자를 메모리 주솟값(memory address)라고 부릅니다. 메모리 주소를 통해서 메모리에 데이터를 저장하고 읽어올 수 있습니다.

 


 

 2. 데이터 

프로그래밍 언어에서 변수를 선언하고 데이터를 할당하는 과정이 메모리에 데이터를 저장하는 과정이라고 할 수 있습니다. 

 

변수 선언

let variable;

 

위와 같이 변수를 선언하는 경우에 메모리에 임의의 공간을 확보하고, 이 공간의 메모리 주소와 변수명을 연결합니다. 변수를 선언만 하는 경우에는 메모리 공간에 아무것도 저장되지 않습니다. 

변수 선언 시 메모리

 

데이터 할당

let variable;
variable = "value";

 

이제 변수에 데이터를 할당합니다. 데이터를 할당할 때는 변수명과 연결된 메모리에 직접 데이터를 저장하지 않습니다. 그 대신에 메모리 공간에서 다시 새로운 공간을 확보하고 그 공간에 데이터 값을 저장합니다. 그리고 데이터 값이 저장된 메모리 주소 값을 변수 선언 시 확보한 메모리에 저장합니다.

데이터 할당 시 메모리

 

데이터 값으로 객체를 저장하는 경우에는 조금 다릅니다.

 

let obj;
obj = {
  a: 10,
  b: "value",
;

 

변수에 객체를 할당하는 과정

  1. 메모리의 빈 공간을 확보하고 메모리 주소와 변수명을 연결시킵니다.(@3)
  2. 저장할 데이터를 위해 새로운 메모리 공간을 확보합니다.(@1000)
  3. 저장하려는 데이터가 객체이므로 객체의 속성을 저장하기 위한 새로운 메모리 공간을 확보(@5001 ~ ?)하고, 그 공간의 주소를 데이터 저장을 위한 메모리(@1000)에 저장합니다.
  4. 메모리에서 객체의 속성값을 검색합니다. 메모리에 속성값이 저장되어 있으면 그 메모리 주소를 @5001 ~ ? 에 저장합니다. 속성값이 메모리에 없으면 새로운 메모리 주소를 저장하고 그 메모리에 속성값을 저장합니다.
    • 속성 a에 대한 속성값 1이 메모리에 저장되어 있는지 검색합니다. 메모리에 1이 없으므로 새로운 메모리 공간에 1을 저장하고 그 주소를 객체 속성을 위한 메모리(@5001 ~ ?)에 저장합니다.
    • 속성 b에 대한 속성값 "value"이 메모리에 저장되어 있는지 검색합니다. @1001에 "value"가 저장되어 있으므로 객체 속성을 위한 메모리(@5001 ~ ?)에 @1001의 주소값을 저장합니다.

 

객체 데이터를 저장하는 경우 메모리

 

 

 

 

References

코어 자바스크립트 - 정재남

'개발' 카테고리의 다른 글

DOM이란  (0) 2022.03.01
[JS] 데이터 타입(Data type) - 복사, 불변성과 가변성  (0) 2022.01.12
[JS] Event Delegation(이벤트 위임)  (0) 2022.01.06
[JS] Event Bubbling과 Capturing  (0) 2022.01.06
[JS] var, let, const와 hoisting  (1) 2021.10.24

댓글