๋ธ๋ก๊ทธ ์ฎ๊ฒผ์ต๋๋ค! ๐ก integer.blog
์๋ฐ์ ์ ์(๋จ๊ถ์ฑ ์ ) 2๊ถ ํ์ต๋ด์ฉ ์ ๋ฆฌ
1. ์ง๋ ฌํ๋?
๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ผ๋ก ๋ง๋๋ ๊ฒ
๊ฐ์ฒด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆผ์ ์ฐ๊ธฐ ์ํด ์ฐ์์ ์ธ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๊ฒ
์คํธ๋ฆผ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ ์ญ์ง๋ ฌํ
* ๊ฐ์ฒด ์ ์
๊ฐ์ฒด๋ ํด๋์ค์ ์ ์๋ ์ธ์คํด์ค๋ณ์์ ์งํฉ.
๊ฐ์ฒด์๋ ํด๋์ค๋ณ์๋ ๋ฉ์๋๊ฐ ํฌํจ๋์ง ์๋๋ค.
๊ฐ์ฒด๋ ์ค์ง ์ธ์คํด์ค๋ณ์๋ค๋ก๋ง ๊ตฌ์ฑ.
๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค๋ ๊ฒ
์ ๊ฐ์ฒด์ ๋ชจ๋ ์ธ์คํด์ค๋ณ์์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ.
๋ ๊ฐ์ฒด๊ฐ ๋์ผํ์ง ํ๋จํ๋ ๊ธฐ์ค
์ ๋ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ณ์์ ๊ฐ๋ค์ด ๊ฐ์์ง์ ๋ฐ๋ฅธ๋ค.
2. ObjectInputStream, ObjectOutputStream
์ง๋ ฌํ = ์คํธ๋ฆผ์ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅ = ObjectOutputStream ์ฌ์ฉ
์ญ์ง๋ ฌํ = ์คํธ๋ฆผ์ผ๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ์ ๋ ฅ = ObjectInputStream ์ฌ์ฉ
2.1. ObjectInputStream๊ณผ ObjectOutputStream์ ๋ณด์กฐ์คํธ๋ฆผ์ด๋ผ ๊ธฐ๋ฐ์คํธ๋ฆผ์ด ํ์ํ๋ค.
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
2.2. ํ์ผ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅ(์ง๋ ฌํ) ๋ฐฉ๋ฒ
FileOutputStream fos = new FileOutputStream("objectfile.ser");
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(new Member()); //objectfile.ser ํ์ผ์ Member ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ์ฌ ์ ์ฅ
2.3. ์ญ์ง๋ ฌํ ๋ฐฉ๋ฒ
FileInputStream fis = new FileInputStream("objectfile.ser");
ObjectInputStream in = new ObjectInputStream(fis);
Member member = (Member)in.readObject(); //readObject()์ ๋ฐํํ์
์ด Object๋ผ์ ํ๋ณํ ํ์
3. ์ง๋ ฌํ ๊ฐ๋ฅํ ํด๋์ค ๋ง๋ค๊ธฐ
์ง๋ ฌํํ๊ณ ์ ํ๋ ํด๋์ค๊ฐ java.io.Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.
3.1. Serializable์ ๊ตฌํํ ํด๋์ค๋ฅผ ์์๋ฐ์๋ ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ๋ค.
public class SuperMember implements Serializable {
String name;
String password;
}
public class Member extends SuperMember {
int age;
}
3.2. Object๊ฐ์ฒด๋ ์ง๋ ฌํํ ์ ์์ง๋ง, ์ค์ ์ ์ฅ๋ ๊ฐ์ฒด์ ์ข ๋ฅ์ ๋ฐ๋ฅธ๋ค.
public class Member implements Serializable {
String name;
String password;
int age;
Object obj = new Object(); // Object๊ฐ์ฒด๋ ์ง๋ ฌํ ๋ถ๊ฐ๋ฅ
Object obj2 = new String("abc"); // ์ค์ ์ ์ฅ๋ ๊ฐ์ฒด์ ์ข
๋ฅ๊ฐ String ์ด๋ฏ๋ก ์ง๋ ฌํ ๊ฐ๋ฅ.
}
3.3. ์ ์ด์ transient๋ก ์ง๋ ฌํ ๋์์์ ์ ์ธ์ํค๊ธฐ
public class Memebr implements Serializable {
String name;
transient String password; // ์ง๋ ฌํ ๋์์์ ์ ์ธ
int age;
transient Object obj = new Object(); // ์ง๋ ฌํ ๋์์์ ์ ์ธ
4. ์ง๋ ฌํ/์ญ์ง๋ ฌํ ์์
4.1. ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ์ฌ ํ์ผ์ ์ ์ฅ
public static void main(String[] args) {
try {
String fileName = "Member.ser";
FileOutputStream fos = new FileOutputStream(fileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream out = new ObjectOutputStream(bos);
Member m1 = new Member("JavaMan", "1234", 29);
Member m2 = new Member("JavaWoman", "0000", 29);
ArrayList<Member> list = new ArrayList<>();
list.add(m1);
list.add(m2);
// ๊ฐ์ฒด ์ง๋ ฌํ
out.writeObject(m1);
out.writeObject(m2);
out.writeObject(list);
out.close();
} catch(IOException e) {
e.printStackTrace();
}
}
4.2. ์์ ์ง๋ ฌํํ ๊ฐ์ฒด๋ฅผ ์ญ์ง๋ ฌํ
public static void main(String[] args) {
try {
String fileName = "Member.ser";
FileInputStream fis = new FileInputStream(fileName);
BufferedInputStream bis = new BufferedInputStream(fis);
ObjectInputStream in = new ObjectInputStream(bis);
// ๊ฐ์ฒด๋ฅผ ์ฝ์ ๋๋ ์ถ๋ ฅํ ์์์ ์ผ์นํด์ผํจ.
// ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ฒด๊ฐ ๋ง์ ๋๋ ArrayList ๊ฐ์ ์ปฌ๋ ์
์ ์ ์ํด์ ์ง๋ ฌํํ๋ ๊ฒ์ด ํธํจ.
Memebr m1 = (Member)in.readObject();
Member m2 = (Member)in.readObject();
ArrayList list = (ArrayList)in.readObject();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}