스터디/이펙티브 자바

[Effective Java] Item13. clone 재정의는 주의해서 진행

📝 작성 : 2022.05.21  ⏱ 수정 : 
728x90

복제 기능은 (변환)생성자와 (변환)팩토리를 이용하는게 최고입니다. (배열은 예외적으로 clone 메서드를 사용하는 것이 좋습니다.)

 

 

Cloneable

복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스(mixin interface)입니다.
하지만 clone 메서드가 선언된 곳이 Cloneable이 아닌 Object이고 이마저도 protected입니다. 따라서 Cloneable을 구현하는 것만으로는 외부 객체에서 clone 메서드를 호출할 수 없습니다.(리플렉션을 사용하면 가능하지만, 해당 객체가 접근 허용된 clone메서드를 제공한다는 보장이 없기 때문에 100%성공하지도 않습니다.)

 

Cloneable 인터페이스는 Object의 clone 메서드의 동작 방식을 결정합니다. Clonable을 구현한 클래스의 인스턴스에서 clone을 호출하면 해당 객체의 필드를 하나하나 복사한 객체를 반환하며, 그렇지 않은 클래스의 인스턴스에서 호출하면 CloneNotSupportedException 예외를 던집니다.

반응형