JAVA

[JAVA] 깊은 복사(deep copy) VS 얕은 복사(shallow copy)

meetyou 2023. 8. 10. 16:19

깊은 클론 VS 얕은 클론

 

1. 얕은 클론

List<String> friends = new AraayList<>();
friends.add("감자친구1");

Person person = new Person(10, "김감자", friends);

Person copy = person.clone();

List<String> copyFriends = copy.getFriends();
copyFriends.add("복사친구1");

System.out.print(person.toString);
System.out.print(copy.toString);

// 결과 person.toString = copy.toString 동일 : Person[10, 김감자, [감자친구1, 복사친구1]]

class Person implements Cloneable {

	public int age;
    
    public String name;
    
    public List<String> friends;
    
    Person(int age, String name, List<String> friends) {
    	this.age = age;
        this.name = name;
        this.friends = friends;
    }
    
    @Override
    protected Person clone() throws CloneNotSupportedException {
        return super.clone();
    }

}

 

2. 깊은 클론

List<String> friends = new AraayList<>();
friends.add("감자친구1");

Person person = new Person(10, "김감자", friends);

Person copy = person.clone();

List<String> copyFriends = copy.getFriends();
copyFriends.add("복사친구1");

System.out.print(person.toString);
System.out.print(copy.toString);

// 결과 person.toString : Person[10, 김감자, [감자친구1]]
// 결과 copy.toString : Person[10, 김감자, [감자친구1, 복사친구1]]

class Person implements Cloneable {

	public int age;
    
    public String name;
    
    public List<String> friends;
    
    Person(int age, String name, List<String> friends) {
    	this.age = age;
        this.name = name;
        this.friends = friends;
    }
    
    @Override
    protected Person clone() throws CloneNotSupportedException {
        List<String> list = new ArrayList<>(this.Person);
        return super.clone();
    }

}