티스토리 뷰

Language/Java

[Java]Deep copy, Shallow copy

out of coding 2014. 9. 26. 17:16

자바는 여러가지 이유로 속도가 빠르지가 못하다.

속도를 저하시키는 원인중에 하나가 객체지향언어라서 객체를 생성하느라 느리다.

객체를 생성하며, 메모리에 새로운 공간을 할당하고 데이터를 넣는 속도가 몹시 느린 이유이다.


그래서 객체지향언어들은 속도개선을 위하여 노력을 하게 되는데.

이것이 pooling, caching, clone 기법등이 있다.


일단 clone에 대해서 알아보도록 한다.


개념은 쉽게 그냥 객체를 복사하는 것인데, 이것이 두가지로 나누어지게 된다.

Shallow, Deep 이렇게 나뉘게 된다.


1. Shallow copy

- 객체를 복사하기는 하는데, 내부의 객체들까지는 복사하지 않는다.

- 복사를 하더라도, 내부에서 객체들을 사용하고 있었다면, 전에 바라보던 메모리영역을 그대로 사용한다.


2. Deep copy

- 객체의 복사뿐만 아니라, 내부의 객체들까지도 복사한다.

- 말그대로, 전부다 다른 공간에 백업하는 개념


예제는 다음과 같다.

shallowCopy에서는 그냥 상위의 clone을 호출하여서 돌려주고,

clone를 호출하게 된다면, 객체 내부의 객체들까지 clone하여서 넣어주도록 한다.


public class CloneObject implements Cloneable {

	private ArrayList<Integer> array;
	private int number;
	
	// shallow copy
	public CloneObject shallowCopy() {

		try {
			return (CloneObject)super.clone();
		} catch(CloneNotSupportedException e) {
			return null;
		}
	}

	// deep copy
	@SuppressWarnings("unchecked")
	@Override
	protected CloneObject clone() throws CloneNotSupportedException {

		CloneObject object = (CloneObject)super.clone();
		object.array = (ArrayList<Integer>)array.clone();
		object.number = number;
		
		return object;
	}
}

'Language > Java' 카테고리의 다른 글

[Java]System.arraycopy  (0) 2015.01.23
[Java]정규표현식  (0) 2015.01.06
[Java]Flag이용하기.  (0) 2014.09.19
Java의 접근 제한자  (0) 2014.08.13
System.currentTimeMillis()와 System.nanoTime()  (0) 2014.03.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함