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/@dm911/Java-%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%ACDeep-Copy%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%ACShallow-Copy-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

 

https://velog.io/@ellyheetov/Shallow-Copy-VS-Deep-Copy