데이터 불변성(Immutable)
데이터는 크게 두가지로 나눌 수 있다.
원시 데이터: String, Number, Boolean, undefined, null
자바스크립트에서 사용할 수 있는 원래 데이터
참조형 데이터: Object, Array, Function
(자바스크립트에서는 함수도 데이터이다.그래서 함수를 함수의 인수로 집어넣을 수 있다.)
자바 스크립트에서 변수에 데이터를 할당하는 법
1, 4, 7 등의 숫자데이터는 나올 때마다 이를 메모리에 등록해놓고 변수가 이들의 메모리 주소를 가리키게 한다.
(이는 자바의 리터럴 방식으로 선언한 문자열과 같은 방식이다.)
이 때 let c = 1로 1을 한번 더 변수에 할당해도 메모리의 새로운 칸에 1이 새로 할당되지 앟고 기존에 할당한 메모리의 1을 그대로 쓴다.
이를 데이터의 불변성이라고 한다.
let c = 1로 데이터가 한번 할당되면 c += 4를 했을 때 1이 할당된 메모리에 5가 덮어써지는 것이 아니라 5가 다른 메모리에 할당되고 c가 다른 메모리 주소를 가리킨다는 것이다.
이는 원시 데이터만 그렇고 참조형 데이터는 가변성이 없다.
ex.
let a = {k: 1}
let b = {k: 1}
console.log(a === b)
a.k = 7
b = a // a의 레퍼런스를 b에 할당해버림
console.log(a === b)
let c = b
console.log(a === c)
이 때 a, b, c의 레퍼런스가 모두 같으므로 셋 중 하나의 데이터만 바꿔도 셋 모두 데이터가 바뀌게 된다.
모두 같은 메모리 주소를 가리키고 있기 때문이다.
이러한 상황을 의도적으로 제어하기 위해 우리는 얕은 복사와 깊은 복사에 대해 알아야 한다.