FE/React
리액트 불변성 지키기
yun_9
2024. 4. 8. 16:04
기본형 데이터에서는 불변성을 가지고 있어 리액트에서 따로 신경 써주지 않아도 된다.
하지만 참조형 데이터에서는 불변성이 유지되지 않기 때문에 리액트에서 따로 신경을 써주어야 한다.
( 자바스크립트 기본형 데이터와 참조형 데이터의 불변성 개념의 연장선 )
왜 리액트에서 불변성을 지켜주어야 할까?
1. 참조 타입에서 객체나 배열의 값이 변할 때 원본 데이터가 변경되기 때문에 이 원본 데이터를 참조하고 있는
다른 객체에서 예상치 못한 오류가 발생할 수 있고 이에 따라 프로그래밍의 복잡도가 올라가게 된다.
2. 리액트에서 화면을 업데이트할 때 불변성을 지켜서 값을 이전 값과 비교해서 변경된 사항을 확인한 후 업데이트 하기
때문에 불변성을 지켜주어야 한다. ( + 사이드 이펙트 방지 )
불변성을 지키는 방법은?
참조 타입에서 값을 바꿨을때 Call Stack 영역 주소 값은 같은데 Heap 메모리 값만 바꿔주기에 불변성을 유지할 수 없으므로 아예 새로운 배열을 반환하는 메소드를 사용해야 한다.
spread operator
map
filter
slice
reduce
이 중 원본 데이터를 변경하는 메소드 => splice, push
정리하자면
리액트는 불변성을 지켜줌으로 효율적인 상태 업데이트를 하고,
사이드 이펙트를 사전에 방지, 프로그래밍의 구조를 단순하게 유지한다.
참조타입의 경우 의도적으로 불변성 지켜주어야 하며 새로운 배열을 반환하는 메소드 사용해 상태 업데이트