얕은 복사(Shallow Copy)는 '주소 값'을 복사한다는 의미이며,
깊은 복사(Deep Copy)는 '실제 값'을 새로운 메모리 공간에 복사한다는 의미이다.
얕은 복사
얕은 복사의 경우 주소 값을 복사하기 때문에 참조하고 있는 실제값이 같다.
따라서 복사한 객체가 변경된다면 기존의 객체도 변경된다.
동일한 주소를 참조하고 있기 때문이다.
int[] arrData1 = {1,2,3};
int[] arrData2 = arrData;
arrData2[0] = 10;
System.out.println(arrData1[0]); -> 10
깊은 복사
깊은 복사의 경우 복사하려는 원본 객체에 대해
인스턴스화할 수 있는 클래스 내부의 클래스 변수(static)와 메서드(static)뿐 아니라 인스턴스 값 모두를 복사하여
원본 객체로부터 독립적인 객체를 생성한다.
원본과 주소가 다르다.
int[] arrData1 = {1,2,3};
int[] arrData2 = arrData.clone();
// int[] arrData2 = arrData.copyOf();
// copyOf() 함수는 배열의 시작점부터 원하는 길이까지 배열을 복사
// int[] arrData3 = arrData.copyOfRange();
// copyOfRange() 함수는 원하는 시작점부터 원하는 길이까지 배열을 복사
arrData2[0] = 10;
System.out.println(arrData1[0]); -> 1
'Languages > Java' 카테고리의 다른 글
[Java] try-with-resources 예외 처리 (0) | 2024.08.22 |
---|---|
[Java] Scanner vs BufferedReader 사용자 입력 받기 (0) | 2024.08.08 |
[Java] == 과 equals()로 문자열 비교하기 (0) | 2024.06.28 |
[Java] 자바는 컴파일 언어? 인터프리터 언어? (0) | 2024.06.27 |