Serializable — 클래스의 직렬화 가능 여부 표시

Serializable — 클래스의 직렬화 가능 여부 표시

Serializable은 클래스의 직렬화 가능 여부를 표시하는 마커 인터페이스(marker interface)예요. 이 인터페이스를 구현하지 않은 클래스의 객체는 직렬화할 수 없어요.

출처: Java API Reference

본문

직렬화 기능을 활성화하려면 클래스가 java.io.Serializable 인터페이스를 구현해야 해요. 구현 클래스는 직렬화에 주의해야 할 의미론적 제약이 있으며, 클래스는 serialVersionUID 필드를 선언해 직렬화 호환성의 버전 식별자로 사용할 수 있어요.

이 인터페이스는 메서드가 없는 마커 인터페이스이며, ObjectOutputStream/ObjectInputStream이 이 인터페이스 구현 여부로 직렬화 가능성을 판단해요. 대부분의 클래스는 implements Serializable만 추가하면 기본 직렬화 형식으로 저장·복원됩니다. 특별한 처리가 필요한 필드는 transient로 표시해 직렬화에서 제외할 수 있고, serialVersionUID를 명시하면 클래스 진화 시에도 호환성을 유지할 수 있어요.

Serializable을 구현하는 클래스는 기본 생성 과정에서 하위 클래스를 제외한 필드 값들을 직렬화 스트림에 포함하며, 역직렬화 시 serialVersionUID가 일치해야 성공합니다.

더 알아보기 (Learn more)