Javaのクラスは変えられるクラスと、できないクラス(immutable)があります。
この時、final宣言が大きいな役割をはたします。
変えられないクラス(Immutable)はそれ自体で多大なメリットがあります。
このメリットを享受するために、特に理由がない場合はImmutableクラスで作成した方が役たちます。
まず、Immutableクラスを作る時、考慮すべき五つの点を説明します。
1. オブゼダートの値を変えることができるメソッド(Setterなど)を作らない。
サブクラスにより変更される可能性をブロックします。
システム上で強制し、意図を明確にします。
ユーザーがオブジェクトを直接変更できないようにします。
ユーザーは、クラスに含まれる変更可能なオブジェクトへの参照を取得することができないようにします。
1.変更不可能オブジェクトは単純です。
生成される際に一つの値だけを持つからです。一方、変更可能なオブジェクトは、細かいマニュアルがないと、安定的に使用し難いです。
2. 変更不可能なオブジェクトは、同期が必要なく、スレッドセーフです。
スレッド処理中のオブジェクトの内部値が突発的に変化したら、スレッド自体が崩壊する恐れがあります。変更不可能という特性が、これらの危険性を予防してくれます。
3. 変更不可能なオブジェクトは、自由に共有が可能できます。
privateに設定して非表示にする理由は、変更を不可能にするです。安定性のために開放による活用性を犠牲にする戦略です。しかし、変更が不可能であることを確認している場合public static finalように宣言、自由に共有して、活用することができます。
4. 防御的コピーを作成する必要がありません。
5. 変更不可能なオブジェクトは、その内部も共有できます。
6. 変更不可能なオブジェクトは他のオブジェクトの構成要素にも容易に活用できます。
生成される際に一つの値だけを持つからです。一方、変更可能なオブジェクトは、細かいマニュアルがないと、安定的に使用し難いです。
スレッド処理中のオブジェクトの内部値が突発的に変化したら、スレッド自体が崩壊する恐れがあります。変更不可能という特性が、これらの危険性を予防してくれます。
privateに設定して非表示にする理由は、変更を不可能にするです。安定性のために開放による活用性を犠牲にする戦略です。しかし、変更が不可能であることを確認している場合public static finalように宣言、自由に共有して、活用することができます。
代表的にmapとsetがあります。 keyの値を毎回変化する値で指定しちゃいけないことは常識です。
資源消費が少々あることです。
小さなオブジェクトであれば大きく影響は響かないですが、
BigIntegerのような大きな値を扱うオブジェクトであれば、
1ビットの変化だけでもオブジェクトを新しく作成する必要がありますので、
多くのリソースが消費されることになります。
댓글 없음:
댓글 쓰기