[Java] 복사 생성자

Minit88·2023년 3월 3일
0

[Java]

목록 보기
10/18
post-thumbnail

깊은 복사

완전히 같은 값을 가진 객체를 복사하면서, 이전 객체와 다른 참조 주소를 같는 즉, 똑같은 값의 새로운 객체를 만들어 내는 것이다.

깊은 복사를 하기 위해서는 해당 객체에 대한 메모리를 새로 할당하고 모든 primitive 값을 새 매모리에 복사해 넣어야한다.

아래의 코드로 얕은 복사에 대해 알아보면

int[] a = new int[2];
a[0] = 3;
a[1] = 2;
int[] b = new int[2];
b[0] = a[0];
b[1] = a[1];

int Ha = System.identityHashCode(a[1]);
int Hb =System.identityHashCode(b[1]);
System.out.println(String.format("Ha: %d    Hb: %d",Ha,Hb));

위 코드를 실행해보면

으로 출력값이 나오게 되어 a[1]과 b[1]은 같은 주소를 참조하게 된다. 즉 a[1]과 b[1]은 같은 객체를 참조하게 됨을 알 수가 있었다.

깊은 복사를 하기 위해서는 해당 값을 바로 대입하는 방법이 아닌 새로운 메모리에 복사해야한다.

밑의 두 예제를 비교하면서 복사생성자를 살펴보자

복사 생성자

public void shallowCopyExample(Product product) {
	Product newProduct = product;
}

[코드-1] 얕은 복사

public void DeepCopyExample(Product product) {
	Product newProduct = new Product(product.getId, product.getName, ...);
}

[코드-2] 깊은 복사
설명하기에 앞서 얕은 복사를 코드1으로 칭하고 깊은 복사를 코드 2로 칭한다.

코드1 에서는 해당 product를 받아 바로 newProduct에 대입하게 되어 같은 참조값을 가지고

코드2에서는 Product 클래스에 product의 값을 넣어 새로운 메모리를 할당하게 되어, 기존의 객체를 참조하는 것이 아닌 새로운 객체를 만들게 된다.

profile
" To be BE "

0개의 댓글