[js] call by value/ call by reference

최고은·2023년 6월 3일
0

데이터 조작 방식에는 값에 의한 방식과 참조에 의한 방식이 존재한다.

값을 통해 조작 하는 경우 : 기본타입(불리언, 문자열)

참조를 통해 조작하는 경우 : 참조타입(객체-배열, 함수)

둘의 차이 ? 참조 타입은 메모리의 크기가 불분명하기 때문에 메모리를 비효율적으로 많이 사용하는 경우에 속한다.

Call by value(값에 의한 복사 = 깊은 복사)

  • 값이 그대로 복사
  • 원시데이터(숫자, 문자) 의 경우 값의 복사가 일어나고, 함수의 인수에서도 일어난다.
  • 복사한 값을 얻었을 때, 두 변수의 값이 완전히 독립성을 갖는다.
  • = 값을 복사하고 변경했을 때, 다른 값에 전혀 영향을 주지 않는다.
  • = 강하게 독립적이다 = 깊은 복사 = 뿌리까지 통째로 다 뽑아갔다 !
let value1 = 100; 
const value2 = value1;
// value2는 value1의 100의 값을 갖게 되고, 이 둘은 각각 별개의 독립성을 가진다.

value1 = 200; 
// 원시데이터의 복사는 깊은 복사, 독립성을 가지기 때문에, 
// value1의 값이 바뀌어도 value2의 값이 변하지 않는다. 

console.log(value1, value2) // 100, 200

Call by Reference(주소에 의한 복사)

  • 데이터가 있는 공간(주소 : 메모리의 위치)이 참조되는 것을 말함
  • 객체에서 일어난다.
  • 객체에 변수를 저장하면, 실제 값을 저장하는게 아니라, 객체를 메모리 어딘가에 만들고 객체의 위치(주소)값을 저장하게 된다.
  • 따라서 = 를 이용하여 복사하면, 같은 주소값을 갖는 참조 복사만 가능하다.
const userA= { id:"account", password:"1234" };
const userB= userA;
// user A 와 userB는 같은 메모리에 있는 데이터, 즉 완전히 같은 값을 참조하게 된다.
profile
5년차 프론트엔드 개발자 최고은 입니다!

0개의 댓글