- Shallow Copy & Deep Copy2021년 04월 13일 23시 48분 49초에 업로드 된 글입니다.작성자: jCurve728x90반응형
얕은복사와 깊은복사에 대해 알아봅시다.
얕은 복사
- 한 쪽에서 수정이 발생되면 복사한 객체에도 영향을 준다.
- 얕은 복사가 참조값을 복사하기 때문에 복사한 객체도 같은 참조값을 가지므로 수정이 반영되는 것
깊은 복사
- 참조값을 복사하는 것이 아니라 , 원본 객체의 내부 객체의 값까지 복사해서 힙 영역에 객체를 새로 만드는 것으로 수정이 일어나도 원본과는 관계가 없다.
위의 클래스처럼 clone을 재정의한 클래스를 가지고 비교해보겠다.
실행 결과를 보면 clone을 통해 복사한 객체가 얕은 복사라는 것을 알 수 있다.
여기서 생각드는건 내가 객체를 복사할 때 대부분 원본에 복사본의 수정사항을 반영하고 싶을리가 없다는 거다.
그렇다면 clone을 주의해서 재정의해보자.
이제 내부 참조값이 달라진 것을 볼 수 있다. 이처럼 객체 복사시에 의도적으로 얕은 복사를하거나 primitive 타입으로만 이루어진 필드를 가진 클래스를 복사하는 경우 혹은 배열에서의 clone사용이 아니라면 깊은 복사를 위해 위 코드 처럼 새로운 객체를 메모리 공간에 할당하고 원본 값을 전부 대입하여 return해주어야 한다.
이 깊은 복사 방식 또한 복사 생성자 방식과 복사 팩터리 방식이 있다.
복사 생성자 (복사 팩터리는 이걸 팩터리 메서드로 바꾸기만 하면된다)
이렇게 생성자를 사용해서 깊은 복사도 가능합니닷
반응형'JAVA' 카테고리의 다른 글
Iterator 정리 (0) 2021.05.15 Comparable와 Comparator 정리 (0) 2021.04.14 Hash (0) 2021.04.10 Listener 와 Adapter (0) 2021.04.10 equals는 일반 규약을 지켜 재정의하라 (0) 2021.03.29 댓글 - 한 쪽에서 수정이 발생되면 복사한 객체에도 영향을 준다.