Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java의 심층 복사 및 얕은 복사

<시간/>

깊은 복사와 얕은 복사는 모두 다른 방식으로 주어진 객체의 복사본을 만드는 것을 말합니다 -

얕은 카피

이것은 기본적으로 개체의 새 인스턴스를 만들고 원본 데이터 세트의 모든 데이터를 새로 생성된 인스턴스로 복사합니다. 이것은 새로 생성된 인스턴스가 원본 개체로 구체적으로 캐스팅되어야 함을 의미합니다. '얕은 복제'라고도 합니다.

예시

import java.util.* ;
class Demo{
   private int[] my_data;
   public Demo(int[] my_vals){
      my_data = my_vals;
   }
   public void display_data(){
      System.out.println(Arrays.toString(my_data) );
   }
}
public class Use_Demo{
   public static void main(String[] args){
      int[] my_vals = {56, 89, 91};
      Demo my_inst = new Demo(my_vals);
      my_inst.display_data();
      my_vals[0] = 65;
      my_inst.display_data();
   }
}

출력

[56, 89, 91]
[65, 89, 91]

Demo라는 클래스에는 변수와 배열의 요소를 새 배열로 복사하는 생성자가 포함되어 있습니다. 'display_data'라는 다른 함수는 이 데이터 배열을 표시합니다. 메인 함수에서 인스턴스가 생성되고 배열이 정의되고 함수가 호출됩니다. 모든 변경 사항이 반영된 관련 출력이 콘솔에 표시됩니다.

딥 카피

다른 용도나 용도로 별도의 데이터 사본이 필요한 경우에 사용합니다. 클래스의 모든 멤버는 'Cloneable' 인터페이스를 구현하고 'clone' 메서드를 재정의해야 합니다.

예시

import java.util.*;
class Demo{
   private int[] my_data;
   public Demo(int[] my_vals){
      my_data = new int[my_vals.length];
      for (int i = 0; i < my_data.length; i++){
         my_data[i] = my_vals[i];
      }
   }
   public void display_data(){
      System.out.println(Arrays.toString(my_data));
   }
}
public class Use_Demo{
   public static void main(String[] args){
      int[] my_vals = {56, 89, 91};
      Demo my_inst = new Demo(my_vals);
      my_inst.display_data();
      my_vals[0] = 65;
      my_inst.display_data();
   }
}

출력

[56, 89, 91]
[56, 89, 91]

Demo라는 클래스에는 변수와 배열을 반복하고 다른 배열에 복사하는 생성자가 포함되어 있습니다. 'display_data'라는 다른 함수는 이 데이터 배열을 표시합니다. main 함수에서 인스턴스가 생성되고 배열이 정의되고 함수가 호출됩니다. 모든 변경 사항이 반영된 관련 출력이 콘솔에 표시됩니다.