Programming/JAVA
자바 깊은 복사(Deep Copy) 얕은 복사(Shallow Copy) 비교
Beat.
2022. 6. 28. 08:49
자바 깊은 복사(Deep Copy) 얕은 복사(Shallow Copy) 비교
코딩을 하다보면 깊은복사 얕은복사에 대한 내용은 많이 접하셨을 겁니다.
간단하고 기본적인 내용이지만 종종 헷갈린 경우도 있을건데요.
오늘은 깊은 복사 얕은복사에 차이에 대해서 알아보겠습니다.
- 깊은복사
- 객체를 복사시 객체가 가지고 있는 값을 새로운 메모리에 복사합니다.
- 얕은복사
- 객체를 복사시 객체가 가지고 있는 값을 복사하는 것이 아니라 객체의
주소값
을 복사합니다.
public class CopyObject implements Cloneable {
private String name;
private int age;
private LocalDate birth;
public CopyObject(String name, int age, LocalDate birth) {
this.name = name;
this.age = age;
this.birth = birth;
}
@Override
protected CopyObject clone() throws CloneNotSupportedException {
return (CopyObject) super.clone();
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public LocalDate getBirth() {
return this.birth;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setBirth(LocalDate birth) {
this.birth = birth;
}
}
public class CopyExample {
public static void main(String[] args) {
String name = "Hong";
int age = 22;
LocalDate birth = LocalDate.of(2000, 1, 1);
int changeAge = 32;
// 얕은 복사
CopyObject shallowOriginal = new CopyObject(name, age, birth);
CopyObject shallowCopy = shallowOriginal;
shallowCopy.setAge(changeAge);
int shallowOriginalAge = shallowOriginal.getAge();
int shallowCopyAge = shallowCopy.getAge();
System.out.println("shallow original age : " + shallowOriginalAge);
System.out.println("shallow copy age : " + shallowCopyAge);
// 깊은 복사1 직접 복사
CopyObject deepOriginal1 = new CopyObject(name, age, birth);
CopyObject deepCopy1 = new CopyObject(
deepOriginal1.getName(),
deepOriginal1.getAge(),
deepOriginal1.getBirth());
deepCopy1.setAge(changeAge);
int deepOriginalAge1 = deepOriginal1.getAge();
int deepCopyAge1 = deepCopy1.getAge();
System.out.println("deep original1 age : " + deepOriginalAge1);
System.out.println("deep copy1 age : " + deepCopyAge1);
// 깊은 복사2 Cloneable 이용
CopyObject deepOriginal2 = new CopyObject(name, age, birth);
CopyObject deepCopy2 = deepOriginal2.clone();
deepCopy2.setAge(changeAge);
int deepOriginalAge2 = deepOriginal2.getAge();
int deepCopyAge2 = deepCopy2.getAge();
System.out.println("deep original2 age : " + deepOriginalAge2);
System.out.println("deep copy2 age : " + deepCopyAge2);
}
}
감사합니다.