본문 바로가기
BackEnd FrontEnd/JAVA

직렬화(serialization) 역직렬화(deserialization)

by forkballpitch 2017. 6. 30.
반응형

객체를 직렬화하여 전송가능한 형태로 만드는것

객체들의 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해준다.

이것은 주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용된다.


역직렬화는 직렬화된 파일 등을 역으로 직렬화하여 다시 객체의 형태로 만드는 것을 의미한다.

저장된 파일을 읽거나 전송된 스트림 데이터를 읽어 원래 객체의 형태로 복원한다.


직렬화를 위한 전제조건

직렬화가 가능한 클래스를 만드는 것


public class A{

}


이런형태라면


public class A implements Serializable{


}



1. serializable 인터페이스를 implements

2. serializable 없는 경우 

   보통의 경우는 직렬화가 불가능하다.

   하지만 클래스간의 관계를 고려해보면 가능한 경우도 있다.

   바로 Serializable을 implement한 클래스를 상속받은경우

3. transient를 이용하여 직렬화 대상에서 제외하기

   보통 클래스의 멤버변수 전부 직렬화 대상에 해당된다. 하지만 보안상의 문제나 기타 이유로 멤버변수의 일부를 제외하고 싶다면 transient를 통해 지정할 수 있다.

4. 다른 객체를 멤버변수로 가지고 있는 경우

  int, long,String 등 기본 자료형 뿐만 아니라 다른 객체를 멤버변수로 사용하는 경우가 굉장히 많다.


그 클래스 중 serializable 인터페이스를 구연한 클래스가 하나도 없다면 직렬화 할 수 없다.

calendar는 java.util에서 제공하는 기본 클래스로 serializable을 구현하고 있기 때문에

직렬화 할 수 있다.

참조하고있는 객체의 직렬화 상태를 확인해야한다.



참고: http://flowarc.tistory.com/entry/Java-%EA%B0%9D%EC%B2%B4-%EC%A7%81%EB%A0%AC%ED%99%94Serialization-%EC%99%80-%EC%97%AD%EC%A7%81%EB%A0%AC%ED%99%94Deserialization


  

반응형

'BackEnd FrontEnd > JAVA' 카테고리의 다른 글

접근제한  (0) 2017.07.20
assert 함수란  (0) 2017.07.03
volatile  (0) 2017.06.29
String, StringBuffer  (0) 2017.06.27
string 배열 나누기  (0) 2016.11.22