불변성

honeyricecake·2022년 8월 3일
0

자바스크립트

목록 보기
14/20

데이터 불변성(Immutable)

데이터는 크게 두가지로 나눌 수 있다.

  1. 원시 데이터: String, Number, Boolean, undefined, null
    자바스크립트에서 사용할 수 있는 원래 데이터

  2. 참조형 데이터: 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의 레퍼런스가 모두 같으므로 셋 중 하나의 데이터만 바꿔도 셋 모두 데이터가 바뀌게 된다.

모두 같은 메모리 주소를 가리키고 있기 때문이다.

이러한 상황을 의도적으로 제어하기 위해 우리는 얕은 복사와 깊은 복사에 대해 알아야 한다.

0개의 댓글