Java에서 개체 복제

Aryan Tyagi 2023년10월12일
  1. 직접 메서드를 사용하여 Java에서 개체 복제
  2. clone()함수를 사용하여 Java에서 객체 복제
  3. 복사 생성자를 사용하여 Java에서 객체 복제
Java에서 개체 복제

개체 복제는 개체를 정확하게 복제하는 기술입니다. 현재 개체 클래스의 새 인스턴스를 만들고 모든 필드를 현재 개체 필드의 정확한 내용으로 채 웁니다.

이 튜토리얼에서는 Java로 객체를 복제합니다.

직접 메서드를 사용하여 Java에서 개체 복제

이 방법에서는 새 개체를 만들고 이전에 정의한 개체를 값으로 할당합니다.

다음 예를 참조하십시오.

public class shallowcopy implements Cloneable {
  int a, b;

  public static void main(String args[]) throws CloneNotSupportedException {
    shallowcopy d = new shallowcopy();
    d.a = 10;
    d.b = 12;
    shallowcopy dtwo = d;

    System.out.println("Original " + d.a);
    System.out.println(d.b);
    System.out.println("Shallow Copy " + dtwo.a);
    System.out.println(dtwo.b);
    d.a = 5;
    System.out.println("Copy after modifying original");
    System.out.println(dtwo.a);
  }
}

출력:

Original 10
12
Shallow Copy 10
12
Copy after modifying original
5

위의 코드에서 우리는 원본을 변경하고 생성 된 사본에 반영된 변경 사항을 확인했습니다. 이러한 클론을 얕은 복사본이라고합니다.

동일한 클래스의 새 인스턴스를 반환하기 전에 얕은 복사는 동일한 클래스의 새 인스턴스를 생성하고 해당 필드를 복사합니다. 이 절차에서는 개체의 내용이 새 개체로 전송됩니다. 그러나 두 개체 모두 동일한 값을 참조하므로 연결된 개체에 대한 수정 사항은 다른 개체에 반영됩니다. 객체 클래스에는 복제 기능과 얕은 복사 기능이 있습니다. 객체 클래스에는 복제 기능과 얕은 복사 기능이 있습니다.

clone()함수를 사용하여 Java에서 객체 복제

객체를 복제하려면 Object 클래스의clone()메서드를 사용합니다. 배열을 복제하는 가장 빠른 방법입니다.

객체 복제를 생성하려는 클래스는 Cloneable 인터페이스를 구현해야합니다. Cloneable 인터페이스가 구현되지 않은 경우clone()함수는CloneNotSupportedException을 발생시킵니다.

clone()함수를 사용하면 객체의 정확한 복제본을 만들 때 추가 처리가 필요하지 않습니다. new를 사용하여 수행하면 처리하는 데 오랜 시간이 걸리므로 대신 오브젝트 복제를 사용합니다. 이를 사용하여 딥 카피를 생성합니다.

항목이 참조하는 개체와 함께 복제되는 경우이를 전체 복사라고합니다. 사본에서 변경 한 사항은 원본에 반영되지 않습니다.

예를 들면

import java.util.ArrayList;
public class deepcopy implements Cloneable {
  int a, b;

  public Object clone() throws CloneNotSupportedException {
    return (deepcopy) super.clone();
  }
  public static void main(String args[]) throws CloneNotSupportedException {
    deepcopy d = new deepcopy();
    d.a = 10;
    d.b = 12;
    System.out.println("Original " + d.a);
    System.out.println(d.b);
    deepcopy dtwo = (deepcopy) d.clone();
    System.out.println("Deep Copy " + dtwo.a);
    System.out.println(dtwo.b);
    d.a = 5;
    System.out.println("Copy after modifying original");
    System.out.println(dtwo.a);
  }
}

출력:

Original 10
12
Deep Copy 10
12
Copy after modifying original
10

위의 예에서 원본에 대한 변경 사항은 전체 사본에 반영되지 않습니다.

복사 생성자를 사용하여 Java에서 객체 복제

생성자는 일부 클래스의 객체를 초기화합니다. 복사 생성자는 일부 클래스의 중복 객체를 만들 수 있습니다.

이러한 클래스를 초기화하는 방법을 보려면 아래 코드를 참조하십시오.

class copycon {
  public String cc;
  public copycon(String s) {
    this.cc = s;
  }
  public copycon(copycon different) {
    this.cc = different.cc; // copy constructor
  }
}
class Main {
  public static void main(String args[]) {
    copycon c1 = new copycon("abc");
    copycon c2 = new copycon(c1);
    System.out.println(c2.cc);
  }
}

출력:

abc

이것은 Java에서 깊은 복제를 달성하지 못합니다.

관련 문장 - Java Object