객체 복사 방법에서 얕은 복사(Shallow Copy)는 데이터가 필드 대 필드로 복사되어도 문제가 발생하지 않을 경우 선택할 수 있는 효과적인 복사 방법입니다. 값형 데이터 뿐만 아니라 불변 객체, 예를들어 string이 그 대상이 될 수 있겠죠. 하지만 불변 객체가 아닐 경우 참조형은 참조 주소 정보만 복사되므로 그 이후에 값이 변경될 경우 오동작을 할 것입니다.
그래서 깊은 복사를 해야 하는데요, 가장 일반적인 깊은 복사 방법은 ICloneable
등의 인터페이스를 구현해 클래스 필드까지 깊은 복사를 수동으로 수행하는 방법입니다. 이방법은 전통적이면서 확실하지만 클래스 필드와 클래스 갯수가 많아질 수록 작업량이 급증하는 문제점이 있고 필드가 추가되거나 연관된 클래스가 추가되었을 때 버그가 생길 여지가 많이 발생합니다.
여러분은 깊은 복사를 어떻게 수행하시나요?