イミュータブルオブジェクト

これはデザインパターンに入るのか分からないけど、併せて知っておくべき概念だと思う。

要点

  • イミュータブル:オブジェクトが生成された後、内容が変更されないことを保証する特性
  • クラス外からの変更を禁止するため、フィールドをprivateにする
  • クラス内からの変更を禁止するため、
    • メソッドがフィールドの内容を変更しないように設計する
    • クラスの継承、もしくはメソッドのオーバーライドを禁止する

メリット

メモリの効率化

意図しない変更の危険性がないため、参照できるようになる。
特に、Cloneのようにデータを複製する場合に効果がある。

ミュータブルだと同じデータを生成しなおす必要があるため、約2倍のメモリが必要となる。
しかしイミュータブルであればデータを参照しても安全であるため、参照用(ポインタ)のメモリだけでよい。

設計ミスの未然防止

ミュータブルだと「他クラスも参照しているデータをうっかり書き換えてしまった」というような設計ミスが起こり得る。
イミュータブルではこのようなことは起こらない。

スレッドセーフ

イミュータブルオブジェクトへはデータの読み込みしか行わない。
このため、マルチスレッドであっても排他制御を行う必要がない。
その結果、排他制御を行うよりも高速な処理ができるようになる。

関連記事


  1. Open Session in Viewは使用すべきなのか?
  2. Factory Methodパターン

comments powered by Disqus