[코어 자바스크립트] Primitive Type vs. Reference Type

소이뎁·2023년 7월 6일
2
post-thumbnail

🌈 인프런의 코어 자바스크립트(정재남) 수강 후, 이해한 내용을 정리한 글입니다.

자바스크립트의 데이터 타입은 크게 2가지로 구분된다

Primitive TypeReference 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은 복사 후 속성/요솟값을 재할당해도 주솟값이 동일하다. 그러므로 복사본의 속성/요솟값을 변경하면 같은 주솟값을 바라보고 있는 원본의 해당 속성/요솟값도 함께 변한다.

3줄 요약

  • 자바스크립트 데이터 타입에는 Primitive TypeReference Type이 있다.
  • Primitive type을 복사 후 복사본의 값을 변경하면, 복사본은 주솟값이 바뀌면서 원본과 다른 객체를 바라보는 원본과 분리된 값이 된다.
  • Reference type을 복사 후 복사본의 속성/요솟값을 변경해도, 복사본의 주솟값은 변경되지 않으므로 결국 원본과 동일한 객체를 참조하여 원본과 연결된 값이 된다.

0개의 댓글