[JS] 불변성과 가변성

김다빈·2023년 8월 28일
0

자바스크립트

목록 보기
20/36
post-thumbnail

📌 불변성과 가변성

Immutability : 생성된 데이터가 메모리에서 변경되지 않는 성질
Mutability : 생성된 데이터가 메모리에서 변경될 수 있는 성질

자바스크립트의 데이터형 중 원시형은 불변성을, 참조형은 가변성을 가지고 있다.

✅ 불변성 (원시형)

let a = 1
let b = a

b = 2

console.log(b) //2
console.log(a) //1

원시형 데이터는 메모리에서 하나의 주소를 갖고, 변수는 해당 원시형 데이터가 저장된 주소를 가리킨다.

b = a 에서는 b가 a가 가리키는 주소와 같은 곳을 가리키게 되고, b = 2 에서 2라는 값이 저장된 새로운 주소를 가리키게 된다.

즉, 변수 a와 b가 가리키는 주소가 달라진다.

✅ 가변성 (참조형)

let a = { x : 1 }
let b = a

b.x = 2

console.log(b) //{ x : 2 }
console.log(a) //{ x : 2 }

참조형 데이터는 메모리에서 하나의 주소를 갖고, 그 주소는 참조형 데이터의 값을 가진 메모리의 주소를 저장하고 있다.

b = a 에서는 b가 a가 가리키는 주소와 같은 곳을 가리키게 되고, b.x = 2 에서 b 객체가 가리키던 주소(M1)이 가리키던 주소(M2)가 M3로 바뀐다.
이때, 변수 a도 같은 주소(M1)을 가리키고 있었기 때문에 변수 a에도 변경이 생긴다.


=== 일치 연산자는 엄밀히 따지면 해당 객체가 갖고 있는 값이 아닌 메모리 주소를 비교

let a = { x : 1 }
let b = a
let c = { x : 1 }

console.log(a === b) //true
console.log(a === c) //false

참조형 데이터는 생김새가 똑같아도 다른 메모리 주소를 갖고 있기 때문에 일치 연산자로 비교하면 다른 값으로 판단하는데,
원시형 데이터는 생김새가 똑같으면 같은 데이터라고 판단한다.

이처럼 참조형 데이터를 복사할 때는 할당 연산자를 사용하면 하나의 메모리 주소를 다른 두 변수를사용해서 접근할 수 있으므로, 두 객체가 각자 다른 주소를 가리키게 하려면 다른 방법을 사용해서 복사해야 한다.

profile
Hello, World

0개의 댓글

관련 채용 정보