상세 컨텐츠

본문 제목

[이펙티브 자바] Item 13. clone 재정의는 주의해서 진행하라 | 3장

Development Study/이펙티브 자바

by yooputer 2023. 9. 11. 08:46

본문

cloneable 인터페이스

  • 복제해도 되는 클래스임을 명시하는 믹스인 인터페이스
  • cloneable을 구현한 클래스의 clone메서드를 호출하면 객체의 필드를 복사한 후 객체를 반환함
  • cloneable을 구현하지 않은 클래스의 clone메서드를 호출하면 CloneNotSupportedException을 throw

cloneable 인터페이스 문제점

  • clone 메서드가 cloneable에 선언되어 있는 것이 아니라 Object에 선언되어 있음
  • cloneable을 구현하는 것만으로는 외부 객체에서 clone메서드를 호출할 수 없고
    가변 필드를 제대로 복제할 수 없음

올바른 clone 메서드 재정의 방법

  • 제대로 동작하는 clone메서드를 가진 상위 클래스 상속 후 super.clone 호출
  • 객체타입의 필드는 해당 클래스의 clone 메서드를 사용해서 복제
  • 자신의 타입으로 형변환 후 반환

cloneable 구현시 주의점

  • 상속용 클래스는 cloneable을 구현하면 안됨

다른 선택지

  • 복사 생성자와 복사 팩터리

관련글 더보기