"์˜ค๋Š˜ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ์ฒด๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ํŒŒ์ผ์—์„œ ์ฝ๋Š” ๊ฒƒ์„ ์กฐ์‚ฌํ•œ ๊ฒƒ์„ ๊ธฐ์–ตํ•  ๊ฒƒ์ž…๋‹ˆ๊นŒ?"

"์˜ˆ, ๋ฐฉ๊ธˆ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ์ฝ์€ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค."

"์ž˜ ํ–ˆ์–ด, ์•„๋ฏธ๊ณ . ์ด๋Ÿฐ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ์•„์ฐจ๋ฆฌ๋‹ค๋‹ˆ ๊ธฐ์˜๊ตฐ. ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ํŒŒ์ผ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•  ์ˆ˜ ์žˆ๋‹ˆ?"

"๋ฌด์—‡์„ ์™„๋ฃŒํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 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 ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”๋ฉ๋‹ˆ๋‹ค.

"์—ญ์ง๋ ฌํ™”?"

" ์—ญ์ง๋ ฌํ™” ๋Š” ์ง๋ ฌํ™”๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ŠคํŠธ๋ฆผ/ํŒŒ์ผ์—์„œ ๊ฐ์ฒด๋ฅผ ์ฝ๊ณ  ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค."

"์•„, ๊ทธ๋Ÿผ ๋” ์ด์ƒ ์งˆ๋ฌธํ•˜์ง€๋งˆ."