React로 state를 다루다 보면 배열을 직접 수정했는데 화면이 안 바뀌는 일을 겪는다. items[0]을 바꾸고 setItems에 넣었는데 아무 일도 일어나지 않는다. 해결책은 새 배열을 만들어 넘기는 것이라고 배우지만, 왜 그래야 하는지까지 짚고 가는 경우는 드물다. 이 동작은 React가 state 변경을 어떻게 감지하는지, 그리고 JavaScript가 배열과 객체를 메모리에 어떻게 저장하는지를 알면 전부 설명이된다. spread를 쓰는 이유도, 불변성을 지키라는 말도, batching도 여기서 갈라져 나온다. state는 컴포넌트가 렌더링 사이에 기억하는 값이다. 토글이 켜졌는지 꺼졌는지, 모달이 열렸는지, 어떤 탭이 선택되었는지 같은 UI 상태가 대표적이고, 사용자 입력이나 서버에서 받아온 ..