immutableとmutable

【mutableオブジェクト】
■概要
可変オブジェクト、可変クラス。
何度でもフィールドセットできる。
オブジェクトやクラスの状態(フィールド)を変更できる。基本原則はmutable。
つまり、例外のimmutableをおさえりゃいい。

【immutableオブジェクト】
■概要
不変オブジェクト、不変クラス
一度セットしたフィールドの値を二度と変更できない。

■代表例
java.lang.String
java.io.File

■実装方法
・クラスをfinalで宣言する。
→メソッドがオーバーライドされない=サブクラスからの変更を防ぐ
・フィールドを全てprivateで修飾する。
・オブジェクトの内部に可変オブジェクトを定義している場合、そのオブジェクトを提供しない
→getterメソッドなどは提供しない
・オブジェクトの内部状態を変更できるメソッドを提供しない
→setterメソッドなどは提供しない

■メリット
・オブジェクトの値の変更有無確認不要
・スレッドセーフ
・データ複製不要
・データ共有可能(複数クライアント間)