Post Page Advertisement [Top]



Javaのクラスは変えられるクラスと、できないクラス(immutable)があります。

この時、final宣言が大きいな役割をはたします。

変えられないクラス(Immutable)はそれ自体で多大なメリットがあります。

このメリットを享受するために、特に理由がない場合はImmutableクラスで作成した方が役たちます。

まず、Immutableクラスを作る時、考慮すべき五つの点を説明します。


1. オブゼダートの値を変えることができるメソッド(Setterなど)を作らない。

2. 継承することができないようにする。
サブクラスにより変更される可能性をブロックします。

3. すべてのフィールドをfinalに宣言する。
システム上で強制し、意図を明確にします。

4. すべてのフィールドをprivateとして宣言する。
ユーザーがオブジェクトを直接変更できないようにします。

5. 変更コンポーネントの排他的アクセス権を保証する。
ユーザーは、クラスに含まれる変更可能なオブジェクトへの参照を取得することができないようにします。



次に、変更不可能なクラスの利点です。

1.変更不可能オブジェクトは単純です。
    生成される際に一つの値だけを持つからです。一方、変更可能なオブジェクトは、細かいマニュアルがないと、安定的に使用し難いです。

2. 変更不可能なオブジェクトは、同期が必要なく、スレッドセーフです。
    スレッド処理中のオブジェクトの内部値が突発的に変化したら、スレッド自体が崩壊する恐れがあります。変更不可能という特性が、これらの危険性を予防してくれます。

3. 変更不可能なオブジェクトは、自由に共有が可能できます。
     privateに設定して非表示にする理由は、変更を不可能にするです。安定性のために開放による活用性を犠牲にする戦略です。しかし、変更が不可能であることを確認している場合public static finalように宣言、自由に共有して、活用することができます。

4. 防御的コピーを作成する必要がありません。

5. 変更不可能なオブジェクトは、その内部も共有できます。

6. 変更不可能なオブジェクトは他のオブジェクトの構成要素にも容易に活用できます。
    代表的にmapとsetがあります。 keyの値を毎回変化する値で指定しちゃいけないことは常識です。


唯一の欠点は、値ごとに個別のオブジェクトを作成する必要がありますので

資源消費が少々あることです。

小さなオブジェクトであれば大きく影響は響かないですが、

BigIntegerのような大きな値を扱うオブジェクトであれば、

1ビットの変化だけでもオブジェクトを新しく作成する必要がありますので、

多くのリソースが消費されることになります。










댓글 없음:

댓글 쓰기

Bottom Ad [Post Page]

| Designed by Colorlib