불변값과 상수, 불변값과 가변값의 차이

ding·2024년 7월 2일

불변값 VS 상수

불변값 : 데이터 영역 메모리에서 변경되지 않는 값. 모든 기본형 데이터는 값이 변경될 때 새로 메모리를 확보하기 때문에 불변값이다.
상수 : 변수 영역 메모리에서 값(참조하는 주소값)이 변경할 수 없다.

불변값 VS 가변값

모든 기본형 데이터는 불변값이다. 참조형 데이터는 어떨까? 아래 obj1를 예시로 보자.

obj1 = {
	a: 5,
    b: '사랑'
}

obj1의 데이터를 재할당했을 때

obj1 = {
	a: 5,
    b: '사랑'
}

obj1.a = 1

객체를 재할당하면 데이터 영역의 데이터는 바뀌지 않고 새로운 주소를 확보하기 때문에, 변수 영역의 값(참조하는 주소)이 바뀌게 된다.

참조형 데이터가 중첩되어있을 때의 메모리 상황

obj = {
  x: 3,
  arr: [3, 4, 5]
}

조금 더 복잡해지지만 실제 데이터는 데이터 영역에 저장되고, 변수 영역에서는 데이터 영역의 주소를 참조하는 것은 변하지 않는다!

데이터 영역의 값은 불변값이다. 그러다보니 더 이상 참조하지 않는 데이터 영역의 주소가 생기기 마련이다. 이 상태를 '참조 카운트'가 0이라고 표현하는데, 이럴 때 이런 주소들은 가비지 컬렉터의 수거 대상이 되고 특정 시점에 처분된다. 이를 가비지 컬렉팅이라고 한다.

다음 포스트에서는 이런 중첩된 참조형 데이터의 복사에 대해 다루겠다.

0개의 댓글