Java에서 인스턴스의 딥 클론 / 복사를 수행하는 권장 방법이 있는지 궁금합니다.
나는 3 가지 해결책을 염두에두고 있지만 일부를 놓칠 수 있으며 귀하의 의견을 듣고 싶습니다
편집 : Bohzo propositon을 포함시키고 질문을 수정하십시오 : 얕은 복제보다는 깊은 복제에 관한 것입니다.
스스로 해:
속성 다음에 수동으로 복제 속성을 코딩하고 변경 가능한 인스턴스도 복제되는지 확인하십시오.
pro :
-수행 할 작업 제어
-빠른 실행
단점 :
-작성 및 유지 관리가 지루합니다
.-버그가 발생하기 쉽습니다 (복사 / 붙여 넣기 실패, 속성 누락, 변경 가능한 속성 재 지정)
반사 사용 :
자체 리플렉션 도구 또는 자카르타 커먼 빈과 같은 외부 도우미를 사용하면 한 줄로 작업을 수행하는 일반적인 복사 방법을 쉽게 작성할 수 있습니다.
pro :
-작성하기 쉬움
-유지 보수
불필요 :
-발생 제어력 감소
-리플렉션 도구가 하위 오브젝트도 복제하지 않는 경우 가변 오브젝트로 버그가 발생하기 쉬움
-실행 속도 저하
복제 프레임 워크를 사용하십시오.
다음과 같은 프레임 워크를 사용하십시오.
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro :
-리플렉션과 동일
-정확하게 복제 될 대상에 대한 더 많은 제어
단점 :
-모든 가변 인스턴스는 계층 구조의 끝에서도 완전히 복제
됩니다. 실행 속도가 매우 느릴 수 있습니다.
런타임에 바이트 코드 계측을 사용하여 복제본 작성
javassit , BCEL 또는 cglib를 사용하면 한 손으로 작성하는 것만 큼 빠른 전용 복제기 를 생성 할 수 있습니다. 누군가이 목적을 위해 이러한 도구 중 하나를 사용하여 lib를 알고 있습니까?
내가 여기서 놓친 것?
어느 것을 추천 하시겠습니까?
감사.