참조에 의한 복사, 값에 의한 복사가 무슨 뜻인지 알아보자.
헷갈렸던 개념들을 다시 정리함으로써 모호한 정의를 명확히 정의해보자.
- 객체와 원시 타입의 근본적인 차이 중 하나는 객체는 ‘참조에 의해(by reference)’ 저장되고 복사된다는 것임.
- 원시값(문자열, 숫자, 불린 값)은 ‘값 그대로’ 저장·할당되고 복사됨.
- 예시로 살펴 보자.
🔴 값에 의한 복사
- 두 개의 독립된 변수에 각각 문자열
"Hello!"
가 저장.
let message = "Hello!";
let phrase = message;


🟠 참조에 의한 객체 복사
- 객체의 동작방식은 다르다!
- 변수엔 객체가 그대로 저장되는 것이 아니라, 객체가 저장되어있는 '메모리 주소’인 객체에 대한 '참조 값’이 저장됨.
- 따라서 객체가 할당된 변수를 복사할 땐 객체의 참조 값이 복사되고 객체는 복사되지 않음.
let user = { name: "John" };
let admin = user;


<aside>
💡 비유를 하자면 원시 타입은 개별의 서랍과 열쇠를 관리하는 것이고, 객체 타입은 여러 열쇠로 하나의 서랍을 관리하는 것이라 할 수 있음.
</aside>
🟡 참조에 의한 비교
- 객체 비교 시 동등 연산자
==
와 일치 연산자 ===
는 동일하게 동작함.
- 비교 시 피연산자인 두 객체가 동일한 객체인 경우에 참을 반환함.