프로그래밍/JAVA

[JAVA] 배열의 복사(Array Copy)

으노로 2020. 8. 1. 21:39

안녕하세요.

이번에는 배열의 복사를 공부해보겠습니다.

 

배열의 복사에는 얕은 복사와 깊은 복사가 있습니다.

얕은 복사는 배열의 주소값만을 복사하는 것이고 깊은 복사는 복사하고자 하는 배열과 동일한 배열을

새롭게 생성하여 복사하고자 하는 배열의 실제 내부 값을 새로운 배열에 복사하는 것입니다.

 

얕은 복사는 배열의 주소값만 복사하기 때문에 복사한 배열을 수정하거나 삭제했을 경우에

원본 배열에도 그대로 반영되게 됩니다.

깊은 복사는 배열의 주소값이 서로 다르기 때문에 복사한 배열을 수정하거나 삭제했을 경우에도

원본 배열에는 아무런 영향을 주지 않습니다.

결국 얕은 복사를 하면 하나의 배열이 두개의 이름을 가지고 있는 것이고

깊은 복사를 하면 두개의 배열이 같은 내용을 가지고 있는 것이라고 생각하면 이해하기 쉽습니다.

 

얕은 복사를 하는 방법은 간단합니다.

배열을 하나 더 선언한 뒤에 복사하고자 하는 배열을 넣어주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 앝은 복사
int[] originArr = {12345};
int[] copyArr = originArr;
 
// 배열 출력
System.out.println("원본 배열 originArr : " + Arrays.toString(originArr));
System.out.println("복사 배열 copyArr : " + Arrays.toString(copyArr));
System.out.println("----------------------------------");
 
// 복사한 배열 수정
copyArr[2= 300;
 
// 배열 수정 후 출력
System.out.println("수정 후 originArr : " + Arrays.toString(originArr));
System.out.println("수정 후 copyArr : " + Arrays.toString(copyArr));
System.out.println("----------------------------------");
 
// 배열의 주소값 출력
System.out.println("originArr의 hachcode : " + originArr.hashCode());
System.out.println("copyArr의 hachcode : " + copyArr.hashCode());

복사를 하기 위해 원본 배열로  int형 배열을 선언하고 초기화하여 값을 저장하였습니다.

그리고 같은 자료형 배열을 하나 더 선언하고 원본 배열을 복사 배열에 넣어주었습니다.

앝은 복사를 하고 원본 배열과 복사 배열을 출력하면 제대로 복사된 것을 볼 수 있습니다.

복사 배열을 수정한 뒤에 다시 한번 출력하니 원본 배열도 같이 수정되었습니다.

원본 배열과 복사 배열의 주소값을 출력하면 같은 주소값을 갖고 있는 것을 볼 수 있습니다.

 

이상으로 배열의 복사에 대해 공부해보았습니다.

수고하셨습니다. 다음 글에서 봬요.