주소 값을 복사하는 것을 의미
int[] a = {1,2,3,4};
int[] b = a; // 얕은 복사 -> a가 가리키고 있는 배열의 주소값을 복사하게 된다.
똥 그림인거 죄송합니다.
배열은 참조형 변수이며 실제 값이 아닌 주소 값을 가진다.
배열 변수 간에 대입 연산자 (=) 를 사용해서 복사를 하게 되면 주소값만 복사하게 된다.
주소 값만 복사하게 되고 실제 값은 그대로 유지 되는 것을 얕은 복사 라고 한다.
따라서 참조값이 서로 같기 때문에, b에서 해당 배열 안의 값을 변경하게 된다면 a에도 영향이 미치게 된다.
실제 값을 새로운 메모리 공간에 복사하는 것을 의미
얕은 복사처럼 주소 값을 복사하는 것이 아닌 그 내용 자체를 똑같이 만들고 싶을 경우 깊은 복사를 한다.
실제 값을 꺼내서 복사하여 넣는 방식
깊은 복사를 구현하는 방법에는 여러가지 방법이 있다.
Cloneable 인터페이스 구현
복사 생성자
복사 팩토리
등등..
public class CopyName {
private String name;
public CopyName() {
}
// 복사 생성자
public CopyName(CopyName original) {
this.name = name;
}
public static CopyName copy(CopyName original) {
CopyName copy = new CopyName();
copy.name = original.name;
return copy;
}
이런 식으로 복사할 대상의 주소값을 복사하는 것이 아닌 복사 할 대상의 내용(값)을 복사하여 새로운 객체로 만들어버린다.
따라서 복사한 데이터의 값이 변경되어도 원본 데이터에는 영향을 미치지 않는다!