🌈 인프런의
코어 자바스크립트(정재남)
수강 후, 이해한 내용을 정리한 글입니다.
Primitive Type과 Reference Type이다.
📍 자바스크립트 메모리 구조는 stack과 heap으로 나누어져 있지만 단순화를 위해 따로 구분하지 않았습니다.
각 타입의 변수 선언, 할당, 재할당이 흐름을 알아보자.
1) Primitive Type
var a; // 선언
a = 'abc' // 할당
a = 'abcdef' //재할당(파랑)
2) Reference Type
var obj;// 선언
obj = { // 할당
a = 1
b = 'bbb'
}
obj.a = 2 // 재할당(파랑)
재할당 후 주솟값 변화 여부가 다르다. 이것을 이해하면
"복사한 객체의 값을 바꿨는데 원본도 바뀌었어요!!"
라는 문제에 대한 답을 얻을 수 있다. 각 타입의 할당 완료
상태와 재할당 완료
상태를 비교해 보자.
1) Primitive Type
변수 a를 선언, 할당, 재할당했으므로 @1003
의 값의 변화를 보자. 할당 완료 상태의 값은 @5004
, 재할당 완료 상태의 값은 @5005
로 재할당 후 값이 변화했다.
1) Reference Type
변수 obj를 선언, 할당, 재할당했으므로 @1002
의 값의 변화를 보자. 할당 완료 상태의 값과 재할당 완료 상태의 값 모두 @5002
로 동일하다. 값이 변화하지 않았으므로 재할당 완료 후 변화를 표시하는 파란 박스도 @1002
에서 있지 않다.
따라서 Primitive Type은 복사 후 재할당하면 주솟값이 변화한다. 그러므로 원본과 복사본은 다른 주솟값을 바라보고, 복사본을 변경하는 것은 원본에 영향을 끼치지 않는다. 반면, Reference Type은 복사 후 속성/요솟값을 재할당해도 주솟값이 동일하다. 그러므로 복사본의 속성/요솟값을 변경하면 같은 주솟값을 바라보고 있는 원본의 해당 속성/요솟값도 함께 변한다.