반응형
개념
- 직렬화 (Serialization)
- 객체를 바이트 스트림으로 변환하여 디스크에 저장하거나 네트워크를 통해 전송할 수 있도록 처리.
- 직렬화된 객체는 그 상태를 유지하면서 외부 시스템에 전달되거나 저장
- 역직렬화 (Deserialization): 직렬화된 바이트 스트림을 읽어서 원래의 객체로 복원
언제 사용되나?
- 네트워크 전송: 객체를 네트워크를 통해 전송할 때객체를 바이트 스트림으로 직렬화, 수신한 쪽에서는 이를 역직렬화하여 객체 복원
- 파일 저장: 객체의 상태를 파일에 저장 후 사용할 때 복원
- 세션 관리: 웹 애플리케이션에서는 세션 객체를 저장할 때 객체를 직렬화하여 서버 메모리나 파일에 저장하고, 필요한 시점에 역직렬화하여 사용
- 캐싱: 객체를 캐시에 저장하고 나중에 다시 가져오기 위해 직렬화하여 저장
Java에서 직렬화
Java에서는 객체를 직렬화하기 위해 Serializable 인터페이스를 사용
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
}
serialVersionUID 란?
클래스의 버전을 관리하기 위한 고유 식별자.
즉, 직렬화/역직렬화를 할 때 이 값으로 해당 클래스의 특정 버전에 맞는지 아닌지를 판단하겠다는 것.
ex) Person 클래스에 phoneNumber, address 등의 필드가 추가 혹은 삭제 될 수 있으므로 클래스의 버전 식별이 필요
-> 선언하지 않아도 컴파일러가 자동으로 생성하지만.. 여러이유(포스팅에선 생략)로 자바에선 선언하는 것을 권장하고 있다
+) 직렬화에서 제외할 필드는 transient 키워드를 사용하여 직렬화되지 않도록 처리 가능
private transient String password;
728x90
반응형
'개발 > JAVA' 카테고리의 다른 글
JAVA 14 - Record Class (0) | 2025.02.03 |
---|---|
[JAVA] Jackson 직렬화, 역직렬화 (0) | 2025.02.03 |
[JAVA] 접근제한자가 private인 메소드를 호출하는 방법 (1) | 2022.10.13 |
[JAVA] 배치(bat), 쉘(sh) 실행하기 (1) | 2022.05.18 |
[JAVA] KeyStore에 Root 인증서 등록하기(SSLHandshakeException, PKIXException) (1) | 2022.05.18 |
댓글