직렬화(Serialization)
객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미한다.
객체들의 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해준다.
주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용된다.
직렬화 대상객체는 java.io.Serializable를 implements한 클래스 객체여야 하며, 다른 객체를 멤버변수로 갖고 있는 경우 그 객체들도 Serializable을 implements해야 한다.
※ SerialVersionUID
private static final long serialVersionUID
직렬화를 하면 내부에서 자동으로 SerialVersionUID라는 고유의 번호를 생성하여 관리한다.
직렬화/역직렬화 시 이 UID 값이 맞는지 확인 후 처리를 하는데, 값이 다르면 다른 객체로 인식하고 에러를 발생시킨다.그러나 객체의 내용이 변경되면 UID값 역시 같이 바뀌어 버린다.
이를 방지하기 위해 UID를 고유값으로 미리 명시를 해준다. 추후에 객체에 변경이 생겨도 UID는 고정되어있기 때문에 직렬화/역직렬화가 가능하게 된다.
역직렬화(Deserialization)
직렬화된 파일 등을 역으로 직렬화하여 다시 객체의 형태로 만드는 것을 의미한다.
저장된 파일을 읽거나 전송된 스트림 데이터를 읽어 원래 객체의 형태로 복원한다.
※ transient (직렬화 대상에서 제외)
보통 클래스의 멤버변수 전부 직렬화 대상에 해당된다. 하지만 보안 상의 문제나 기타 이유로 멤버변수의 일부를 제외하고 싶다면 transient를 통해 지정할 수 있다.
아래와 같이 유저들의 정보를 담는 User 클래스가 있다고 해보자.아이디, 비밀번호, 이메일 정보 중 비밀번호를 제외하고 싶다면 앞에 transient를 붙이면 끝.
public class User implements Serializable {
private String id;
private transient String password;
private String email;
// ....
}
'개발_웹 > Java' 카테고리의 다른 글
Java | 업캐스팅, 다운캐스팅, instanceof (0) | 2021.05.11 |
---|---|
Java | clone()으로 깊은 복사하기 (0) | 2021.05.02 |
Java | Java에서 Swap 함수 구현 (Java의 call-by-reference) (0) | 2021.02.17 |
Java | 파일 다운로드 (0) | 2019.05.11 |
Java | 파일 업로드 (cos.jar) (0) | 2019.05.11 |