본문 바로가기
프로그래밍언어

deep copy, shallow copy, String, Heap, Stack, Immutable, mutable

by 흰색남자 2023. 2. 10.

깊은 복사와 얕은 복사를 공부하려면 immutable과 mutable에 대해 정확히 알고 있어야 한다.

mutable : 변할 수 있는
immutable : 변할 수 없는

 

 

1. 얕은 복사는 스택 메모리의 주소값을 복사 시킨다. mutable 객체일 경우 실제 데이터는 Heap영역에 저장된다. 
그래서 스택영역의 메모리를 복사하는 얕은 복사일 경우에는 원본 데이터가 바뀌기 때문에 주의가 필요하다.

2. 깊은 복사는 힙 메모리의 데이터 까지 복사하기 때문에 Collection 프레임워크에 해당하는 구현체를 복사할 경우에 사용하면 좋다.

 

mutable 객체는 배열, 리스트, 딕셔너리 ( 맵 ), 객체 등 다양한 종류가 있고, 스택에 힙 메모리의 주소가 저장되며 힙 메모리에 실제 데이터가 저장된다.
immutable 객체는 불변 객체, 스택 영역에 실제 데이터가 저장되고 primitive 타입에 해당하는 변수가 저장된다. 
정수 1, 2, 3 이 있다고 하면 

int a = 1;
int b = 2:

a == b // true 결과가 나오게 되는데, 이는 a와 b가 동일한 메모리 주소를 가지고 있기 때문이다.

 

하지만 String은 primitive 타입 객체가 아니다. .char을 엮어서 만든 객체이다.

a == b를 하고 메모리 주소를 찍어보면 동일한 값이 나오는 것을 볼 수 있다.

이 이유는 String pool에 대해 알고 있어야 한다.

일반 Cat을 할당하면 같은 String pool에 할당되어 똑같은 메모리 주소를 가르키지만, new String()을 통한 객체 선언 시 다른 String pool이 만들어지면서 메모리 주소가 바뀐다.

 

 

'프로그래밍언어' 카테고리의 다른 글

CPU L1, L2 캐시와 자바 volatile  (0) 2023.02.18
자바의 Object Class  (0) 2023.02.10
JIT 컴파일러  (0) 2022.12.26
비동기, 동기 통신과 call back  (0) 2022.10.03
call by reference, call by value  (0) 2022.10.03