* 객체의 직렬화
* 객체의 역직렬화
* local class incompatible:
stream classdesc serialVersionUID = -5993977944878930441,
local class serialVersionUID = -1265691405514514962
ClassC 타입의 객체를 파일에 직렬화 할 당시의, ClassC의 serialVersionUID 값은
"-5993977944878930441" 이었는데, 이후에 field2 를 ClassC에 추가하고 재 컴파일 한 후의
ClassC 안에 serialVersionUID 값은 "-1265691405514514962"이다.
* 상속 관계일 때의 직렬화
1. 부모/자식 모두 Serializable 하면,
* 자식객체를 직렬화 할 때 ===> 자식만이 아니라, 부모객체까지 함께 직렬화된다!!!! (기본 직렬화 동작)
2. 부모만 Serializable 하고,
자식은 Non-serializable 할 때,
* 자식 객체를 직렬화 하면 ===> 위 1과 동일하다!!! (***)
* 즉, 부모의 Serializable 한 성질이 자식에게도 상속됩니다 (*******)
3. 부모만 Non-Serializable 하고,
자식은 Serializable 할 때,
* 자식 객체를 직렬화 하면 ===> 자식객체만 직렬화 된다~!!!!! (위 1,2와 다른 결과)
4. 부모만 Non-Serializable 하고,
자식은 Non-Serializable 할 때,
* 자식 객체를 직렬화 하면 ===> 무조건 오류발생!!!
5. 부모만 Non-Serializable 하고, 부모소스는 다른 벤더에서 만큰 클래스가 소스의 수정불가!
자식은 Serializable 할 때, (이 케이스가 실무 면접 시, 객체 직렬화의 핵심 질문임!)
* 어떻게 하면, 자식/부모 모두 객체의 직렬화를 가능하게 할까!? ===> 방법을 알자!!!! (***)
* 자식 클래스에 아래의 2개의 메소드를 추가하고, 이 메소드 안에서,
직렬화/역직렬화가 애시당초 불가능한 필드에 대해서는, InputStream/OutputStream이 제공하는
메소드로 직접 입/출력을 수행하고, 나머지 Serializable 한 필드는 JVM이 하듯이 동일하게 처리하자!!!
private void writeObject(ObjectOutputStream out) throws IOException { ... }
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { ... }
*Parent
*Child
*실행
'교육과정 기록 > ☕ Java' 카테고리의 다른 글
Generic (제네릭) (0) | 2022.05.11 |
---|---|
외부 프로젝트를 이클립스에서 가져오기 (0) | 2022.04.27 |
객체지향 요약1 (0) | 2022.04.17 |
[4.13] 네트워크 - IP와 Port에 대한 이해 (0) | 2022.04.13 |
[4.11-] 상속 (0) | 2022.04.12 |