참조

복제

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

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?