[Java] 직렬화 / 역직렬화
직렬화 / 역직렬화
✅Java 직렬화와 역직렬화: 객체를 파일로 저장하자!
안녕하세요! 오늘은 Java에서 많이 사용되는 직렬화(Serialization)와 역직렬화(Deserialization)에 대해 살펴보겠습니다. 이 두 기술은 객체를 파일로 저장하고 다시 읽어오는 등의 작업을 할 때 유용하게 사용됩니다.
✅직렬화란 무엇인가?
직렬화는 객체를 바이트 스트림으로 변환하는 과정입니다. 이를 통해 객체의 상태를 저장하거나 네트워크를 통해 객체를 전송할 수 있습니다. Java에서는 Serializable
인터페이스를 구현함으로써 직렬화를 지원합니다.
예시 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
// 직렬화할 객체 생성
Person person = new Person("John Doe", 25);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
// 객체를 파일로 저장
oos.writeObject(person);
System.out.println("직렬화 완료");
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 직렬화 가능한 클래스
class Person implements Serializable {
private String name;
private int age;
// 생성자, 게터, 세터 등...
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
✅역직렬화란 무엇인가?
역직렬화는 직렬화된 바이트 스트림을 객체로 변환하는 과정입니다. 저장된 파일이나 네트워크를 통해 전송된 데이터를 읽어와서 원래의 객체로 복원합니다.
예시 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.*;
public class DeserializationExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
// 파일에서 객체 역직렬화
Person person = (Person) ois.readObject();
System.out.println("역직렬화 완료");
System.out.println("복원된 객체: " + person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
📌주의사항과 고려할 점
- 버전 관리: 클래스의 구조가 변경되면 직렬화된 데이터를 역직렬화할 때 문제가 발생할 수 있으므로 버전 관리에 주의해야 합니다.
- 보안: 직렬화된 데이터는 가독성이 떨어지고, 수정이 쉽지 않아 보안상 이점이 있을 수 있습니다.
- 직렬화의 성능: 대용량의 데이터를 직렬화할 때는 성능 이슈에 주의해야 합니다.
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.