자바/입출력 IO

직렬화가 가능한 클래스 만들기 - Serializable, transient (1)

백_곰 2022. 4. 29. 11:22

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