티스토리 뷰

복사는 정보나 물건을 복제하거나, 같은 것을 두 장 겹쳐서 쓰는 것을 일컫는 용어이다

 

얕은 복사, 깊은 복사 이전에 상식적인 의미인 복사라고 알면 됩니다.

 

 

 

데이터 유형에 따라 카피방법이 상이합니다.

 

 

얕은 복사(shallow copy)는 heap영역에 존재하는 reference type의 값 주소를 복사하는 것이고

깊은 복사(deep copy)는 heap영역에 존재하는 reference type의 값 자체를 복사하는 것입니다.

(stack, heap영역의 primtive type 값은 무조건 데이터를 복사해서 새로 할당한다고 생각합니다.)

 

 

primitive type은 데이터 자체를 복사하여 새로 할당하지만

reference type의 경우 얕은 복사, 깊은 복사 모두를 고려해야 합니다. 사용방식에 따라 메모리 주소와 데이터중

어떤 것을 사용할지 변하기 때문입니다.

 

 

 

그냥 deep copy 하면 좋은 게 아닐까?

 

Box라는 인스턴스 안에 굉장히 큰 데이터가 있다고 할 때 새로 복제하기에는

많은 리소스가 필요합니다. 때에 따라서 shallow copy방식으로 적재된 주소의 값만 가져오는 게 효율적일 수 있습니다.

 

 

 

 

 

 

아래 예시들을 보면서 공부해 보겠습니다.

 

 


 11가지 예시

 

 

 

 

 

case1 : 1차원 primitive type을 가지는 배열을 그대로 할당하는 경우

a 변수가 가지는 참조값을 b에 그대로 넣어줍니다.

둘은 같은 배열을 바라봅니다.

 

 

 

case2 : 1차원 primitive type을 가지는 배열에서 Object class의 clone() method를 사용하는 경우

a변수가 참조하는 데이터를 복사하여 새로운 메모리에 적재합니다.

둘은 다른 배열을 바라봅니다.

 

 

case3 : 2차원 primitive type을 가지는 배열에서 반복문으로 복사하는 경우

 

primitive type 값을 그대로 할당해 줍니다.

 

 

case4 : 2차원 primitive type을 가지는 배열에서 System.arrayCopy로 복사하는 경우

 

 

 

 

 


case5 : 2차원 primitive type을 가지는 배열에서 System.arrayCopy + 반복문으로 복사하는 경우

 

 

 

 

 


📦 객체버전

 

준비물

 

 


case6 : 2차원 reference type을 가지는 배열을 그대로 할당하는 경우

 

참조주소를 그대로 할당하기 때문에 a, b 모두 동일한 배열을 사용합니다.

 

 

 

 

case7 : 2차원 reference type을 가지는 배열에서 clone을 사용하는 경우

 

case4와 동일한 맥락입니다.

 

 

 

 

case8 : 2차원 reference type을 가지는 배열에서 clone을 사용하는 경우 

 

case7과 동일한 맥락입니다.

 

 

 

case9 : 2차원 reference type을 가지는 배열에서 system.arrayCopy + 반복문을 사용하는 경우

 

 

 

 

case10 : 2차원 reference type을 가지는 배열에서 system.arrayCopy + 반복문을 사용하는 경우2

 

 

 

case11 : 2차원 reference type을 가지는 배열에서 반복문 + Point instance의 clone()을 사용하는 경우

 

반응형

'Java & Kotlin' 카테고리의 다른 글

Java Lambda  (0) 2022.12.16
Java Collection Framework  (0) 2022.12.14
Java raw type  (0) 2022.12.12
Java Generic  (0) 2022.12.12
Java NIO  (0) 2022.12.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함