We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
어떤 클래스의 인스턴스를 직렬화 할 수 있게 하려면 클래스 선언에 implements Serializable만 덧붙이면 된다.
// 이런 클래스가 있다고 예를 들어보자 public class Member implements Serializable { private String name; private String email; private int age; // 생략 }
ANyibG9nLmV4ABpWhhbi5YW0xLk1lbWJlcgAAA3b293YAABAg ...
public class Member implements Serializable { private String name; private String email; private int age; // code 속성을 추가 private int code; }
java.io.InvalidClassException
serialVersionUID
serialVersionUID를 명시적으로 선언하여 클래스 변경으로 인한 역직렬화 문제를 해결할 수 있다.
public class Member implements Serializable { static final long serialVersionUID = 1L; private String name; private String email; private int age; // code 속성을 추가 private int code; }
Serializable
The text was updated successfully, but these errors were encountered:
qkrqudcks7
No branches or pull requests
Serializable을 구현할지는 신중히 결정하라
Serializable
어떤 클래스의 인스턴스를 직렬화 할 수 있게 하려면 클래스 선언에 implements Serializable만 덧붙이면 된다.
Serializable 구현의 문제점
1. Serializable을 구현하면 릴리스한 뒤에는 수정하기 어렵다.
위 클래스를 직렬화를 했을 때
ANyibG9nLmV4ABpWhhbi5YW0xLk1lbWJlcgAAA3b293YAABAg ...
위 클래스에 code 속성을 추가 한 다음 직렬화한 데이터를 역직렬화 하면 ?
java.io.InvalidClassException
발생한다.serialVersionUID
가 다르기 때문이다.해결 방법
serialVersionUID
를 명시적으로 선언하여 클래스 변경으로 인한 역직렬화 문제를 해결할 수 있다.2. 버그와 보안 구멍이 생길 위험이 높아진다.
3. 해당 클래스의 신버전을 릴리스할 때 테스트 할 것이 늘어난다.
4.
Serializable
구현 여부는 가볍게 결정할 사안이 아니다.5. 상속용으로 설계된 클래스는 대부분
Serializable
을 구현하면 안되며, 인터페이스도 대부분Serializable
을 확장해서는 안된다.6. 내부클래스는 직렬화를 구현하지 말아야 한다.
Serializable
을 구현해도 된다.핵심정리
Serializable
은 구현한다고 선언하기는 쉽지만, 그것은 눈속임일 뿐이다.Serializable
구현은 아주 신중하게 이뤄져야 한다.Serializable
구현 가능Serializable
구현 불가능The text was updated successfully, but these errors were encountered: