โถ ์ง๋ ฌํ
*์ง๋ ฌํ์ ์ญ์ง๋ ฌํ
ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฉด ์ธ์คํด์ค์ ์ํ, ์ฆ ์ธ์คํด์ค ๋ณ์ ๊ฐ์ ๋ง์น ์๋ช ์ฒด์ฒ๋ผ ๊ณ์ ๋ณํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ธ์คํด์ค์ ์ด๋ ์๊ฐ ์ํ๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ ์ผ์ด ์์ ์๋ ์๋ค. ์ด๋ฅผ '์ง๋ ฌํ'๋ผ๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ฅ๋ ๋ด์ฉ์ด๋ ์ ์ก๋ฐ์ ๋ด์ฉ์ ๋ค์ ๋ณต์ํ๋ ๊ฒ์ '์ญ์ง๋ ฌํ'๋ผ๊ณ ํ๋ค.
๋ค์ ๋งํด ์ง๋ ฌํ๋ ์ธ์คํด์ค ๋ด์ฉ์ ์ฐ์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ์ง๋ ฌํ ๊ณผ์ ์์ ํ๋ ์ผ์ ์ธ์คํด์ค ๋ณ์ ๊ฐ์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
|
์์ฑ์ |
์ค๋ช |
|
ObjectInputStream(InputStream in) |
InputStream์ ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ObjectInputStream์ ์์ฑํ๋ค. |
|
ObjectOutputStream(OutputStream out) |
OutputStream์ ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ObjectOutputStream์ ์์ฑํ๋ค. |
โ
โ
SerializationTest.java
package stream.serialization;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
class Person {
private static final long serialVersionUID = -1503252402544036183L; // ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํ ์ ๋ณด
String name;
String job;
public Person() {
}
public Person(String name, String job) {
this.name = name;
this.job = job;
}
public String toString() {
return name + "," + job;
}
}
public class SerializationTest {
public static void main(String[] args) throws ClassNotFoundException {
Person personAhn = new Person("์์ฌ์ฉ", "๋ํ์ด์ฌ");
Person personKim = new Person("๊น์ฒ ์", "์๋ฌด์ด์ฌ");
try (FileOutputStream fos = new FileOutputStream("serial.out");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(personAhn);
oos.writeObject(personKim); // personAhn๊ณผ personKim์ ๊ฐ์ ํ์ผ์ ์(์ง๋ ฌํ)
} catch (IOException e) {
e.printStackTrace();
}
try (FileInputStream fis = new FileInputStream("serial.out");
ObjectInputStream ois = new ObjectInputStream(fis)) {
Person p1 = (Person) ois.readObject();
Person p2 = (Person) ois.readObject(); // personAhn๊ณผ personKim์ ๊ฐ์ ํ์ผ์์ ์ฝ์ด๋ค์(์ญ์ง๋ ฌํ)
System.out.println(p1);
System.out.println(p2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
<์คํ ๊ฒฐ๊ณผ>

โ
โ
โ
*Serializable ์ธํฐํ์ด์ค
์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์ถ๋ ฅํ๋ฉด์ฒ๋ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ง๋ ฌํ๋ ์ธ์คํด์ค ๋ด์ฉ์ด ์ธ๋ถ๋ก ์ ์ถ๋๋ ๊ฒ์ด๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง๋ ฌํ๋ฅผ ํ๊ฒ ๋ค๋ ์๋๋ฅผ ํ์ํด์ผ ํ๋ค. ๋ฐ๋ผ์ Person ํด๋์ค์ ๋ง์ปค ์ธํฐํ์ด์ค์ธ Serializable ์ธํฐํ์ด์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํ๋ค.

โ<์คํ ๊ฒฐ๊ณผ>

์ฒ์ ์์ฑํ ํด๋์ค ๋ด์ฉ์ด ๊ทธ๋๋ก ์ฝํ๊ณ ๋ณต์๋ ๊ฒ์ ์ ์ ์๋ค
โ
โ
โ
*transient ์์ฝ์ด
์ง๋ ฌํ ๋์์ด ๋๋ ํด๋์ค๋ ๋ชจ๋ ์ธ์คํด์ค ๋ณ์๊ฐ ์ง๋ ฌํ๋๊ณ ๋ณต์๋๋ค. ๊ทธ๋ฐ๋ฐ ์ง๋ ฌํ ๋ ์ ์๋ ํด๋์ค(socket ํด๋์ค๋ ์ง๋ ฌํ๋ ์ ์์)๊ฐ ์ธ์คํด์ค ๋ณ์๋ก ์๋ค๊ฑฐ๋ ์ง๋ ฌํํ๊ณ ์ถ์ง ์์ ๋ณ์๊ฐ ์์ ์๋ ์๋ค. ๊ทธ๋ด ๋ transient ์์ฝ์ด๋ฅผ ์ด๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ๋ณ์๋ ์ง๋ ฌํ๋๊ณ ๋ณต์๋๋ ๊ณผ์ ์์ ์ ์ธ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด ์๋ฃํ์ธ ๊ฒฝ์ฐ์ null ๊ฐ์ด ๋๋ค. ์จ๊ฒจ์ผ๋๊ฑฐ๋ ์ํธํํด์ผ๋๋ ์ ๋ณด์ ์ฌ์ฉํ๋ค.


job ๋ด์ฉ์ด ์ ์ฅ๋์ง ์์์์ ์ ์ ์๋ค.
โ
โ
โ
*Externalizable ์ธํฐํ์ด์ค
์ง๋ ฌํํ๋๋ฐ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ Externalizable์ด๋ค. Serializable ์ธํฐํ์ด์ค๋ ์๋ฃ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๋ฐ ํ์ํ ๋ถ๋ถ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ๋ก ๊ตฌํํ์ง ์๋๋ค. ํ์ง๋ง Externalizable ์ธํฐํ์ด์ค๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ตฌํํด์ผ ํ ๋ฉ์๋๊ฐ ์๋ค. ๊ฐ์ฒด์ ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ๋ฅผ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ ์ ํ ๋ Externalizable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
โ
โ
Externalizable.java
package stream.serialization;
import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
class Dog implements Externalizable {
String name;
public Dog() {
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF(name); // ์ธ ๋
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = in.readUTF(); // ์ฝ์ ๋
}
public String toString() {
return name;
}
}
public class ExternalizableTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Dog myDog = new Dog();
myDog.name = "๋ฉ๋ฉ์ด";
try(FileOutputStream fos = new FileOutputStream("external.out");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(myDog);
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream fis = new FileInputStream("external.out");
ObjectInputStream ois = new ObjectInputStream(fis);
Dog dog = (Dog)ois.readObject();
System.out.println(dog);
}
}
<์คํ ๊ฒฐ๊ณผ>

โ
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Java-๊ธฐ์ด] ์ค์ต (ํ์ ์ฐ์ถ ํ๋ก๊ทธ๋จ) (0) | 2021.02.24 |
|---|---|
| [Java-๊ธฐ์ด] ๊ทธ ์ธ ์ ์ถ๋ ฅ ํด๋์ค (0) | 2021.02.23 |
| [Java-๊ธฐ์ด] ๋ณด์กฐ ์คํธ๋ฆผ (0) | 2021.02.23 |
| [Java-๊ธฐ์ด] ๋ฌธ์ ๋จ์ ์คํธ๋ฆผ (0) | 2021.02.23 |
| [Java-๊ธฐ์ด] byte ๋จ์ ์คํธ๋ฆผ (0) | 2021.02.22 |
๋๊ธ