(아주 간단하게 설명됨 주의)
얕은 복사 Shallow Copy
- 변수 혹은 객체의 주소값(참조값)을 복사하는 것
- 메모리 상의 같은 곳을 가리키는 참조 변수가 하나 더 생기게 됨
- C, C++에서 포인터 사용 시 얕은 복사가 이루어짐
int a = 3;
int* p = &a; // Shallow Copy
a = 5;
printf("%d", *p); // 출력 : 5
물론 엄밀히 말하면 포인터는 Shallow Copy의 영역이 아니긴 하고(명시적으로 주소값을 복사하는 것이기 때문에)오히려 Shallow Copy를 이해하는데 도움이 되는 친구라서, JAVA 코드를 하나 더 준비했다.
int[] arr = { 1, 2, 3 };
int[] arr2 = arr;
for(int i = 0 ; i < 3 ; i++)
arr[i] += arr[i];
for(int i = 0 ; i < 3 ; i++)
System.out.printf("%d ", arr2[i]); // 출력 : 2 4 6
자바에서 배열이나 인스턴스의 복사는 일반적으로 얕은 복사로 이루어지기 때문에 위와 같은 상황을 주의해야 한다.
깊은 복사 Deep Copy
- 변수 혹은 객체의 내용을 복사하는 것
- 메모리 상에 같은 내용을 가진 변수/객체가 별도로 존재하게 됨
int a = 3;
int b = a; // Deep Copy
a = 5;
printf("%d", b); // 출력 : 3
메모리 상에 b라는 변수를 저장할 공간을 별도로 만들고 a의 값을 깊은 복사해서 저장한다.
'취업 > 준비' 카테고리의 다른 글
pure OOP / Java는 왜 pure OOP가 아닐까? (0) | 2019.11.05 |
---|---|
[보안] 대칭키 / 비대칭키(공개키) / SSL handshaking (0) | 2019.11.03 |
[알고리즘/정렬] Quick Sort 퀵 정렬 - C++ 코드, 시간/공간 복잡도 (0) | 2019.10.27 |
[알고리즘/정렬] Merge Sort 합병 정렬 - C++ 코드, 시간/공간 복잡도 (0) | 2019.10.27 |
Class VS Object VS Instance (0) | 2019.10.24 |