모던 자바스크립트 Deep Dive - 11장

박상은·2021년 9월 29일
0

요약

1. 원시타입과 객체타입

자바스크립트의 자료형은 크게 원시타입과 객체타입으로 나눠져있다.
여기서 원시타입은 변경 불가능한 값이고, 객체타입은 변경 가능한 값이다.

여기서 중요한것은 원시타입이 변경 불가능한 값이라는 것이다.
즉, 변수는 변경가능하고, 변수안에 들어간 값이 변경불가능하다는 것을 의미한다.

이게 무슨의미인지 예시를 들어보겠다.

let v = 10;
let person = { name: "john" };
let tempPerson = person;

// 원시타입변경 ( 사실 메모리주소 교체 )
v = 20;		// 가능

// 객체타입변경
person.name = "anni";	// 가능
tempPerson.name;	// "anni"

위 예시를 보면 둘다 변경이 가능한 것 처럼 보이지만 실제 동작을 살펴보면 다르다는 것을 알 수 있다.

v라는 원시타입변수는 20이라는 값으로 변경할 때 기존에 10이 있던 메모리공간에 값을 변경해서 20을 넣는것이 아닌 10은 그대로 나두고 새로운 공간에 20을 넣고 그 메모리주소를 v에 넣은것이다.
따라서 메모리에는 10과 20이 같이 들어있고 나중에 가비지콜렉터에 의해서 10을 할당해제된다.

person.name은 기존에 메모리 공간에 들어있는 "john"이라는 값을 "anni"로 변경하는 것이다.

이런식으로 동작하는 이유는 원시타입의 경우에는 대부분 일정하게 작은 메모리공간을 갖게되지만, 객체타입의 경우에는 많은 공간을 차지할 수 있으므로 변경할 때 마다 새로운 메모리공간에 변경사항을 적용하게되면 성능적으로 불리하기 때문이다.

마무리

  • 값에 의한 복사: 원시타입을 복사할 때 적용
  • 참조에 의한 복사: 객체타입을 복사할 때 적용

0개의 댓글