Programming/JAVA

자바(JAVA) 직렬화, 역직렬화

통통만두 2023. 10. 31. 06:12
반응형

자바 직렬화와 역직렬화 - 객체의 저장과 복원

자바에서 직렬화와 역직렬화는 데이터를 객체로 변환하고 그 반대 과정을 수행하는 중요한 개념입니다. 이러한 프로세스는 객체를 파일에 저장하거나 네트워크를 통해 전송하는데 유용하며, JAVASerializable 인터페이스를 사용하여 구현됩니다.

 

1. 직렬화 (Serialization)

직렬화는 객체를 이진 형식으로 변환하여 파일이나 네트워크를 통해 전송 가능한 형태로 만드는 과정입니다. 객체를 직렬화하려면 해당 클래스가 Serializable 인터페이스를 구현해야 합니다.

import java.io.*;

public class SerializationExample implements Serializable {
    private String name;
    private int age;

    // 생성자, getter, setter 등의 멤버 메서드
}

 

직렬화 예제

try {
    FileOutputStream fileOut = new FileOutputStream("object.ser");
    ObjectOutputStream out = new ObjectOutputStream(fileOut);
    out.writeObject(serializableObject);
    out.close();
    fileOut.close();
} catch (IOException e) {
    e.printStackTrace();
}

 

2. 역직렬화 (Deserialization)

역직렬화는 직렬화된 객체를 다시 원래의 객체로 변환하는 과정입니다. 역직렬화를 위해 클래스는 직렬화한 클래스와 동일한 클래스여야 합니다. 역직렬화는 다음과 같이 수행됩니다.

try {
    FileInputStream fileIn = new FileInputStream("object.ser");
    ObjectInputStream in = new ObjectInputStream(fileIn);
    SerializationExample deserializedObject = (SerializationExample) in.readObject();
    in.close();
    fileIn.close();
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

 

직렬화된 데이터를 역직렬화할 때 클래스 버전 및 구조 변경에 주의해야 합니다. 그렇지 않으면 InvalidClassException과 같은 예외가 발생할 수 있습니다.

보안 측면에서, 직렬화된 데이터를 받는 쪽에서 주의해야 합니다. 악의적인 데이터를 역직렬화하려고 시도하는 것을 방지하기 위해 ObjectInputStream에서 적절한 보안 메커니즘을 사용해야 합니다.

직렬화와 역직렬화는 JAVA의 중요한 기능 중 하나이며, 객체의 지속성과 데이터 공유를 위해 사용됩니다. 이러한 프로세스를 올바르게 이해하고 사용하면 데이터를 효율적으로 저장하고 전송할 수 있습니다.

반응형