본문 바로가기

Front-End

[JS] Object 는 call by reference

728x90

함수에서 값을 전달하는 대신 주소값을 전달하는 방식을 call by reference 라고 합니다.

참조를 호출하다 라는 뜻인데요, C언어에서 나온 개념입니다. 

 

주소값을 전달하기 때문에 전달받은 변수를 변경하면 원본 데이터 역시도 변경이 되는거죠.

 

JS에서 객체는 call by reference 입니다. 객체가 아니면 call by value 이구요. call by value 는 값을 호출하다, 라는 뜻을 가지고 있어 원본 데이터의 값을 호출하여 사용합니다. 즉 전달받은 변수를 변경해도 원본 데이터의 값에는 지장이 없는 것이죠. 쉽게 말해 복사한다고 합니다.

 

예를 들어볼게요.

var a = 1;
var b = a;
b = 3;
console.log("a :" + a + " b : " +b);

결과는 a : 1 b : 3 입니다

객체가 아니기 때문에 call by value, 즉 주소값이 아닌 값을 호출받아 원본의 데이터는 변경이 없는것이죠.

 

반면 변수에 객체를 담은 뒤 새로운 변수에 해당 변수를 할당하고 새로운 변수(객체) 값을 변경해봅시다.

var person = {'name': 'shinsieon'};
var new_person = person;
new_person['name'] = 'sieonShion';

console.log(new_person);
console.log(person);

결과는 {name " : 'sieonShin'} 으로 둘이 같습니다. 

 

이 개념을 알고 코딩하면 조금 더 유동적으로 그리고 스마트하게 개발할 수 있습니다.

 

자세한 개념을 설명하는 글보단 혼자 끄적이는 글에 가까우니.. 

 

참고만 해주세요