본문 바로가기
개발/JAVA

[JAVA] 직렬화(Serialized), 역직렬화(Deserialization)

by zuzuu 2025. 2. 3.
반응형

개념

  • 직렬화 (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
반응형

댓글