-
[코어자바스크립트] 데이터는 어떻게 저장될까? 변수 선언과 데이터 할당[TIL] 카테고리/JavaScript 2022. 6. 15. 11:06
1-1 데이터 타입의 종류
1-2-1 메모리와 데이터
- 1비트 : 메모리의 가장 작은 조각. 0 또는 1. 각 비트는 고유한 식별자로 위치를 확인 할 수 있다.
- 1byte = 8비트 : 컴퓨터에서 사용하는 데이터의 기본 단위. 28 = 256개의 값을 표현 가능.
바이트 단위의 식별자 ( = 메모리 주솟값, memory address)를 통해 서로 구분하고 연결할 수 있다. - 왜 8비트씩 묶게 되었을까?
1) 비트는 너무 작다! 비트 단위로 쪼개진 데이터를 검색해서 위치를 확인하는 것은 비효율적이다.
2) 비트를 묶어줌으로 인해 메모리 검색 시간을 줄일 수 있고, 표현할 수 있는 데이터의 개수도 늘릴 수 있다.
3) 그러나 너무 큰 단위로 묶게 되면, 불필요하게 남는 빈 공간 (= 낭비되는 비트)가 생겨나게 된다
4) 그러니 적당한 크기로 묶은것이 1byte! - 자바스크립트만의 특징 ?
데이터 타입별로 할당할 메모리 영역을 정해 둔 C/C++, 자바 등의 정적 언어와 대비해,
상대적으로 메모리 관리 압박에서 자유로웠던 자바스크립트는 메모리 공간을 조금 더 넉넉히 할당했다.
예를 들면, 숫자형의 경우 정수형인지 부동소수형인지 구분 없이 64비트를 할당한다.
1-2-2 식별자와 변수
- 변수 (variable) : 변할 수 있는 데이터
- 식별자(identifier) : 데이터를 식별하는데 사용하는 이름 (a.k.a. 변수명)
1-3 변수 선언과 데이터 할당 (동작원리)
- let a = 'abc' 라고 했을 때, 데이터가 할당되는 방식은
1) 변수(변할 수 있는 데이터) 를 만든다. 메모리의 비어있는 공간을 확보한다. 여기서는 1003번(예시)이다.
2) 변수의 식별자는 a 로 한다 (이제 a라는 이름으로 이 변수를 찾을 수 있다) // 여기까지가 변수 선언
3) 데이터 영역의 빈 공간 (여기서는 @5004)에 문자열 'abc'를 저장한다.
4) a 라는 식별자를 가진 데이터 영역을 검색해 찾는다. (@1003 찾기)
5) a에 앞서 저장한 문자열의 주소(@5004)를 값으로 저장한다 (=대입한다).
- 왜 값을 직접 변수의 주소에 저장하지 않고, 데이터를 별도 위치에 할당해 주소를 대입해주는 단계를 거치는가 ?
데이터에 따라 필요한 메모리 용량이 가변적이기 때문이다.
= 데이터 변환을 자유롭게 함과 동시에 메모리를 효율적으로 관리하기 위함. - 서로 같은 데이터를 가진 변수들은? 무조건 다 같은 주소를 저장하게 된다. 메모리 용량이 줄어드는 효과!
- 변수의 값을 변경하는 경우 어떤 변환이든 무조건 새로 공간을 만들어 저장하고 그 주소를 변수공간에 연결한다.
- 기존 데이터는 자신의 주소를 값으로 가지는 변수가 하나도 없게 되면 가비지 컬렉터의 수거대상이 된다.
'[TIL] 카테고리 > JavaScript' 카테고리의 다른 글
[코어자바스크립트] 기본형 데이터와 참조형 데이터 / 참조형 데이터의 메모리 할당 방식 (0) 2022.06.15