본문 바로가기

Archived(CSE Programming)/Java

Java 깊은 복사와 얕은 복사

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/

 

자바 객체 복사하기 ( feat. how to use CloneUtils? )

자바(Java)로 개발을 하다보면 한번쯤 객체를 복사하는 로직을 작성할때가 있다. 그때마다 나오는 이야기인 Shalldow Copy 와 Deep Copy. 한국어로 표현하면 얕은 복사와 깊은 복사라고 이야기를 하는데 이 두 개념의 차이는 아주 간단하다. 객체의 주소값을 복사하는지, 아니면 객체의 실제 값(value)를 복사하는지.

taetaetae.github.io

 

'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