깊은 복사와 얕은 복사는 모두 다른 방식으로 주어진 객체의 복사본을 만드는 것을 말합니다 -
얕은 카피
이것은 기본적으로 개체의 새 인스턴스를 만들고 원본 데이터 세트의 모든 데이터를 새로 생성된 인스턴스로 복사합니다. 이것은 새로 생성된 인스턴스가 원본 개체로 구체적으로 캐스팅되어야 함을 의미합니다. '얕은 복제'라고도 합니다.
예시
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 함수에서 인스턴스가 생성되고 배열이 정의되고 함수가 호출됩니다. 모든 변경 사항이 반영된 관련 출력이 콘솔에 표시됩니다.