Search

직렬화

직렬화 (Serialization)

객체λ₯Ό μŠ€νŠΈλ¦Όμ„ 톡해 μ „μ†‘ν•˜κ±°λ‚˜ 파일둜 μ €μž₯ μœ„ν•΄ λ°”μ΄νŠΈ ν˜•νƒœλ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •

직렬화 μ˜ˆμ‹œμ½”λ“œ

β€’
Person.java
import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } }
Java
볡사
β€’
SerializePerson.java
import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.Scanner; public class SerializePerson { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯ λ°›κΈ° System.out.print("Enter name: "); String name = scanner.nextLine(); System.out.print("Enter age: "); int age = scanner.nextInt(); // Person 객체 생성 Person person = new Person(name, age); // νŒŒμΌμ— 직렬화 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Person.dat"))) { oos.writeObject(person); System.out.println("Person object has been serialized and saved to Person.dat"); } catch (IOException e) { e.printStackTrace(); } finally { scanner.close(); } } }
Java
볡사

역직렬화 μ˜ˆμ‹œμ½”λ“œ

import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class DeserializePerson { public static void main(String[] args) { // νŒŒμΌμ—μ„œ 역직렬화 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Person.dat"))) { Person person = (Person) ois.readObject(); System.out.println("Person object has been deserialized: " + person); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
Java
볡사

SerialVersionUID

클래슀의 ꡬ쑰 λ³€κ²½ μ‹œ, 이미 μ§λ ¬ν™”λœ 객체와 ν΄λž˜μŠ€κ°„μ˜ ν˜Έν™˜μ„±μ„ κ²€μ¦ν•˜κΈ° μœ„ν•œ μ‹λ³„μž
클래슀의 λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œ λ³€κ²½ μ‹œ, serialVersionUID λ₯Ό λ³€κ²½ν•΄μ•Όν•œλ‹€.
버전 λ³€κ²½ 없이, 클래슀λ₯Ό λ³€κ²½ν•˜λ©΄ 역직렬화 μ‹œ, InvalidClassException이 λ°œμƒν•  수 μžˆλ‹€.
import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = 1L; // 고유 μ‹λ³„μž private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getter, Setter, toString() λ“± ν•„μš”ν•œ λ©”μ†Œλ“œλ“€ }
Java
볡사

λ³€κ²½ μ „

private static final long serialVersionUID = 1L;
Java
볡사
β€’
λ³€μˆ˜ μΆ”κ°€
private String name; private int age; private String address;
Java
볡사

λ³€κ²½ ν›„

private static final long serialVersionUID = 2L;
Java
볡사
μ‹œλ¦¬μ–Όλ²„μ „ UID λ₯Ό λ°”κΎΈμ–΄μ£Όμ—ˆλ‹€.