- 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 댓글 - 한 쪽에서 수정이 발생되면 복사한 객체에도 영향을 준다.