86. Serializable을 구현할지는 신중히 결정하라
implements Serializable 만 붙이면 끝?
진실은 아니다.
문제들
릴리즈 뒤 수정이 어렵다.
직렬화된 바이트 스트림 인코딩도 하나의 공개 API 가 되어, 영원히 지원해야 한다
private, package-private 인스턴스들도 공개 API가 된다.
새로운 버전에 대한 테스트 증가
신버전으로 직렬화 후 구버전으로 역직렬화 가능한지 확인 필요 (그 반대도)
나머지 사례 이해 안됨...
역사적으로,
BigInteger와 Instant 같은 "값" 클래스와 컬렉션 클래스들은 Serializable 을 구현하고 스레드 풀 처럼 "동작"하는 객체를 표현하는 클래스들은 구현 안함
상속용으로 설계된 클래스는 Serializable 을 구현하면 안된다.
Interface도 대부분 Serializable 를 확장해선 안된다.
확장하려는 사람에게 큰 부담을 안겨주는것.
만약 상위 클래스가 직렬화를 지원하지 않지만, 하위 클래스는 지원하려 할때
이런 클래스를 역직렬화 하려면, 상위클래스는 매개변수가 없는 생성자를 제공해야 하는데, 그렇지 않으려면, 하위 클래스에서는 프록시 패턴을 이용해야한다. (item 90)
내부 클래스는 직렬화를 구현하지 말자
Last updated