Item 86. Serializable Interface
Serializable 인터페이스는 신중히 구현하라
클래스 선언에 implements Serializable
를 추가하는 것만으로 직렬화가 가능해지지만, 다음과 같은 문제를 야기할 수 있다.
한 번 적용하고 릴리스한 후에는 수정하기 어려움
직렬화된 바이트 스트림 인코딩(직렬화 형태)도 하나의 공개 API가 될 수 있음
또한 커스텀 직렬화를 하지 않고 기본 방식을 사용하게 되면, 적용 당시의 클래스 내부 구현 방식에 묶여 수정 시 직렬화 형태가 변경될 수 있음
버그와 보안 문제가 생길 위험 증가
객체는 생성자를 통해 만드는 것이 기본이지만, 역직렬화를 통해 일반적인 생성자 호출을 통해 생성되는 것이 아님
해당 클래스 신버전 릴리스 시 테스트 요소 증가
클래스 내부 구현 변경 시, 구버전과의 양방향 직렬회/역직렬화 호환성 확인 필요
내부 구현이 변경 된 수 만큼의 버전 테스트 필요
Serializable
인터페이스를 구현하는 것은 신중히 결정해야 하며, Serializable
인터페이스 구현 시 아래의 사항을 고려하는 것이 좋다.
'동작'하는 객체를 표현하는 클래스보단 '값'을 표현하는 클래스에 적합
해당 클래스를 확장하거나 구현 시 직렬화에 대한 부담이 생길 수 있어 상속용으로 설계된 클래스에는 적합하지 않음
Last updated
Was this helpful?