JAVA
[JAVA] 깊은 복사, 얕은 복사
정공자씨
2024. 4. 24. 09:40
깊은 복사
정의
- 실제 값을 새로운 메모리 공간에 복사
- 복사된 객체는 완전히 독립적인 메모리를 차지
특징
- 실제 값을 복사
- 새로운 인스턴스를 생성하기 때문에, 복사된 객체는 다른 위치를 가리킴
장점
- 객체 자체의 값를 복사하기 때문에 새로운 객체로 다형성을 부여하거나, 재정의 할 수 있음
단점
- 모든 인스턴스의 값을 가지고 오기 때문에 얕은 복사에 비해 느림
얕은 복사
정의
- 최소한의 복사
- 객체의 주소값을 복사하기기 때문에, 복사된 객체는 같은 위치를 가리킴
- 따라서 참조하고 있는 실제값이 같음
- 값을 복사하는 것이 아니라, 인스턴스가 생성되지 않음
특징
- 참조 타입(reference)을 복사하는 경우에 얕은 복사가 일어남
- 복사하려는 원본 객체에 대해서 새로운 객체를 만들고, 새로운 객체는 원본의 객체를 참조함
장점
- 새로운 인스턴스를 생성하지 않기 때문에, 깊은 복사보다 속도가 빠름
단점
- 복사한 객체는 원본 객체에 종속적임
- 원본 객체가 수정되는 경우, 복사 객체도 동일하게 변동
출처
https://velog.io/@roro/Java-Object-%ED%81%B4%EB%9E%98%EC%8A%A4-clone
https://velog.io/@ellyheetov/Shallow-Copy-VS-Deep-Copy