"์ค๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฒด๋ฅผ ํ์ผ์ ์ ์ฅํ๊ณ ํ์ผ์์ ์ฝ๋ ๊ฒ์ ์กฐ์ฌํ ๊ฒ์ ๊ธฐ์ตํ ๊ฒ์ ๋๊น?"
"์, ๋ฐฉ๊ธ ์ ๋ ฅ ์คํธ๋ฆผ์์ ์ฝ์ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ ์ฅํ์ต๋๋ค."
"์ ํ์ด, ์๋ฏธ๊ณ . ์ด๋ฐ ์ธ๋ถ ์ฌํญ์ ์์์ฐจ๋ฆฌ๋ค๋ ๊ธฐ์๊ตฐ. ํ์ผ์ ์ ์ฅํ๊ณ ํ์ผ์์ ์ฝ์ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋?"
"๋ฌด์์ ์๋ฃํ์๊ฒ ์ต๋๊น? FileInputStream ๋ฐ FileOutputStream์ ์ ์ธํ๊ณ ์ ์ฅ ๋ฐ ๋ก๋ ๋ฉ์๋์ ์ ๋ฌํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ํด ํผ๋ํ ๊ฒ์ด ์์ต๋๋ค. ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค."
"๋ฐ๊ฐ์์. ์ด์ ์๋ก์ด ์ฃผ์ ์ธ ์ง๋ ฌํ๋ฅผ ์์ํ๊ฒ ์ต๋๋ค ."
์ง๋ ฌํ๋ ์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ์ํํ ๊ฒ๊ณผ ๊ฑฐ์ ๋์ผํ์ง๋ง ํจ์ฌ ๋ ์์ํ๊ณ Java ์์คํ ์ ๋ฐ๋ก ๋ด์ฅ๋์ด ์์ต๋๋ค. Java ๋จธ์ ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ์ ์ฅ ๋ฐ ๋ก๋ ๋ฐฉ๋ฒ๋ ํ์ํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ Java ์์คํ ๋ด๋ถ์ ์ ์ฅ๋๋ฉฐ ์ ์ฒด ์ก์ธ์ค ๊ถํ์ด ์์ต๋๋ค."
๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ ์คํธ๋ฆผ์ ์ ์ฅํ๊ณ ์คํธ๋ฆผ์์ ์ฝ์ต๋๋ค.
public static void main(String[] args) throws Exception
{
Cat cat = new Cat();
//Save a cat to file
FileOutputStream fileOutput = new FileOutputStream("cat.dat");
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
outputStream.writeObject(cat);
fileOutput.close();
outputStream.close();
//Load a cat from file
FileInputStream fiStream = new FileInputStream("cat.dat");
ObjectInputStream objectStream = new ObjectInputStream(fiStream);
Object object = objectStream.readObject();
fiStream.close();
objectStream.close();
Cat newCat = (Cat)object;
}
"๊ทธ๊ฒ ๋ค์ผ?"
"์ ํํฉ๋๋ค. ์คํธ๋ฆผ์ ์ ์ฅํ๊ณ ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ ์ ํ์ ์คํธ๋ฆผ์์ ์ฝ์ ์ ์๋ ๋งค์ฐ ํฌ๊ณ ๋ณต์กํ ์ง๋ ฌํ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค ."
"๊ฑฐ์ ๋ค. ๊ทธ๋ผ ๋ฐ์ดํฐ ์ ํ์ ์๋์?"
"์, ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณ ์ ํ ์ ์ฅ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์๋๋๋ค. ์ผ๋ถ ๊ฐ์ฒด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ถ์ ์ ์ฅํ์ง ์์ต๋๋ค. ๋์ ๋ค๋ฅธ ๊ฐ์ฒด ๋ฐ/๋๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฐธ์กฐํ ๋ฟ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฝ์(System. in), ์ ๋ ฅ ์คํธ๋ฆผ(InputStream) ๋ฑ์ด ์์ต๋๋ค."
์ด๊ฒ์ด ๋ฐ๋ก Java ์ ์์๊ฐ ํน๋ณํ Serializable ์ธํฐํ์ด์ค ๋ง์ปค๋ฅผ ๊ณ ์ํ ์ด์ ์ ๋๋ค . ๋ฐ์ดํฐ์ ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ marker ๋ผ๊ณ ํฉ๋๋ค . ํด๋์ค๋ฅผ "ํ๊ทธ" ๋๋ "ํ์"ํ๋ ๋ฐ๋ง ์ฌ์ฉ๋ฉ๋๋ค. ํด๋์ค๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ถ์ ์ ์ฅํ๋ค๊ณ ๋ฏฟ๋๋ค๋ฉด ์ด๋ฅผ implements Serializable ๋ก ํ์ํ ์ ์์ต๋๋ค .
๋ค์์ ์ง๋ ฌํ๋ฅผ ์ง์ํ๋ ยซcatยป ์์ ์ ๋๋ค.
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
}
๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ(์ ์ฅ)ํ๋ ค๊ณ ํ ๋ Java ์์คํ
์ ์ง๋ ฌํ ์ง์ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ง๋ ฌํ๊ฐ ๋ถ๊ฐ๋ฅํจ์ ๋ํ๋ด๋ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ๊ธฐ์ ์ง๋ ฌํ ๊ฐ๋ฅ ๊ฐ์ฒด๋ ์ง๋ ฌํ ๊ฐ๋ฅ ๊ฐ์ฒด๋ก๋ง ๊ตฌ์ฑ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ์ดํดํด์ผ ํฉ๋๋ค.
"๊ธ์, ๋ง์ด ๋๋๊ตฌ๋. ๋ถ๋ถ์ ์ ์ฅํ์ง ์๊ณ ๋ ์ ์ฒด๋ฅผ ์ ์ฅํ ์ ์๋ค."
"์ ํํ."
"๊ทธ๋ฆฌ๊ณ ์ ์, ๋ฌธ์์ด ๋ฐ ArrayList๋ ์ด๋ป์ต๋๊น?"
"๊ทธ๋ค์ ๋ชจ๋ ์ง๋ ฌํ๋ฅผ ์ง์ํฉ๋๋ค. Java์ ์ ์์๋ ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ๋๋ก ํน๋ณํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ฌธ์ ๊ฐ ์์ด์ผ ํฉ๋๋ค."
๋ํ ๊ฐ์ฒด๊ฐ ์ง๋ ฌํ๋ ๋ ๊ฐ์ฒด์ ์ ํ์ด ์ ์ฅ๋ฉ๋๋ค. ์ด์ Object ๋ณ์์ Cat ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ๋ฉ๋๋ค.
"์ญ์ง๋ ฌํ?"
" ์ญ์ง๋ ฌํ ๋ ์ง๋ ฌํ๋ฅผ ์ญ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ๋๋ค. ์ฆ, ์คํธ๋ฆผ/ํ์ผ์์ ๊ฐ์ฒด๋ฅผ ์ฝ๊ณ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค."
"์, ๊ทธ๋ผ ๋ ์ด์ ์ง๋ฌธํ์ง๋ง."
GO TO FULL VERSION