본문 바로가기
Dev/Java

04-1.ArrayCopy (얕은 복사)

by YoonYeoJin 2023. 7. 17.

ArrayCopy

ArrayCopy를 배우면서 Stack, Heap에 관련된 메모리 영역을 처음으로 접하게 되었었는데

그와 같이 배웠던 것이 주소값과 관련된 내용들이었다.

 

깊은 복사와 얕은 복사를 다시 정리하지 않으면 배열에 대해서 응용을 잘 못할 것 같아 지금 다시 정리해보겠다!

 

- Stack 영역과 Heap 영역

최초에 배열이 생성되면 Stack 영역에 배열의 주소값이 할당되고 Heap 영역에는 배열의 인덱스값이 저장된다.

Stack영역에 주소값이 저장돼서 Heap영역에 인덱스를 참조하는 방식이다.

 

이 부분이 배열의 복사를 이해할 때 가장 중요한 부분이라 생각하기 때문에 항상 메모리 영역에 대한 이해가 필요할 것 같다.

메모리에 관련한 Remind 게시물도 조만간 정리해서 올려야겠다.

 

1. 얕은 복사

얕은 복사는 원본 배열을 그대로 복사하는 것을 말한다.

쉽게 말해서 주소값까지도 복사를 하는 것이다

 

최초에 origin 배열을 선언한 후 copy 배열 생성 후 그대로 origin을 대입하였다.

아까 살펴 본 메모리 영역에서 설명을 하자면

0x1234라는 주소값을 origin과 copy 배열 둘 다 참고하는 그림이다.

 

이를 확인해보면 

hashcode() 메소드로 각각의 배열의 주소값을 확인해본 결과 같은 주소값을 가진 것을 확인할 수 있었다.

 

이것이 어떤 의미를 갖느냐?

copy 배열 선언 후 copy의 2번 인덱스에 값을 바꿔주었다

그리고 배열을 순차적으로 출력을 해보면

 

원본 배열의 값까지도 바뀐것을 확인할 수 있다.

같은 주소값을 참조하고 있어서 Heap영역에 참조되는 인덱스도 바뀌기 때문에 결론적으로 원본 배열에도 영향을 미치는 것을 확인할 수 있다.

 

얕은 복사 결론!

같은 주소값을 참조하는 배열이므로 복사본의 배열의 어느 한 인덱스 값을 바꾸면 원본 배열에도 영향을 미친다!

 

 

'Dev > Java' 카테고리의 다른 글

05-1. 다양한 함수(Math.random)  (1) 2023.07.25
04-2.ArrayCopy(깊은 복사)  (0) 2023.07.17
03. continue  (0) 2023.07.12
02.while / do-while  (0) 2023.07.12
01.Scanner  (0) 2023.07.09