지난시간에 우리는 Primitive tyep
에 대해 배웠다. 이번시간에는 Value(값)
과 Reference(참조)
에 대한 차이를 알아보자.
let a = 50;
let b = a;
a = 10;
console.log(b); // 50
여기서 우리는 다른 선택지가 존재하였다.
a = 50 = b
이므로 a = 10
으로 재할당 되었을 때 b
또한 update되어 50
이 되는건 아닐까?
결과를 봐서 알겠지만 아니다. 이유는 Value(값)
이 할당된 변수를 다른 변수에 할당할 때에는 값 자체를 Copy & Paste
하기 때문이다.
let a = 50;
let b = 50; // a = 50의 값을 Copy & Paste
a = 10;
console.log(b); // 50
결과적으로 위와 같다. 이미 값을 Copy & Paste
했기 때문에 a
의 값을 변경한다고 해도 b
의 값은 변하지 않는다.
코드를 먼저 보고 Value
와 무엇이 다른지 생각해보자.
let a = ["kimchi", "soju"];
let b = a;
console.log(b); // ["kimchi", "soju"]
a.push("doenjang");
console.log(b); // ["kimchi", "soju", "doenjang"]
b.push("makgeolli");
console.log(a); // ["kimchi", "soju", "doenjang", "makgeolli"]
이게 Reference
다. Value
와는 다르게 Reference
를 Copy & Paste
한다.
Oject data type
은 한 곳에 많은 양의 데이터를 갖고 있으므로 실질적으로 이를 담기에는 메모리를 너무 많이 차지한다.
그래서 Ref
라는 것을 주고 이 Ref
가 실제의 데이터를 불러올 수 있는 열쇠같은 역할을 한다.
Reference
에는 해당 date들의 address(주소값)가 담겨져 있다.
따라서 다음과 같은 코드는 false
를 출력한다.
console.log([10] === [10]); // false
console.log({a : 10} === {a : 10}); // false
여기서 간단하게 const
에 대한 예시를 보자.
const
는 constant(상수)라는 뜻으로 재할당이 불가능하다.
const a = 50;
const b = a;
a = 10; // Uncaught TypeError: Assignment to constant variable.
하지만 Reference
는 변경이 가능하다.
const a = {
Name : "alpaca",
age : 29
}
const b = a;
console.log(a.age); // 29
a = {
Name : "alpaca",
age : 30
} // Uncaught TypeError: Assignment to constant variable.
b.age = 30;
console.log(a.age); // 30
왜냐하면 변경이 불가능한 것은 변수에 할당된 Ref
이지 참조되는 값들이 아니기 때문이다.
Reference