Item 86. Serializable Interface

Serializable 인터페이스는 신중히 구현하라

클래스 선언에 implements Serializable를 추가하는 것만으로 직렬화가 가능해지지만, 다음과 같은 문제를 야기할 수 있다.

  1. 한 번 적용하고 릴리스한 후에는 수정하기 어려움

    • 직렬화된 바이트 스트림 인코딩(직렬화 형태)도 하나의 공개 API가 될 수 있음

    • 또한 커스텀 직렬화를 하지 않고 기본 방식을 사용하게 되면, 적용 당시의 클래스 내부 구현 방식에 묶여 수정 시 직렬화 형태가 변경될 수 있음

  2. 버그와 보안 문제가 생길 위험 증가

    • 객체는 생성자를 통해 만드는 것이 기본이지만, 역직렬화를 통해 일반적인 생성자 호출을 통해 생성되는 것이 아님

  3. 해당 클래스 신버전 릴리스 시 테스트 요소 증가

    • 클래스 내부 구현 변경 시, 구버전과의 양방향 직렬회/역직렬화 호환성 확인 필요

    • 내부 구현이 변경 된 수 만큼의 버전 테스트 필요

Serializable 인터페이스를 구현하는 것은 신중히 결정해야 하며, Serializable 인터페이스 구현 시 아래의 사항을 고려하는 것이 좋다.

  • '동작'하는 객체를 표현하는 클래스보단 '값'을 표현하는 클래스에 적합

  • 해당 클래스를 확장하거나 구현 시 직렬화에 대한 부담이 생길 수 있어 상속용으로 설계된 클래스에는 적합하지 않음

Last updated

Was this helpful?