깊은 복사 방법에 대해

객체 복사 방법에서 얕은 복사(Shallow Copy)는 데이터가 필드 대 필드로 복사되어도 문제가 발생하지 않을 경우 선택할 수 있는 효과적인 복사 방법입니다. 값형 데이터 뿐만 아니라 불변 객체, 예를들어 string이 그 대상이 될 수 있겠죠. 하지만 불변 객체가 아닐 경우 참조형은 참조 주소 정보만 복사되므로 그 이후에 값이 변경될 경우 오동작을 할 것입니다.

그래서 깊은 복사를 해야 하는데요, 가장 일반적인 깊은 복사 방법은 ICloneable등의 인터페이스를 구현해 클래스 필드까지 깊은 복사를 수동으로 수행하는 방법입니다. 이방법은 전통적이면서 확실하지만 클래스 필드와 클래스 갯수가 많아질 수록 작업량이 급증하는 문제점이 있고 필드가 추가되거나 연관된 클래스가 추가되었을 때 버그가 생길 여지가 많이 발생합니다.

여러분은 깊은 복사를 어떻게 수행하시나요?

좋아요 1

속도나 메모리가 민감하게 다뤄지지 않는다면
아무래도 편의성이 최고 아닐까열? =ㅂ=b
그냥 Serialize Deserialize 로 뽑아내는 게 젤루 간편하고 속편하지욤.
이거 객체가 복잡해지고 일일이 구현하기 힘들 때는 이거보다 간편한 방법이 없을 거여염

대신 WPF 같은 영역에서는 Binding 이 깨진다든지 클립보드 객체가 망가진다든지… 뭐 그런 문제도 있구요.
아무래도 반복적으로 사용하기에는 GC 에 부담을 많이 주는 방식인 건 맞지요.

그래도 뭐… 편의가 더 중요한 상황이라면 일일이 구현하는 것보다 나은 선택이라고 봅니닷 ㅋㅅㅋ

좋아요 3

직렬/역직렬 방법도 좋은 방식이라고 생각합니다. 의견 감사드립니다.

좋아요 1