[Javascript] 객체지향 : 참조 / 복제

SJ·2022년 8월 16일
0

Javascript

목록 보기
13/13

복제

var a = 1;
var b = a;
b = 2;
console.log(a); // 1

값을 변경한 것은 변수 b이기 때문에 변수 a에 담겨있는 값은 그대로이다. 변수 b의 값에 변수 a의 값이 복제된 것이다.
a의 값이 원시데이터 타입일 땐 이처럼 복제된다.


참조

var a = {'id':1};
var b = a;
b.id = 2;
console.log(a.id);  // 2

변수 b에 담긴 객체의 id 값을 2로 변경했을 뿐인데 a.id의 값도 2가 되었다. 이는 변수 b와 변수 a에 담긴 객체가 서로 같다는 것을 의미한다. 이것을 참조라고 한다.

비유하자면 복제는 파일을 복사하는 것이고 참조는 심볼릭 링크(symbolic link) 혹은 바로가기(윈도우)를 만드는 것과 비슷하다. 원본이 수정되면 심볼릭 링크에도 그 내용이 실시간으로 반영된다. 참조를 하면 저장 장치의 용량을 절약할 수 있고, 원본 파일을 사용하고 있는 모든 복제본이 동일한 내용을 유지할 수 있게 된다.

var a = {'id' : 1};
var b = a;
b = {'id' : 2};
console.log(a.id) // 1

a의 값이 객체 데이터 타입일 땐 전자와 달리 이처럼 참조된다.

객체를 다른 말로는 참조 데이터 형(참조 자료형)이라고도 부르는데, 원시 데이터형은 복제 되지만 참조 데이터형은 참조된다.

함수와 참조

1. 원시 데이터 타입을 인자로 넘겼을 때

var a = 1;
function func(b){
    b = 2;
}
func(a);
console.log(a); // 1

2. 참조 데이터 타입을 인자로 넘겼을 때

var a = {'id':1};
function func(b){
    b = {'id':2};
}
func(a);
console.log(a.id);  // 1

함수 func의 파라미터 b로 전달된 값은 객체 a이지만(b = a), b를 새로운 객체로 대체하는 것은(b = {'id':2}) b가 가르키는 객체를 새로운 객체로 변경하는 것이기 때문에 객체 a에 영향을 주지 않는다.

var a = {'id':1};
function func(b){
    b.id = 2;
}
func(a);
console.log(a.id);  // 2

함수 func의 파라미터 b로 전달된 값은 객체 a이기에 b는 객체 a의 레퍼런스(참조 값)다. 때문에 b의 변경은 a에도 영향을 미치게 된다.


출처 : 생활코딩 - Javascript

0개의 댓글