[Java] 깊은 복사 vs 얕은 복사

이병수·2024년 1월 2일
0

Java

목록 보기
10/27
post-thumbnail
post-custom-banner

깊은 복사 vs 얕은 복사


얕은 복사란??

주소 값을 복사하는 것을 의미

int[] a = {1,2,3,4};
int[] b = a;  // 얕은 복사 -> a가 가리키고 있는 배열의 주소값을 복사하게 된다.

똥 그림인거 죄송합니다.

  • 배열은 참조형 변수이며 실제 값이 아닌 주소 값을 가진다.

  • 배열 변수 간에 대입 연산자 (=) 를 사용해서 복사를 하게 되면 주소값만 복사하게 된다.

  • 주소 값만 복사하게 되고 실제 값은 그대로 유지 되는 것을 얕은 복사 라고 한다.

  • 따라서 참조값이 서로 같기 때문에, b에서 해당 배열 안의 값을 변경하게 된다면 a에도 영향이 미치게 된다.


깊은 복사란??

실제 값을 새로운 메모리 공간에 복사하는 것을 의미

  • 얕은 복사처럼 주소 값을 복사하는 것이 아닌 그 내용 자체를 똑같이 만들고 싶을 경우 깊은 복사를 한다.

  • 실제 값을 꺼내서 복사하여 넣는 방식

깊은 복사를 구현하는 방법에는 여러가지 방법이 있다.

  1. Cloneable 인터페이스 구현

  2. 복사 생성자

  3. 복사 팩토리

등등..

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;
    }
  • 이런 식으로 복사할 대상의 주소값을 복사하는 것이 아닌 복사 할 대상의 내용(값)을 복사하여 새로운 객체로 만들어버린다.

  • 따라서 복사한 데이터의 값이 변경되어도 원본 데이터에는 영향을 미치지 않는다!


참고

스파르타 코딩 - Java 웹 개발

https://zzang9ha.tistory.com/372

profile
백엔드 개발자가 되고 싶어요
post-custom-banner

0개의 댓글