Objetos imutáveis: o que ganham e o que custam
Pergunta
Quais os benefícios de projetar objetos imutáveis, e qual o custo?
Resposta esperada
Um objeto imutável não muda de estado depois de criado — pra 'mudar', você cria uma nova instância. Ganhos: seguro pra compartilhar entre threads sem lock (não tem race); pode ser usado como chave de mapa e cacheado sem medo; mais fácil de raciocinar (o valor que você recebeu não vai mudar debaixo de você depois); invariantes checados só uma vez, no construtor. Custos: criar novas instâncias a cada mudança gera pressão de alocação/GC (mitigado por 'persistent data structures' que compartilham a parte não alterada); um pouco mais de código (métodos `with...` em vez de setters); e não serve bem pra objetos genuinamente stateful de vida longa (um buffer que você preenche). Regra prática: value objects (dinheiro, data, coordenada) imutáveis por padrão; entidades com ciclo de vida podem ter estado mutável controlado.
Por que perguntam isso
Pergunta pleno/sênior. Sinal de leitura: 'persistent data structures' e a distinção value object x entidade.