자바스크립트에서 참조 자료형을 다룰 때, immutable한 메서드와 mutable한 메서드를 구분해서 사용해야하는 경우가 생각보다 많다는 것을 알고 자바스크립트에서 데이터의 가변성(mutability)과 불변성(immutability)에 대해 정리해보려고 한다.
그에 앞서, 먼저 원시 자료형(primitive data)과 참조 자료형(reference data)에 대해 정리해보자.
1) 원시 자료형(primitive type data)
2) 참조 자료형(reference type data)
1) 얕은 복사(shallow copy)
2) 깊은복사(deep copy)
데이터 값 자체를 복사
복사본 데이터와 원본 데이터가 다른 주소값을 참조함(원본 데이터와의 참조가 완전히 끊김)
복사본 데이터를 수정해도 원본 데이터에는 영향을 주지 않음
--> immutable
☑️ immutable한 메소드
.slice
let a = [1,2,3];
b = a.slice();
b[1] = 0;
console.log(b) = [1, 0, 3];
console.log(a) = [1, 2, 3];
☑️ mutable한 메소드
.pop
a.pop();
console.log(a) = [1, 2];
.push
let d = [4, 5, 6];
d.push(7);
console.log(d) = [4, 5, 6, 7];
.shift
let e = [7, 8, 9];
e.shift();
console.log(e) = [8, 9];
.unshift
let f = [10, 11, 12];
f.unshift(9);
console.log(f) = [9, 10, 11, 12];