[Java] Immutable Object
ソース
オブジェクト向けプログラミングでは、不変オブジェクト(immutable object)とは、生成後にその状態を変更できないオブジェクトを指す.
代わりに、可変オブジェクトとして作成した後にステータスを変更できます.
C++でconstデータメンバーを使用するなど、一部のプロパティは変更されません.また、場合によっては、内部で使用される属性が変化し、外部で使用されるオブジェクトの状態が変化しない場合は、不変オブジェクトとみなされます.
たとえば、「コメント」(Memoization)キャッシュを使用してコストの高い計算結果をキャッシュしても、オブジェクトは変わらないと考えられます.不変オブジェクトの初期状態は通常、作成時に決定されますが、オブジェクトが実際に使用されるまで遅延します.
不変のオブジェクトを使用すると、レプリケーションまたは比較操作が簡略化され、パフォーマンスの向上に役立ちます.ただし、オブジェクトに変更可能なデータが多数ある場合は、変更せずに不適切になる場合があります.したがって、多くのプログラミング言語では、不変または可変のいずれかを選択できます.
💨 つまり、不変のオブジェクトを再割り当てできますが、いったん割り当てると内部データは変更できません.
オブジェクトに値を割り当てると、内部データは変更できません.
典型的な例としては、String、Integer、Booleanが挙げられる.
Stringは しかし、これはstrが「b」という新しいオブジェクトを作成し、strに最初に参照した「a」値を「b」に変更するのではなく、そのオブジェクトを参照させることを意味する.
外部で年齢または名称を変更できる
上記のように、外部で値を変更することはできません
これは final変数で、もちろんSetterメソッドを作成することはできません.
長所
オブジェクトへの信頼性が向上しました. オブジェクトが作成され、変更されない場合は、トランザクションで変更されないため、安心して使用できます.
作成者は、アクセスメソッドの防御をコピーする必要はありません.
同期処理を必要とせずに、マルチスレッド環境でオブジェクトを共有できます.
短所
オブジェクトが持つ各値には、新しいオブジェクトが必要です. では、メモリが漏洩し、新しいオブジェクトの作成を続行する必要があるため、パフォーマンスが低下する可能性があります.
Immutable Object
オブジェクト向けプログラミングでは、不変オブジェクト(immutable object)とは、生成後にその状態を変更できないオブジェクトを指す.
代わりに、可変オブジェクトとして作成した後にステータスを変更できます.
C++でconstデータメンバーを使用するなど、一部のプロパティは変更されません.また、場合によっては、内部で使用される属性が変化し、外部で使用されるオブジェクトの状態が変化しない場合は、不変オブジェクトとみなされます.
たとえば、「コメント」(Memoization)キャッシュを使用してコストの高い計算結果をキャッシュしても、オブジェクトは変わらないと考えられます.不変オブジェクトの初期状態は通常、作成時に決定されますが、オブジェクトが実際に使用されるまで遅延します.
不変のオブジェクトを使用すると、レプリケーションまたは比較操作が簡略化され、パフォーマンスの向上に役立ちます.ただし、オブジェクトに変更可能なデータが多数ある場合は、変更せずに不適切になる場合があります.したがって、多くのプログラミング言語では、不変または可変のいずれかを選択できます.
オブジェクトに値を割り当てると、内部データは変更できません.
典型的な例としては、String、Integer、Booleanが挙げられる.
Stringは
String str="a", str="ab"
なので、値を可変オブジェクトと見なすのは簡単です.<非不変クラス>
class MutablePerson {
public int age;
public int name;
public MutablePerson(int age, int name) {
this.age = age;
this.name = name;
}
}
<不変クラス>
class ImmutablePerson {
private final int age;
private final int name;
public ImmutablePerson(int age, int name) {
this.age = age;
this.name = name;
}
}
上記のように、外部で値を変更することはできません
これは
可変オブジェクトのメリットとデメリット
長所
オブジェクトへの信頼性が向上しました.
作成者は、アクセスメソッドの防御をコピーする必要はありません.
同期処理を必要とせずに、マルチスレッド環境でオブジェクトを共有できます.
短所
オブジェクトが持つ各値には、新しいオブジェクトが必要です.
Reference
この問題について([Java] Immutable Object), 我々は、より多くの情報をここで見つけました https://velog.io/@corone_hi/Immutable-Objectテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol