이 질문에 대한 답은 놀랍게도이며, 결코 , 또는 더 현실적으로 당신이 레거시 코드와의 상호 운용성을 위해 강제 경우에만 . 다음은 Joshua Bloch의 Effective Java, 3 판 의 권장 사항입니다 .
새로운 시스템에서 Java 직렬화를 사용할 이유가 없습니다.
오라클의 수석 설계자 Mark Reinhold 는 현재 Java 직렬화 메커니즘을 제거하는 것이 장기적인 목표라고 기록 하고 있습니다.
Java 직렬화에 결함이있는 이유
Java는 Serializable
인터페이스 를 사용하여 선택할 수있는 직렬화 체계를 언어의 일부로 제공합니다 . 그러나이 체계에는 몇 가지 다루기 힘든 결함이 있으므로 Java 언어 디자이너는 실패한 실험으로 간주해야합니다.
- 기본적 으로 객체 의 직렬화 된 형태에 대해 이야기 할 수 있다고 가정 합니다. 그러나 직렬화 체계가 무한히 많아서 직렬화 된 형태가 무한히 많습니다. 구성표를 변경하는 방법없이 하나의 구성표를 적용하면 응용 프로그램에서 가장 적합한 구성표를 사용할 수 없습니다.
- 생성자를 생성하거나 팩토리 메소드가 수행하는 모든 전제 조건 검사를 무시하는 오브젝트를 구성하는 추가 수단으로 구현됩니다. 까다 롭고, 오류가 발생하기 쉽고, 역 직렬화 코드를 테스트하기 어려운 경우가 아니면 코드에 보안 취약점이있을 수 있습니다.
- 다른 버전의 직렬화 된 양식의 상호 운용성을 테스트하는 것은 매우 어렵습니다.
- 불변 개체의 처리는 번거 롭습니다.
대신해야 할 일
대신 명시 적으로 제어 할 수있는 직렬화 체계를 사용하십시오. 프로토콜 버퍼, JSON, XML 또는 사용자 지정 구성표와 같은