[JS] 원시 값과 객체의 비교

소연·2024년 1월 11일

일러두기

본 글은 ‘모던 자바스크립트 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”


왜 객체는 객체 자체를 변수의 값으로 할당해두지 않을까?


(이렇게)

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

0개의 댓글