Какие плюсы и минусы работы с неиммутабельными объектами

«Какие плюсы и минусы работы с неиммутабельными объектами» — вопрос из категории ООП, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Плюсы:

  • Простота и производительность: меньше накладных расходов на создание копий.
  • Меньше кода: не нужно реализовывать copy() или deepCopy().
  • Прямое изменение состояния удобно для UI-компонентов (например, View свойства).

Минусы:

  • Сложнее отслеживать изменения состояния, особенно в многопоточных сценариях.
  • Могут возникнуть неожиданные сайд-эффекты, если объект передаётся между компонентами.
  • Труднее реализовать отмену действий (undo/redo).

Пример:

data class User(var name: String) // mutable
val user = User("Alex")
user.name = "Bob" // Изменение напрямую

Для иммутабельного подхода:

data class User(val name: String) // immutable
val user = User("Alex")
val updatedUser = user.copy(name = "Bob") // Новый объект