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

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

要点

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

メリット

メモリの効率化

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

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

設計ミスの未然防止

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

スレッドセーフ

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

関連記事


  1. Open Session in Viewは使用すべきなのか?
  2. Singleton パターン
  3. Strategy パターン
  4. Factory Method パターン
  5. Template Method パターン
  6. rmコマンドとmvコマンドの事故に備えた安全な使い方
  7. 圧縮アルゴリズム勉強メモ

comments powered by Disqus