-
Notifications
You must be signed in to change notification settings - Fork 0
Serialization
모든 Class는 UID를 가지고 있는데 Class의 내용이 변경되면 UID값 역시 같이 바뀌어 버린다. UID값으로 통신한게 정상인지 확인하는데 그 값이 바뀌게 되면 다른 Class로 인식을 해버리게 된다.
이를 방지하기 위해 자바에선 Serializable 인터페이스를 구현하여 이를 보장한다. (implements Serializable) 고유값으로 미리 명시를 해주는 부분이 바로 "private static final long serialVersionUID"이다.
객체를 분해하여 전송하기 위해서는 직렬화(Serialization) 되어야 한다. 객체를 전송하기 위해서는 3가지 단계를 거친다.
(1) 직렬화된 객체를 바이트 단위로 분해한다. (marshalling)
(2) 직렬화 되어 분해된 데이터를 순서에 따라 전송한다.
(3) 전송 받은 데이터를 원래대로 복구한다. (unmarshalling)
마샬링(marshalling)은 데이터를 바이트스트림에 보낼 수 있는 형태로 바꾸는 변환 작업을 뜻한다. 자바에서 마샬링을 적용할 수 있는 데이터는 원시 자료형(boolean, char, byte, short, int, long, float, double)와 객체 중에서 Serializable 인터페이스를 구현한 클래스로 만들어진 객체이다.
객체는 원시 자료형과 달리 일정한 크기를 가지지 않고 객체 내부의 멤버 변수가 다르기 때문에 크기가 천차만별로 달라진다. 이런 문제점을 처리할 수 있는게 ObjectOutputStream 클래스이다.
Serializable 인터페이스는 아무런 메소드가 없고 단순히 자바 버추얼 머신에게 정보를 전달하는 의미만을 가진다.
- 직렬화가 가능한 객체의 조건 (1) 기본형 타입(boolean, char, byte, short, int, long, float, double)은 직렬화가 가능
(2) Serializable 인터페이스를 구현한 객체여야 한다. (Vector 클래스는 Serializable 인터페이스구현)
(3) 해당 객체의 멤버들 중에 Serializable 인터페이스가 구현되지 않은게 존재하면 안된다.
(4) transient 가 사용된 멤버는 전송되지 않는다. (보안 변수 : null 전송)
언마샬링은 바이트스트림을 통해서 전달된 데이터를 원래의 객체로 복구하는 작업이다. ObjectInputStream을 사용하여 데이터를 복구한다.
-
Spring
-
Web
-
Security
-
ETC