Java

Java 깊은 복사? vs 얕은 복사? (2025. 03. 12)

myinfo0968 2025. 3. 12. 21:31
깊은 복사 vs 얕은 복사

 

얕은 복사(Shallow copy)

 

  • 얕은 복사란 기존 객체의 주소를 그대로 참조하는 객체를 만드는 것이다.
  • 즉, 주소값을 복사하는 것이다
  • 따라서, 복사한 객체의 값을 변경하면 실제 값도 변경이 되는 것이다.

  • 같은 주소값을 참조하기 때문에 하나의 객체가 변경되면 다른 객체가 자동으로 변하는 것이다.

 


 

 

깊은 복사(Deep copy)

 

  • 깊은 복사는 실제 값을 복사하여 Heap 공간에 다른 객체를 만드는 것을 말한다.
  • 즉, 복사한 객체는 기존의 객체와 값은 같을 지라도 주소값은 다르다.

 

 

  • 깊은 복사는 복사 생성자, 복사 팩터리 매서드를 이용할 수 있다.
  • 깊은 복사를 하기 위해서는 Class 명 옆에 implements를 적어서 Cloneable 을 참조할 수 있도록 한 뒤, clone() 매서드를 구현해야 한다.

 

차이점

 

  • 얕은 복사는 위에서 말 한것과 같이 주소값을 참조해서 copy의 값이 바뀌면 기존 객체의 값이 바뀐다.
  • 깊은 복사는 서로 다른 객체를 참조하기 때문에 copy의 값이 바뀌면 기존 객체의 값은 유지된다.
  • 예를 들어 A의 이름은 "조혁준", 성별은 "남자"이고 얕은 복사의 copy도 같은 값("조혁준","남자")을 가진다.
  • 그리고 copy의 값을 바꾸면("임욱호","남자") 객체 A의 값도 ("임욱호","남자")로 바뀐다.
  • 하지만, 깊은 복사에서는 copy의 값을 ("임욱호", "남자")이렇게 바꿔도 객체 A의 값은 ("조혁준", "남자")로 바뀌지 않는다.