[TIL] 카테고리/JavaScript
[코어자바스크립트] 기본형 데이터와 참조형 데이터 / 참조형 데이터의 메모리 할당 방식
티레이니
2022. 6. 15. 16:39
1-4-1 불변값
- 변수(variable)와 상수(constant)를 구분하는 성질은 변경 가능성이다. (바꿀수 있으면 변수, 없으면 상수)
- 이 때, 변경 가능성의 대상은 변수영역 메모리이다. (즉, 데이터의 주소값이 저장되는 부분이다.)
한번 데이터 할당이 이뤄진 변수공간에 다른 데이터를 재할당 할수 있다면 변수이다. - 기본형 데이터인 숫자, 문자열, 불리언, null, undefined는 모두 불변값이다.
한번 데이터 영역의 어떤 주소에 값이 만들어지면, 그 값은 (가비지 컬렉팅을 당하지 않는 한)절대 변경되지 않는다.
만약 변수에서 데이터 변경이 일어난다면, 데이터 영역에 새로운 공간을 만들어 다시 연결한다.
1-4-2 가변값
- 참조형 데이터에는 객체의 변수(프로퍼티) 영역이 별도로 존재한다.
데이터 영역에 저장된 값은 모두 불변값이지만 변수에는 얼마든지 다른 값을 대입할 수 있다
(객체의 변수영역의 값을 바꿀 수 있다) 그래서 흔히 참조형 데이터는 가변값이라고 한다. - 참조형 데이터를 변수에 할당하는 과정은 :
- 만약 참조형 데이터의 변수 (프로퍼티) a의 값이 2로 변경된다면 :
- 만약 참조형 데이터가 중첩되어 있다면 (참조형 데이터의 프로퍼티의 값이 참조형 데이터라면)
해당 프로퍼티의 값에는 다시 변수 영역을 확보해 그 주소를 담아둔다. (그냥 층층히 이어질 뿐 큰 차이 없다..)
중첩된 참조형 데이터의 프로퍼티에 값이 재할당 되는 경우 아래와 같이 된다.
- 가비지 컬렉팅 :
참조 카운트 (자신의 주소를 참조하는 변수의 갯수) 가 0인 메모리 주소는 가비지 컬렉팅의 대상이 된다.
가비지컬렉터(GC)는 런타임 환경에 따라 특정 시점 또는 메모리 사용량이 포화상태에 임박할 때마다
자동으로 수거 대상들을 수거(collecting)하여 새로운 값을 할당할 수 있는 빈 공간으로 만들어준다.