2.6 KiB
1. 데이터 변경에 의한 부작용 방지
불변 객체는 그 상태가 변하지 않기 때문에, 데이터 변경에 의한 예측할 수 없는 부작용을 방지할 수 있습니다. 특히 멀티스레딩 환경에서는 불변 객체를 사용하면 동기화 문제를 피할 수 있습니다. 여러 스레드에서 동시에 접근해도 상태가 변경되지 않으므로, **쓰레드 안전성(Thread Safety)**을 보장할 수 있습니다.
여러 스레드에서 User 객체를 동시에 변경하려고 하면 문제가 발생할 수 있지만, 불변 객체는 안전하게 공유할 수 있습니다.
2. 객체의 상태 추적 용이
불변 객체는 한 번 설정된 후 상태가 변하지 않으므로 객체의 상태가 정확하게 추적됩니다. 특히, 데이터베이스 트랜잭션이나 로그 시스템처럼 객체 상태의 변화를 기록하고 추적하는 것이 중요한 상황에서는 불변 객체가 유리합니다.
불변 객체는 트랜잭션이 진행되는 동안 변경될 수 없으므로, 언제든지 정확한 상태를 추적할 수 있습니다.
3. 값 비교의 용이성
불변 객체는 값이 같으면 동일 객체로 취급할 수 있기 때문에, 객체 비교가 매우 간단합니다. 값 비교를 참조 비교로 처리할 수 있기 때문에, 비교 연산이 효율적입니다.
불변 객체는 동일한 값일 경우 참조 비교로 처리할 수 있어 효율적인 비교가 가능합니다.
4. 복잡한 상태 변화 방지
불변 객체는 상태 변경을 방지하여 객체의 상태에 의한 오류를 예방할 수 있습니다. 예를 들어, 데이터 무결성을 보장해야 하는 신뢰성이 중요한 시스템에서 불변 객체는 유용합니다. 변경 가능한 객체는 다양한 상황에서 상태를 추적하거나 수정할 때 오류를 일으킬 가능성이 있기 때문입니다.
UserSettings 객체는 불변이므로 설정이 변경될 때마다 새로운 객체를 반환합니다. 변경이 예상되는 값일지라도 기존 객체가 변경되지 않으므로 안전합니다.
5. 예측 가능한 동작
불변 객체는 언제나 동일한 상태를 유지하므로, 예측 가능한 동작을 보장합니다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다. 특히 복잡한 애플리케이션에서 객체의 상태 변화에 따른 오류를 줄이기 위해 불변 객체가 필요합니다.