1. 직렬화가 가능한 클래스를 만드는 방법
- 직렬화하고자 하는 클래스가 java.io.Serializable 인터페이스를 구현하도록 하면 된다.
- 그저 아래 코드처럼 따로 구현할 필요없이 implements만 해주면 된다.
public class UserInfo implements java.io.Serializable{
}
- 또한 아래의 코드처럼 조상이 implements를 통해 직렬화하였다면, 자손도 직렬화가 가능하다.
public class SuperInfo implements java.io.Serializable{
}
public class UserInfo extends SuperInfo{
}
- 그러나, 아래의 코드처럼 조상님의 인스턴스 변수(name, password)는 직렬화 대상에서 제외된다.
public class SuperInfo{
String name;
String password;
}
public class UserInfo extends SuperInfo implements java.io.Serializable{
int age;
}
( 만약 name과 password를 직렬화 가능하게 하고 싶다면, 조상에서 implemenst를 하던가 자손에서 직렬화
되도록 하는 코드를 추가해야 한다. )
( 자세한 내용은 예제를 통해 알아보자. )
- 아래의 코드는 오류가 발생했다.
Public class UserInfo implements Serializable{
String name;
String password;
int age;
Object obj = new Object();
// 오류 발생
}
(그 이유는 obj 인스턴스 변수 때문인데, 모든 클래스의 최고 조상인 Object는 직렬화를 구현하지 않았기 때문이다. )
( 그러나 아래의 코드는 가능하다. )
Public class UserInfo implements Serializable{
String name;
String password;
int age;
Object obj = new String("abc");
//String은 직렬화 가능
}
( 직렬화는 실제 타입이 아닌 연결된 객체의 종류에 의해서 결정된다. )
- 만약 직렬화가 안되는 변수는 제어자 위치에 transient를 붙여서 제외할 수 있다.
( 또한 보안상 직렬화를 하면 안되는 변수에도 붙일 수 있다. )
( 그러므로, 다르게 표현하면 직렬화가 가능한 변수이다. )
다음장
직렬화가 가능한 클래스 만들기 - Serializable, transient (2) (tistory.com)
직렬화가 가능한 클래스 만들기 - Serializable, transient (2)
kind-coding.tistory.com
'자바 > 입출력 IO' 카테고리의 다른 글
직렬화가 가능한 클래스 만들기 - Serializable, transient (2) (0) | 2022.04.29 |
---|---|
직렬화(Serializtion): Object 입출력 스트림 (0) | 2022.04.29 |
표준 입출력과 File: File(4) (0) | 2022.04.28 |
표준 입출력과 File: File(3) (0) | 2022.04.28 |
표준 입출력과 File: File(2) (0) | 2022.04.28 |