본 글은 ‘모던 자바스크립트 Deep Dive’ 11장, ‘원시 값과 객체의 비교’를 참고하여 작성되었습니다.
const state = '졸림'
const study = {book: '모자딥', member: 4};
const state = '졸림'
우선 '졸림'이라는 문자열 타입의 값을 변수에 할당하는 경우를 보자

state라는 식별자에는 0x000000F2 메모리 주소가 할당되어있고,
그 메모리 주소를 찾아가보면 ‘졸림’ 이라는 문자열 타입의 원시값이 저장되어 있다.
그리고 두번째로는 study라는 변수에 간단한 객체를 할당한 경우를 살펴보자.
const study = {book: '모자딥', member: 4};

study라는 식별자에도 역시 메모리 주소가 할당되어있고,
그 메모리 주소를 찾아가보면 또 다시 다른 메모리를 가리키는 메모리 주소가 저장되어있다.
그러면 이렇게 할당된 값을 다른 곳에서 가져다 쓸 땐 어떤 일이 일어나는지 알아보자
const state = '졸림'
const copyState = state;
copyState: ‘'졸림'이라는 원시값.. 저도 쓸 수 있을까요?’
state: 그냥 복사해서 가져가세요
“값에 의한 전달, call by value”

const study = {book: '모자딥', member: 4};
const copyStudy = study;
copyStudy: ‘{book: '모자딥', member: 4} 이 객체 저도 가져갈 수 있을까요..?’
study: ‘또 만들어드리기는 좀 그렇고.. 원본이 어디있는지 알려드릴게요’
“참조에 의한 전달, call by reference”

(이렇게)

객체를 복사해 전달하는 방식을 차용하지 않은 이유를 두고 책에서는 ‘객체를 복사해서 새로운 변수에 또 할당하는 일이 비용이 많이 드는 일이기 때문’이라고 설명하고 있다. 객체의 프로퍼티로는 또 다시 객체가 할당 될 수도 있고, 그 크기가 고정된것도 아니기 때문에 어떤 객체인지도 모르는 객체를 매번 복사해서 전달하고, 값을 수정하는 일은 메모리 효율 측면에서 매우 좋지 않기 때문이다.