React state immutability(불변성)
React state immutability(불변성)
React state에 대해 알아보던 중 immutability 개념이 이해가 잘 안되어 정리하면서 공부함.
immutability 은 데이터를 직접 수정하지 않고, 수정이 필요한 경우 새로운 데이터를 만들어내는 방식임.
React에서 불변성을 유지하는 이유는 state가 변경되었음을 React가 감지하고 리렌더링을 하기 위함임.
잘못된 예시
1
2
const user = { name: 'John', age: 25 };
user.name = 'Mike'; // 직접 수정 (X)
올바른 예시
1
2
const user = { name: 'John', age: 25 };
const newUser = { ...user, name: 'Mike' }; // 새로운 객체 생성 (O)
배열의 불변성
- 요소 추가 ```javascript // 잘못된 예시 const numbers = [1, 2, 3]; numbers.push(4); // 직접 수정 (X)
// 올바른 예시 const numbers = [1, 2, 3]; const newNumbers = […numbers, 4]; // 새로운 배열 생성 (O)
1
2
3
4
5
6
7
8
9
10
2. 요소 제거
```javascript
// 잘못된 예시
const numbers = [1, 2, 3];
numbers.splice(1, 1); // 직접 수정 (X)
// 올바른 예시
const numbers = [1, 2, 3];
const newNumbers = numbers.filter(n => n !== 2); // 새로운 배열 생성 (O)
- 요소 수정 ```javascript // 잘못된 예시 const numbers = [1, 2, 3]; numbers[1] = 20; // 직접 수정 (X)
// 올바른 예시 const numbers = [1, 2, 3]; const newNumbers = numbers.map(n => n === 2 ? 20 : n); // 새로운 배열 생성 (O)
1
2
3
4
5
6
7
8
9
10
11
12
### 객체의 불변성
1. 속성 추가
```javascript
// 잘못된 예시
const user = { name: 'John' };
user.age = 25; // 직접 수정 (X)
// 올바른 예시
const user = { name: 'John' };
const newUser = { ...user, age: 25 }; // 새로운 객체 생성 (O)
- 속성 제거 ```javascript // 잘못된 예시 const user = { name: ‘John’, age: 25 }; delete user.age; // 직접 수정 (X)
// 올바른 예시 const user = { name: ‘John’, age: 25 }; const { age, …newUser } = user; // 새로운 객체 생성 (O)
1
2
3
4
5
6
7
8
9
10
3. 속성 수정
```javascript
// 잘못된 예시
const user = { name: 'John', age: 25 };
user.age = 26; // 직접 수정 (X)
// 올바른 예시
const user = { name: 'John', age: 25 };
const newUser = { ...user, age: 26 }; // 새로운 객체 생성 (O)
중첩된 객체의 불변성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const user = {
name: 'John',
address: {
city: 'Seoul',
country: 'Korea'
}
};
// 잘못된 예시
user.address.city = 'Busan'; // 직접 수정 (X)
// 올바른 예시
const newUser = {
...user,
address: {
...user.address,
city: 'Busan'
}
}; // 새로운 객체 생성 (O)
불변성 유지의 장점
- 예측 가능한 상태 관리
- 데이터 변경 추적이 용이함
- 디버깅이 쉬워짐
- 성능 최적화
- React의 가상 DOM 비교 알고리즘이 효율적으로 동작함
- 불필요한 리렌더링을 방지할 수 있음
- 부작용 방지
- 의도하지 않은 데이터 변경을 방지함
- 코드의 안정성이 높아짐
불변성을 지키는 것이 처음에는 번거로울 수 있지만, React 애플리케이션의 안정성과 성능을 위해서는 매우 중요한 개념임. 특히 상태 관리가 복잡해질수록 불변성의 중요성이 더욱 커짐.
This post is licensed under CC BY 4.0 by the author.