[TIL] 카테고리/JavaScript

[코어자바스크립트] 기본형 데이터와 참조형 데이터 / 참조형 데이터의 메모리 할당 방식

티레이니 2022. 6. 15. 16:39

1-4-1 불변값

  • 변수(variable)와 상수(constant)를 구분하는 성질은 변경 가능성이다. (바꿀수 있으면 변수, 없으면 상수)
  • 이 때, 변경 가능성의 대상은 변수영역 메모리이다. (즉, 데이터의 주소값이 저장되는 부분이다.)
    한번 데이터 할당이 이뤄진 변수공간에 다른 데이터를 재할당 할수 있다면 변수이다.

  • 기본형 데이터인 숫자, 문자열, 불리언, null, undefined는 모두 불변값이다. 
    한번 데이터 영역의 어떤 주소에 값이 만들어지면, 그 값은 (가비지 컬렉팅을 당하지 않는 한)절대 변경되지 않는다. 
    만약 변수에서 데이터 변경이 일어난다면, 데이터 영역에 새로운 공간을 만들어 다시 연결한다. 

 

 

1-4-2 가변값

  • 참조형 데이터에는 객체의 변수(프로퍼티) 영역이 별도로 존재한다.
    데이터 영역에 저장된 값은 모두 불변값이지만 변수에는 얼마든지 다른 값을 대입할 수 있다
    (객체의 변수영역의 값을 바꿀 수 있다) 그래서 흔히 참조형 데이터는 가변값이라고 한다. 

  • 참조형 데이터를 변수에 할당하는 과정은 :

 

  • 만약 참조형 데이터의 변수 (프로퍼티) a의 값이 2로 변경된다면 :

 

  • 만약 참조형 데이터가 중첩되어 있다면 (참조형 데이터의 프로퍼티의 값이 참조형 데이터라면)
    해당 프로퍼티의 값에는 다시 변수 영역을 확보해 그 주소를 담아둔다. (그냥 층층히 이어질 뿐 큰 차이 없다..)
    중첩된 참조형 데이터의 프로퍼티에 값이 재할당 되는 경우 아래와 같이 된다. 

 

 

  • 가비지 컬렉팅 :
    참조 카운트 (자신의 주소를 참조하는 변수의 갯수) 가 0인 메모리 주소는 가비지 컬렉팅의 대상이 된다.
    가비지컬렉터(GC)는 런타임 환경에 따라 특정 시점 또는 메모리 사용량이 포화상태에 임박할 때마다
    자동으로 수거 대상들을 수거(collecting)하여 새로운 값을 할당할 수 있는 빈 공간으로 만들어준다.