const a = {
name: '김철수',
};
const b = a;
a.name = 'hero';
console.log(b.name); // hero
변수 b
에 a
를 대입합니다. a
변수의 name
속성 값을 변경했는데, b
변수도 같이 변경됐습니다. 객체를 저장한 변수를 다른 변수에 대입하면 두 변수 모두 같은 객체를 저장하는 셈이 됩니다. a
와 b
변수 모두 같은 객체를 저장하고 있는 것이므로 객체의 속성 값을 바꾸면 변수 a
와 b
모두 바뀌는 것처럼 보입니다. 이러한 상황일 때 변수 a
와 b
가 같은 객체를 참조 하고 있다고 표현합니다. 또는 a
와 b
그리고 객체 간에 참조 관계가 있다 고 표현합니다.
let a = '김철수';
let b = a;
a = 'hero';
console.log(b); // '김철수'
다만 객체가 아닌 값(문자열, 숫자, 불 값, null, undefined) 의 경우는 조금 다릅니다. 값은 메모리가 아닌 다른 공간(?)에 저장된다고 보면 됩니다.
이전 예제와 같이 변수 b
에 a
를 대입했습니다. 하지만 a
를 바꿨는데도 b
는 영향을 받지 않습니다. 객체가 아닌 값을 변수에 저장한 경우에는 참조 관계가 생기지 않기 때문입니다. 이렇게 참조가 생기지 않는 상황을 복사(copy)
라고 부릅니다. 객체를 변수에 담으면 참조 관계가 생긱다는 것을 기억하세요!