참조
복제
전자화된 시스템의 가장 중요한 특징은 복제다. 현실의 사물과 다르게 전자화된 시스템 위의 데이터를 복제 하는데는 비용이 거의 들지 않는다. 바로 이러한 특징이 소프트웨어를 기존의 산업과 구분하는 가장 큰 특징일 것이다.
var a = 1;
var b = a;
b = 2;
console.log(a); // 1

참조
그런데 자연의 산물이 아니라 거대한 약속의 집합인 소프트웨어의 세계에서 당연한 것은 없다. 이것이 당연하지 않은 이유는 다음 예제를 통해서 좀 더 분명하게 드러난다.
var a = {'id':1};
var b = a;
b.id = 2;
console.log(a.id); // 2
이 코드의 주인공은 아래와 같다.
b.id = 2;
System.out.println(a.id);

정리하면 변수에 담겨있는 데이터가 원시형이면 그 안에는 실제 데이터가 들어있고, 객체면 변수 안에는 데이터에 대한 참조 방법이 들어있다고 할 수 있다.
함수
원시 데이터 타입을 인자로 넘겼을 때의 동작 모습
var a = 1;
function func(b){
b = 2;
}
func(a);
console.log(a);
// 1
참조 데이터 타입을 인자로 넘겼을 때 동작하는 장면
var a = {'id':1};
function func(b){
b = {'id':2};
}
func(a);
console.log(a.id);
// 1
var a = {'id':1};
function func(b){
b.id = 2;
}
func(a);
console.log(a.id);
/* 2
파라미터 b는 객체 a의 레퍼런스다.
이 값의 속성을 바꾸면 그 속성이 소속된 객체를 대상으로
수정작업을 한 것이 되기 때문에 b의 변경은 a에도 영향을 미치게 된다.
*/
참조
Last updated
Was this helpful?