728x90
반응형
| 얕은복사 (Shallow Copy)
얕은 복사는 쉽게 말해 '주소 값'을 복사한다는 의미이다.
복사한 객체 B가 원본 객체 A의 주소값을 복사하여 그 안에 있는 힙 영역을 참조한다.
만약 객체 A의 메모리 값을 변경 한다면, 객체 B도 같은 메모리 값을 공유하고 있기 때문에 함께 변경이 된다.
예를들어, A와 B는 201호 집 열쇠를 각자 가진 채로 같은 집에 살고있다고 생각하면 쉽다.
장점 : 같은 힙영역을 공유하고 있기 때문에 메모리를 절약하고 빠르다.
단점 : A를 변경 시 B도 같이 변경되기 때문에 주의가 필요하다.
문법 :
int[] A = {1,2,3,4,5};
int[] B = A;
B[0] = 6;
A = [6,2,3,4,5]
B = [6,2,3,4,5]
| 깊은복사 (Deep Copy)
깊은 복사는 쉽게 말해 '실제 값'을 새로운 메모리 공간에 복사하는 것이다.
복사한 객체 B가 원본 객체 A의 실제 들어있는 값까지 복사하여 독립적인 공간을 만든다.
단순히 '주소값'만 참조하는 것이 아니기 때문에 A의 메모리 값을 변경하더라도 B의 메모리 값은 변경되지 않는다.
새로운 B객체를 생성 후 원본 A객체를 통째로 복사해서 독립적인 새로운 객체를 메모리 영역에 생성하는 것이 깊은 복사이다.
위의 그림처럼 다른 주소값을 가지고 있기 때문에 서로 독립적인 공간을 가진다.
장점 : A를 변경하더라도 B에는 영향이 없다.
단점 : 메모리가 많이 든다.
문법 :
1. for문
int[] A = {1,2,3,4,5};
int[] B = new int[A.length];
for (int i = 0; i < A.length; i++) {
B[i] = A[i];
}
B[0] = 6;
A = [1,2,3,4,5]
B = [6,2,3,4,5]
2. clone
int[] A = {1,2,3,4,5};
int[] B = A.clone();
B[0] = 6;
A = [1,2,3,4,5]
B = [6,2,3,4,5]
728x90
반응형
'CS공부' 카테고리의 다른 글
[알고리즘/JAVA] 에라토스테네스의 체 (0) | 2023.05.12 |
---|---|
[JAVA] 컬렉션 프레임워크와 List ,Set, Map의 개념 및 정리 (0) | 2023.04.27 |
[알고리즘] 브루트 포스(Brute Force) (0) | 2023.04.06 |
valueOf() 와 parseInt() 차이 (0) | 2023.03.29 |
변수와(variable) 자료형(Data Type) (0) | 2023.03.27 |