[JAVA] 얕은 복사와 깊은 복사

문정현·2023년 10월 26일

알고리즘 문제를 풀면서 List를 복사해서 코드를 작성하던중 참조한 리스트와 복사한 리스트의 값이 모두 변경되어 예상과 다른 결과가 나와서 이참에 얕은 복사와 깊은 복사를 정리해 볼까 한다.

얕은 복사

먼저 얕은 복사가 어떤 문제점을 가지고 있는지 코드를 보며 살펴 보자.

String[] a = new String[2];
a[0] = "바꾸기전";
a[1] = "배열";
String[] b = a;
b[0] = "변경된";
b[1] = "배열";

System.out.println(a[0]+a[1]);
System.out.println(b[0]+b[1]);

// 결과
// 변경된배열
// 변경된배열

이런 이유는 얕은 복사는 해당 주소값을 복사하기 때문에 참조한 주소값에 변경을 가하면 같은 참조 주소를 가져오고 있는 모든 배열들의 값이 변경되기 때문이다.

이러한 문제를 해결하기 위해 깊은 복사를 사용한다

깊은 복사

String[] a = new String[2];
a[0] = "바꾸기전";
a[1] = "배열";
String[] b = a.clone();
b[0] = "변경된";
b[1] = "배열";

System.out.println(a[0]+a[1]);
System.out.println(b[0]+b[1]);

// 결과
// 바꾸기전배열
// 변경된배열
profile
기록 == 성장

0개의 댓글