[Effective-Java] Chapter12 #86. Serializable을 구현할지는 신중히 결정하라
·
Reference/Effective-Java
직렬화를 지원하기란 짧게 보면 손쉬워 보이지만, 길게 보면 아주 값비싼 일이다. 📌 직렬화 단점 1️⃣ 릴리즈한 뒤에 수정하기 어렵다. 직렬화된 byte stream encoding(직렬화 형태)도 하나의 공개 API가 된다. 기본 직렬화 형태를 사용하면 private와 package-private 인스턴스 필드마저 API로 공개하는 꼴이다. (캡슐화와 정보 은닉성이 깨진다.) 적용 당시 클래스 내부 구형 방식에 영원히 묶이게 된다. 뒤늦게 클래스 내부 구현을 손보면 직렬화 형태가 달라지므로 버전 호환성이 깨진다. 직렬화 형태를 유지하면서 내부 표현을 바꿀 수는 있지만, 어려우면서 지저분한 혹을 남긴다. 직렬화 클래스를 만들 대는 길게 보고 감당할 수 있는 만큼 고품질 직렬화 형태도 주의해서 함께 설계하..