Java에서 객체를 복사하는 유형에는 깊은 복사와 얕은 복사 2가지가 있다.
깊은 복사의 경우 객체의 실체값을 복사하는 것이고, 얕은 복사는 객체의 참조값(주소값)을 복사하는 것이다.
그래서 얕은 복사는 객체 변수에 기존의 변수를 옮겨 담는 것이고 깊은 복사는 객체 Cloneable 인터페이스를 구현하여 Clone 메소드를 통해 객체의 실체를 반환한다. 이 때, 참조자료형의 경우에는 override한 clone 메소드내에서 따로 처리를 해줘야 한다.
org.apache.http.client.utils의 CloneUtils 라이브러리를 활용한 Deep Copy
// 복사가 될수있도록 설정
public class Family implements Cloneable{
String name;
int age;
boolean isOfficeWorkers;
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
// 일단 복사를 하고, 멤버 객체 자체를 복사한 다음 대입
public class Student implements Cloneable {
String name;
int age;
Family family;
@Override
public Object clone() throws CloneNotSupportedException {
Student student = (Student)super.clone();
student.family = (Family)CloneUtils.clone(student.family);
return student;
}
}
참조 : https://taetaetae.github.io/2018/08/21/how-to-use-cloneUtils/
'Archived(CSE Programming) > Java' 카테고리의 다른 글
Java_OOP와 다형성 (0) | 2020.01.14 |
---|---|
Java_자바의 기본 (0) | 2020.01.13 |
Java 마커 인터페이스 (0) | 2019.11.03 |
Java_메모리 구조 (0) | 2019.11.03 |
Java 예외처리 (0) | 2019.11.03 |