본문 바로가기
자바스크립트(javascript)

기본형 데이터와 참조형 데이터 - 불변성, 가변성

by 지 요니 2023. 4. 13.
  • 데이터 타입의 종류
    더보기
    닫기

    💡 [기본형과 참조형의 구분 기준] => 값의 저장방식, 불변성 여부

    1. 복제의 방식
      1. 기본형 : 값이 담긴 주소값을 바로 복제
      2. 참조형 : 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
    2. 불변성의 여부
      1. 기본형 : 불변성을 띔 => 메모리 관점에서 봐야한다!
      2. 참조형 : 불변성을 띄지 않음
  • 변수 vs 상수
    • 변수: 변수 영역의 메모리 변경 o
    • 상수: 변수 영역의 메모리 변경 x
  • 불변하다 vs 불변하지 않다
    • 불변하다: 데이터 영역 메모리 변경 x
    • 불변하지 않다: 데이터 영역 메모리 변경 o
더보기

예시) 기본형 데이터의 변수할당 및 변경

 

var a = 8;
a=9;
  • 변수영역
       
                 a/@5002 => @5003                                  
  • 데이터 영역
  @5002 @5003  
  8 9  

즉, a = 8 에서 a=9로 변수영역의 메모리를 변경할 수 있다

하지만 @5002에 저장되어있는 8자체를 바꿀 순 없어, 8은 그대로 나두고 9를 새로 할당하게 된다. 

즉, 데이터 영역 메모리를 변경 할 수 없으므로 변수는 불변함을 알 수 있다

 

cf)  @5002의 8처럼 더이상 쓸모 없어진 데이터는 자바스크립트의 가비지셀러터의 수거 대상이 된다.

  • 참조형 데이터(가변성)
    • 참조형 데이터는 기본형 데이터 변수 할당과 달리, 객체의 변수(프로퍼티)영역이 별도로 존재
더보기

예시) 참조형 데이터의 변수 할당 가정 및 변경

var obj1 = {
	a : 1,
    b : 'bbb',
   };
   
// 데이터 변경
obj1.a = 2;
  • 변수 영역
주소 1001 1002 1003 1004
데이터 obj1/@7103      
  • 데이터영역
주소 5001 5002 5003 5004
데이터 1 'bbb' 2  
  • 데이터영역(obj1 별도 공간)
주소 7103 7104 7105 7106
데이터 a/@5001=>@5003 b/@5002    

 데이터 영역에 저장된 값은 불변하지만, obj1을 위한 별도 영역의 데이터 영역은 변경이 가능하다!

따라서, 참조형 데이터는 불변하지 않다(즉, 가변하다)

 

 

댓글