
빌 와그너, ⌜More Effective C# 2판⌟, 김완섭 옮김, 한빛미디어, 2019
이 포스팅은 ⌜More Effective C# 2판⌟의 내용을 기반으로 작성되었습니다.
public class Person : ICloneable
{
public int Age { get; set; }
public int id { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
IClonable은 구현한 타입이 상속 계통에 있다면, 파생 타입에도 영향을 끼친다.
즉, IClonable을 지원하기로 한 타입의 하위 타입도 IClonable을 지원해야 한다.
IClonable의 공식적인 정의에서 깊은 복사 또는 얕은 복사를 지원 한다고 애매하게 정의하고 있다.
깊은 복사나 얕은 복사를 혼용하면 일관성에 문제가 되기 때문에 대부분의 경우 ICloneable을 완전히 배제하고 타입을 작성하는 것이 낫다.
IClonable은 예외적인 상황에 대응하기 위한 것으로 보는 편이 낫다.
파생 클래스에서 IClonable을 사용할 가능성이 큰 베이스 클래스라면 protected 복사 생성자를 만들어야 한다.
이 외의 경우에는 IClonable을 사용하지 말자.