logo

Java의 객체 복제

자바의 생성자그만큼 객체 복제 개체의 정확한 복사본을 만드는 방법입니다. Object 클래스의 clone() 메소드는 객체를 복제하는 데 사용됩니다.

그만큼 java.lang.Cloneable 인터페이스 생성하려는 객체 복제본이 있는 클래스에 의해 구현되어야 합니다. Cloneable 인터페이스를 구현하지 않으면 clone() 메소드가 생성됩니다. CloneNotSupportedException .

그만큼 클론() 메서드 Object 클래스에 정의되어 있습니다. clone() 메소드의 구문은 다음과 같습니다.

 protected Object clone() throws CloneNotSupportedException 

clone() 메소드를 사용하는 이유는 무엇입니까?

그만큼 클론() 메서드 객체의 정확한 복사본을 생성하기 위한 추가 처리 작업을 절약합니다. new 키워드를 사용하여 수행하면 수행하는데 많은 처리 시간이 소요되므로 객체 복제를 사용합니다.

객체 복제의 장점

Object.clone()에는 일부 디자인 문제가 있지만 여전히 인기 있고 객체를 복사하는 쉬운 방법입니다. 다음은 clone() 메서드를 사용하면 얻을 수 있는 이점 목록입니다.

  • 길고 반복적인 코드를 작성할 필요가 없습니다. 4줄 또는 5줄의 긴 clone() 메서드가 있는 추상 클래스를 사용하면 됩니다.
  • 특히 이미 개발되었거나 오래된 프로젝트에 적용하는 경우 개체를 복사하는 가장 쉽고 효율적인 방법입니다. 상위 클래스를 정의하고, 그 안에 Cloneable을 구현하고, clone() 메서드 정의를 제공하면 작업이 완료됩니다.
  • Clone()은 배열을 복사하는 가장 빠른 방법입니다.

객체 복제의 단점

다음은 clone() 메서드의 몇 가지 단점 목록입니다.

  • Object.clone() 메서드를 사용하려면 Cloneable 인터페이스 구현, clone() 메서드 정의, CloneNotSupportedException 처리, 마지막으로 Object.clone() 호출 등 코드의 많은 구문을 변경해야 합니다.
  • 메소드가 없는 복제 가능한 인터페이스를 구현해야 합니다. 우리는 객체에 대해 clone()을 수행할 수 있다는 것을 JVM에 알리기 위해 이를 사용해야 합니다.
  • Object.clone()은 보호되어 있으므로 자체 clone()을 제공하고 여기에서 간접적으로 Object.clone()을 호출해야 합니다.
  • Object.clone()은 생성자를 호출하지 않으므로 객체 생성을 제어할 수 없습니다.
  • 자식 클래스에 복제 메서드를 작성하려면 모든 슈퍼클래스가 해당 클래스에 clone() 메서드를 정의하거나 다른 부모 클래스에서 상속해야 합니다. 그렇지 않으면 super.clone() 체인이 실패합니다.
  • Object.clone()은 얕은 복사만 지원하지만 깊은 복제가 필요한 경우 이를 재정의해야 합니다.

clone() 메소드 예시(객체 복제)

객체 복제의 간단한 예를 살펴보겠습니다.

 class Student18 implements Cloneable{ int rollno; String name; Student18(int rollno,String name){ this.rollno=rollno; this.name=name; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } public static void main(String args[]){ try{ Student18 s1=new Student18(101,'amit'); Student18 s2=(Student18)s1.clone(); System.out.println(s1.rollno+' '+s1.name); System.out.println(s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } } 
지금 테스트해보세요
 Output:101 amit 101 amit 
객체 복제 예제 다운로드

위의 예에서 볼 수 있듯이 두 참조 변수는 모두 동일한 값을 갖습니다. 따라서 clone()은 객체의 값을 다른 객체에 복사합니다. 따라서 객체의 값을 다른 객체에 복사하기 위해 명시적인 코드를 작성할 필요가 없습니다.

new 키워드로 다른 개체를 만들고 다른 개체의 값을 이 개체에 할당하면 이 개체에 대한 많은 처리가 필요합니다. 따라서 추가 처리 작업을 저장하기 위해 clone() 메서드를 사용합니다.