거인의 코딩일지
[C.S] 얕은복사와 깊은복사란??? 그 둘의 차이점??? 본문
728x90
얕은복사( Shallow Copy) 란??
- 복사하려는 원본 객체에 대해서 새로운 단일 객체 또는 새로운 복합 객체를 만들고 원본 객체를 참조 하는것.
- 즉, 다양한 복합 멤버 변수를 갖고 있는 객체에서 인스턴스가 생성 될 때 인스턴스화 되면서 메모리에 할당한 주소의 값을 참조 한다.
- 복사 객체가 원본 객체에 종속적이다.
- 즉, call-by-reference와 유사한 개념이 된다.
인스턴스화하여 객체를 메모리에 할당했을 때이다. 얕은 복사는 원본 객체 A와 복사 객체 B가 하나의 할당받은 영역을 지정하여 원본 객체 A가 변경되는 경우 B도 똑같은 메모리 상의 영역을 참조하고 있기 때문에 값이 종속적으로 변경된다. 이것이 얕은 복사이다.
public class Shallow_array {
public static void main(String[] args) {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = arr1;
System.out.println(arr1.toString());
System.out.println(arr2.toString());
}
}
위의 소스 코드는 arr1 과 arr2 의 주소의 위치를 확인하는 소스코드이다.
실행하면 두 주소값은 동일한 결과가 나오는데
단순히 정수형 배열 arr2이 arr1을 참조하여 값을 갖고 왔기 때문에 본인이 메모리 영역을 받지 못한 것이다.
이러한 경우 지도상 아파트 위치를 아는 것일 뿐 위치에 있는 아파트가 본인 매매(본인만의 메모리 영역)로 인한 집이 아닌 놀러 가는 경우나 전세나 월세와 같이 본인의 소유가 아닌 타인의 소유를 잠시 빌리는 의미다.
(메모리 값은 컴퓨터에서 자동으로 할당해주는 것이므로 매번 실행 결과가 다를 수 있다.)
얕은 복사의 장점??
- 빠르고 간결 하다.
얕은 복사의 단점???
- 원본 객체가 수정되는 경우 복사 객체가 원본 객체와 동일하게 변동이 생긴다.
깊은 복사( Deep Copy) 란??
- 복사하려는 원본 객체에 대해서 새로운 단일 객체 또는 새로운 복합 객체를 만들고 원본 객체를 대상으로 인스턴스화할 수 있는 클래스 내부의 클래스 변수(static)와 메서드(static)뿐 아니라 인스턴스 값 모두를 복사하여 원본 객체로부터 독립적인 객체를 생성한다.
- 깊은 복사는 새로운 객체가 원본 객체 자체를 Copy 하는 것이다.
- 즉, call-by-values와 유사한 개념이 된다.
위 그림은 좌측은 원본 객체 A이며, 우측은 복사 객체 B이다.
위의 화살표는 A 객체의 있는 내용들을 모두 복사해서 새로운 메모리 영역에 있는 B객체를 할당해 준 것이다. 이때 A와 B는 컴퓨터로부터 각각 다른 메모리 영역을 배정받았으므로 A객체를 수정하거나 B객체를 수정해도 값에 변화가 없는 것이 깊은 복사이다.
public class Deep_array {
public static void main(String[] args) {
int arr1[] = {5, 4, 3, 2, 1};
int arr2[] = arr1.clone();
System.out.println(arr1.toString());
System.out.println(arr2.toString());
}
}
위 코드는 clone()이라는 메소드를 이용하여 원본 객체를 복사 객체로 깊은 복사한 코드이다.
주소 값의 참조가 아닌 값을 통째로 복사하는 깊은 복사이다.
깊은 복사는 위에 얕은 복사의 아파트 주소를 알아서 본인 소유가 아닌 것과 다르게 같은 동 아파트(새로운 메모리 영역)를 통째로 매매하여 복사 객체 본인의 소유가 되는 것으로 이해하면 쉽다.
깊은 복사의 장점??
- 객체 자체를 복사하기 때문에 독립된 새로운 객체로 다형성을 부여하여 사용하거나 재정의할 수 있다.
깊은 복사의 단점??
- 모든 인스턴스 값을 갖고 오기 때문에 얕은 복사에 비해서 상대적으로 느리고 복잡하다.
참고
[Java] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)
얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)는 프로그래밍 언어에서 사용되는 개념입니다. 목차는 다음과 같습니다. 3가지 방법으로 이해를 나눴기 때문에 3가지 방법 중 가장 쉽게 이해할 수 있다
okeybox.tistory.com
728x90
'코딩 > 기초지식' 카테고리의 다른 글
Tibco Rendezvous 동작방식 ??? (0) | 2023.12.18 |
---|---|
Tib 통신??? Tibco Rendezvous 란???? (0) | 2023.12.16 |
[C.S] HTTP 메서드의 멱등성?? 안전한 메서드??? (0) | 2023.10.18 |
[C.S] SASS?? SCSS? 그 둘의 차이점?? 장단점?? (2) | 2023.10.14 |
[C.S] 캐시히트? 캐시미스?? 캐시메모리가 투명하다??? (2) | 2023.10.12 |