「クローン可能」インターフェイスの機能と深く理解するディープクローンとシャロークローン
Cloneableインターフェースは、クラスが複製可能であることを指定するために使用されます。クラスがCloneableインターフェースを実装すると、そのクラスは自身と同じオブジェクトを作成できます。
ディープクローンとシャロークローンは複製方法を二分する。
- ディープコピー:ディープコピーとは、オブジェクトを一式コピーし、そのコピーが元のオブジェクトに一切関連しないようにすることです。つまり、元のオブジェクトを変更しても、クローンオブジェクトには影響しませんし、その逆も同様です。ディープコピーでは、オブジェクトのすべての参照型を含めてコピーし、その参照型の参照型、さらにその参照型と続けて、すべての参照型がコピーされます。
- シャローコピーとは、オブジェクトをコピーしても、コピーと元のオブジェクトが同じ参照型を共有することです。つまり、元のオブジェクトを変更するとコピーオブジェクトにも影響し、その逆も同様です。シャローコピーは、オブジェクトの基本型と参照型の参照のコピーのみを行い、参照型の参照型はコピーしません。
クローニング可能なインターフェイスを実装することが、そのクラスがクローン化できることを表すことに注意してください。これは、クローンを実行するための具体的な実装ではないということです。クローン処理は、実装クラスで Object クラスのクローンメソッドを上書きして、必要に応じて、ディープクローン処理やシャロクローン処理を行う必要があります。
総じて、Cloneable インターフェースは、あるクラスが複製できることを示し、ディープコピーは元オブジェクトとは完全に独立した複製オブジェクトを作成し、シャローコピーは元オブジェクトと参照型の共有を行う複製オブジェクトを作成します。