불변성을 지켜 어떤 것이 변했는지 리액트에서 알기 위해서 사용한다.
state가 변하기 전의 값과 변한 후의 값을 비교하여 리액트 최적화를 할 수 있다.
의도하지 않은 특정 객체가 변경되면 참조하고 있던 객체에서도 변경이 일어난다. 즉, side-effect가 발생할 확률과 프로그램의 복잡도가 높아지기 때문에 불변성을 유지한다. 변경이 일어난 객체의 속성만 비교함으로써 리액트에서 최적화가 가능하다.(shouldComponentUpdate)
상태를 관리하기 위해 객체 타입을 사용하는데 이는 참조 타입이라 불변성을 유지할 수 없다. 그래서 기존의 주소 값과 다른 새로운 객체를 생성하여 복사한 뒤 해당 속성을 바꾸는 작업이 필요하다. 이렇게 객체의 불변성을 유지함으로써 side-effect가 줄어들고 컴포넌트 최적화가 가능하다.