불변성이라는 추상적인 단어를 이해하기 위해서는 JavaScript에서 Memory Heep과 Call Stack이 어떻게 변화하는지 알아야합니다.
let a = 10;
let b = [1, 2, 3];
let c = { name: "라잇", course: "FE"};




const obj1 = { a: 1, b: 2};
const obj2 = { a: 1, b: 2};
console.log(obj1 === obj2); // false
console.log(JSON.strinify(obj1) === JSON.strinify(obj2)); // true
const PrimitiveTypeTest = () => {
const [number, setNumber] = useState(0);
const increase = () => {
setNumber(number + 1);
};
retrun (
<Container>
number: {number}
<Button onClick={increase}>증가하기</Button>
</Container>
)
}
const PrimitiveTypeTest = () => {
const [array, setArray] = useState([1,2,4]);
const increase = () => {
array.push(5)
setNumber(array);
};
retrun (
<Container>
number: {number}
<Button onClick={increase}>증가하기</Button>
</Container>
)
}
const languages = ["Java", "Type", "Coffee"];
const reversed = languages.toReversed();
console.log(reversed);
// => ["Coffee", "Type", "Java"]
const languages = ["Java", "Type", "Coffee"];
const sorted = languages.toSorted();
console.log(sorted);
// => ["Coffee", "Java", "Type"]
const languages = ["Java", "Type", "Coffee"];
const spliced = languages.toSpliced(2, 1, 'Dart', 'Web');
console.log(sorted);
// => ["Java", "Type", "Dart", 'Web']
const languages = ["Java", "Type", "Coffee"];
const spliced = languages.with(2, 'apple');
console.log(sorted);
// => ["Java", "Type", 'apple']
const twoDepthArray = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
]
const copiedArray = [...twoDepthArray];
console.log(twoDepthArray === copiedArray); // 1. false
console.log(twoDepthArray[0] === copiedArray[0]); // 2. true
const original = { name: 'MDN'};
original.itself = original;
const clone = structuredClone(original);
console.log(clone !== original);
console.log(clone.name === 'MDN')
console.log(original.itself === clone)
const twoDepthArray = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
]
const copiedArray = structuredClone(twoDepthArray);
console.log(twoDepthArray === copiedArray); // 1. false
console.log(twoDepthArray[0] === copiedArray[0]); // 2. false
이번 글에서는 불변성에 대해서 다뤘습니다. 이 영상을 보기전에 이미 알고 있는 내용이어서 다른 영상을 볼까 고민했는데요. 막상 보니까 정말 유익한 영상이었습니다. 얼마전에 기술 면접에서 리액트에서 setState를 다룰 때 왜 새로운 객체나 배열을 통해 상태를 업데이트 해줘야하나? 라는 질문에 state는 읽기 전용 값이기 때문이라는 애매한 답을 한 적이 있었습니다. 이번 영상을 보니까 제가 애매하게 알고 있었던 부분을 확실하게 알게되는 거 같아서 너무 좋았습니다. 그리고 영상 후반부에 있는 structuredClone 메서드 또한 정말 꿀팁입니다.. lodash나 커스텀 재귀함수 말고 공식적으로 지원하는 API가 있다는 게 정말 놀랍네요.