[JavaScript] 참조에 의한 객체복사

문규찬·2021년 8월 26일
0
post-thumbnail

객체! 와 원시타입! 의 근본적인 차이 중 하나는 ‘참조에 의해(by reference)’ 저장되고 복사된다는 것입니다.

원시값(문자열, 숫자, 불린 값)은 ‘값 그대로’ 저장·할당되고 복사

let message = "Hello"
let message2 = message

독립된 변수에 각각 문자열 "Hello" 가 저장됩니다.

⭐️ 객체의 동작방식은 다릅니다.
변수엔 객체가 그대로 저장되는 것이 아니라, 객체가 저장되어있는 '메모리 주소’인 객체에 대한 '참조 값’이 저장됩니다.

let user ={
name : "moon"
}

객체는 메모리 어딘가에 저장이 되고 변수 user 엔 객체를 '참조’ 할 수 있는 값이 저장됩니다.

따라서 객체가 할당된 🔴[변수] 를 복사할 땐 🟣[객체의 참조 값] 이 복사되고 객체는 복사되지 않습니다.

let user = { name : "moonkyuchan" }
let moon = user

변수는 두 개이지만 각 변수엔 동일 객체에 대한 참조 값이 저장되죠.

let user = { name: 'John' };
let moon = user;
moon.name = 'Pete'; // 'moon' 참조 값에 의해 변경됨
alert(user.name); // 'Pete'가 출력됨. 'user' 참조 값을 이용해 변경사항을 확인함

객체를 서랍장에 비유하면 변수는 서랍장을 열 수 있는 열쇠라고 할 수 있습니다. 서랍장은 하나, 서랍장을 열 수 있는 열쇠는 두 개인데, 그중 하나(moon)를 사용해 서랍장을 열어 정돈한 후, 또 다른 열쇠로 서랍장을 열면 정돈된 내용을 볼 수 있습니다.

-참조에 의한 비교

두 변수가 같은 객체를 참조하는 예시를 살펴봅시다. 일치·동등 비교 모두에서 참이 반환됩니다.

let a = {};
let b = a; // 참조에 의한 복사

alert( a == b ); // true, 두 변수는 같은 객체를 참조합니다.
alert( a === b ); // true

다른 예시를 살펴봅시다. 두 객체 모두 비어있다는 점에서 같아 보이지만, 독립된 객체이기 때문에 일치·동등 비교하면 거짓이 반환됩니다.

let a = {};
let b = {}; // 독립된 두 객체

alert( a == b ); // false

0개의 댓글