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();
}
}