참조 변수를 복사할때는 두가지 복사가 있다.
1. 얕은 복사
- 단순히 참조 값만 복사하는 것을 의미한다.
- 원본과 복사본이 같은 대상을 참조하고 있기 때문에 어느 하나에 값이 변경이 된다면
둘다 반영된다.
2. 깊은 복사
- 복사본 내용물을 새로운 공간을 할당하여 복사한다.
- 원본과 복사본이 서로 다른 대상을 참조하고 있기 때문에 어느 하나에 값이 변경 되어도
다른 하나에 영향이 없다.
아래는 얕은 복사 예시
public class Shallow {
public static void main(String[] args) {
// 배열 복사하기
int[] arr1 = { 10, 20, 30 };
int[] arr2;
// 얕은 복사(shallow copy)
// 생성시킨 저장공간은 복사되지 않고
// 참조값만 복사되는 현상
arr2 = arr1; // 참조값이 복사 되는것!!!!
System.out.println("----수정 전----");
for(int i=0; i<3; i++) {
System.out.println(arr1[i]+" , "+arr2[i]);
}
arr1[1]= 777; // arr1만 수정
System.out.println("\n-----수정후-----");
for(int i=0; i<3; i++) {
System.out.println(arr1[i]+","+arr2[i]);
}
}
}
깊은 복사 예시
public class Deep {
public static void main(String[] args) {
// 배열 복사하기
int[] arr1 = { 10, 20, 30 }; // 원본,Source
int[] arr2; // 사본, Destination
// 깊은 복사(deep copy)
// 참조 대상의 내용물(실데이터)을 새로운 공간에 복사하는 것
// 수행 과정
// 1. 복사될 공간 확보
arr2 = new int[arr1.length]; // 원본과 같은 크기의 공간을 만든다
// 2. 데이터 복사(for문 이용)
for (int i = 0; i < arr2.length; i++) {
arr2[i] = arr1[i];
}
// --------------------------------------
System.out.println("----수정 전----");
for (int i = 0; i < 3; i++) {
System.out.println(arr1[i] + "," + arr2[i]);
}
arr1[1] = 777; // arr1만 수정
System.out.println("\n-----수정후-----");
for (int i = 0; i < 3; i++) {
System.out.println(arr1[i] + "," + arr2[i]);
}
}
}
'Java' 카테고리의 다른 글
3주차 과제: 연산자 (0) | 2020.11.26 |
---|---|
2주차 과제: 자바 데이터 타입, 변수 그리고 배열(피드백, feedback) (0) | 2020.11.22 |
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.18 |
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.(피드백 feedback) (0) | 2020.11.15 |
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2020.11.14 |