โถ ์ง๋ ฌํ
*์ง๋ ฌํ์ ์ญ์ง๋ ฌํ
ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฉด ์ธ์คํด์ค์ ์ํ, ์ฆ ์ธ์คํด์ค ๋ณ์ ๊ฐ์ ๋ง์น ์๋ช ์ฒด์ฒ๋ผ ๊ณ์ ๋ณํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ธ์คํด์ค์ ์ด๋ ์๊ฐ ์ํ๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ ์ผ์ด ์์ ์๋ ์๋ค. ์ด๋ฅผ '์ง๋ ฌํ'๋ผ๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ฅ๋ ๋ด์ฉ์ด๋ ์ ์ก๋ฐ์ ๋ด์ฉ์ ๋ค์ ๋ณต์ํ๋ ๊ฒ์ '์ญ์ง๋ ฌํ'๋ผ๊ณ ํ๋ค.
๋ค์ ๋งํด ์ง๋ ฌํ๋ ์ธ์คํด์ค ๋ด์ฉ์ ์ฐ์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ์ง๋ ฌํ ๊ณผ์ ์์ ํ๋ ์ผ์ ์ธ์คํด์ค ๋ณ์ ๊ฐ์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
์์ฑ์ |
์ค๋ช |
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 |
๋๊ธ