イミュータブルオブジェクト
これはデザインパターンに入るのか分からないけど、併せて知っておくべき概念だと思う。
要点
- イミュータブル:オブジェクトが生成された後、内容が変更されないことを保証する特性
- クラス外からの変更を禁止するため、フィールドをprivateにする
- クラス内からの変更を禁止するため、
- メソッドがフィールドの内容を変更しないように設計する
- クラスの継承、もしくはメソッドのオーバーライドを禁止する
メリット
メモリの効率化
意図しない変更の危険性がないため、参照できるようになる。
特に、Cloneのようにデータを複製する場合に効果がある。
ミュータブルだと同じデータを生成しなおす必要があるため、約2倍のメモリが必要となる。
しかしイミュータブルであればデータを参照しても安全であるため、参照用(ポインタ)のメモリだけでよい。
設計ミスの未然防止
ミュータブルだと「他クラスも参照しているデータをうっかり書き換えてしまった」というような設計ミスが起こり得る。
イミュータブルではこのようなことは起こらない。
スレッドセーフ
イミュータブルオブジェクトへはデータの読み込みしか行わない。
このため、マルチスレッドであっても排他制御を行う必要がない。
その結果、排他制御を行うよりも高速な処理ができるようになる。