필자는 불변의 "패턴"이 장점이기 때문에 과거에는 불변의 데이터 유형 (일부, 대부분 또는 모두)을 가진 시스템을 설계하는 것이 유리하다는 것을 알게되었습니다. 종종 그렇게 할 때 버그를 적게 쓰고 디버깅이 훨씬 쉽습니다.
그러나 동료들은 일반적으로 불변에서 멀어졌습니다. 그들은 전혀 경험이 없지만 (그와는 거리가 멀지 만) 모든 객체에 대해 게터와 세터가있는 개인 멤버 인 고전적인 방식으로 데이터 객체를 씁니다. 그런 다음 일반적으로 생성자는 인수를 사용하지 않거나 편의를 위해 일부 인수를 사용합니다. 종종 객체 생성은 다음과 같습니다.
Foo a = new Foo();
a.setProperty1("asdf");
a.setProperty2("bcde");
어쩌면 그들은 어디서나 할 수 있습니다. 아무리 중요하더라도 두 문자열을 취하는 생성자를 정의하지 않을 수도 있습니다. 그리고 나중에 해당 문자열의 값을 변경하지 않아도 될 필요가 없습니다. 분명히 그러한 것들이 사실이라면, 객체는 불변으로 더 잘 설계 될 것입니다. (생성자는 두 가지 속성을 취하지 만 세터는 전혀 사용하지 않습니다).
객체 유형을 불변으로 디자인해야하는지 어떻게 결정합니까? 그것을 판단 할 수있는 좋은 기준이 있습니까?
현재 내 프로젝트의 일부 데이터 유형을 변경 불가능으로 전환할지 여부에 대해 토론하고 있지만 동료에게이를 정당화해야하며 유형의 데이터가 (거의 거의) 변경 될 수 있습니다. 변경할 수없는 방법입니다 (변경하려는 것을 제외하고 이전 객체의 속성을 복사하여 새 객체를 만듭니다). 그러나 이것이 이것이 불변의 사람들에 대한 나의 사랑인지, 또는 그들로부터 실제로 필요 / 혜택이 있는지 확실하지 않습니다.