¼Ò¼³°°ÀºÀÚ¹Ù3ºÎ  12Àå °´Ã¼Á÷·ÄÈ­  12.3 Serializable  

 

12.3 Serializable

 

¾Õ¿¡¼­´Â °´Ã¼ Á÷·ÄÈ­ÀÇ ±âº»ÀûÀÎ °³³ä°ú °£´ÜÇÑ ¿ø¸®¸¦ ¾Ë¾Æ º¸¾Ò½À´Ï´Ù. À̹ø Àý¿¡¼­´Â ObjectOutputStream°ú ObjectInputStreamÀ» »ç¿ëÇØ¼­ ½ÇÁ¦·Î °´Ã¼¸¦ ÆÄÀÏ¿¡ ÀúÀåÇÏ°í ´Ù½Ã °´Ã¼¸¦ º¹¿øÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù. ±×¸®°í transient¸¦ »ç¿ëÇØ¼­ ƯÁ¤ Çʵ尡 Á÷·ÄÈ­ µÇ´Â °ÍÀ» ¹æÁöÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ »ìÆì º¸°Ú½À´Ï´Ù.

 

 ÀÌ Àå¿¡¼­´Â SerializableÀ» ÀÌ¿ëÇÑ °´Ã¼ Á÷·ÄÈ­ÀÇ ±¸Çö¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ¿©·¯ºÐÀÌ ²À ±â¾ïÇÏ¼Å¾ß ÇÏ´Â °ÍÀº º¸³¾ °´Ã¼°¡ Á÷·ÄÈ­ µÇ¾î ÀÖÀ¸¸é µÈ´Ù´Â °ÍÀÔ´Ï´Ù. Àü¼ÛÀº ƯÁ¤ ÀåÄ¡¿¡ ¿¬°áµÇ¾î ÀÖ´Â ½ºÆ®¸²ÀÌ ¸ðµÎ ÇØ°áÇÕ´Ï´Ù. ¿ì¼± ÆÄÀÏÀ̳ª ³×Æ®¿÷¿¡ ½ºÆ®¸²À» »ý¼º ÇÑ ÈÄ °´Ã¼¸¦ º¸³¾ ¼ö ÀÖ´Â ½ºÆ®¸²À¸·Î º¯È¯À» ÇÕ´Ï´Ù. ±×¸®°í Á÷·ÄÈ­µÇ¾î ÀÖ´Â °´Ã¼¸¦ º¸³»¸é µË´Ï´Ù. ±× ¼ø¼­¸¦ Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°½À´Ï´Ù.

 

n         ³×Æ®¿÷À̳ª ÆÄÀϵ ½ºÆ®¸²À» »ý¼ºÇÑ´Ù.

n         »ý¼ºµÈ ½ºÆ®¸²À» Object½ºÆ®¸²À¸·Î º¯È¯ÇÑ´Ù.

n         ÀԷ°ú Ãâ·Â½ºÆ®¸²Àº ObjectInputStream°ú ObjectOutputStreamÀÌ´Ù.

n         Á÷·ÄÈ­µÈ °´Ã¼¸¦ °´Ã¼½ºÆ®¸²À» ÅëÇØ¼­ Àü¼ÛÇÑ´Ù.

u       ObjectOutputStream à writeObject(Á÷·ÄÈ­µÈ°´Ã¼)

n        °´Ã¼ ½ºÆ®¸²À» ÅëÇØ¼­ Á÷·ÄÈ­µÈ °´Ã¼¸¦ ¹Þ´Â´Ù.

u       ObjectInputStream à readObject()

 

ÀÌ¿Í °°Àº ¼ø¼­·Î °´Ã¼ Á÷·ÄÈ­¸¦ ±¸ÇöÇÕ´Ï´Ù. ½ºÆ®¸²Àº IO¿¡¼­ Á¦°øÇØ Áֱ⠶§¹®¿¡ ¿©·¯ºÐÀº º¸³¾ °´Ã¼¸¸ »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. ÀÚ ±×·¸´Ù¸é Á÷·ÄÈ­ °´Ã¼¸¦ ±¸ÇöÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ¿©·¯ºÐÀÌ ÇÏ½Ç ÀÏÀº º¸³¾ °´Ã¼¿¡ impelements Serializable¸¸ ºÙÀÌ¸é µË´Ï´Ù.

 

SerialObject.java(Á÷·ÄÈ­¸¦ ±¸ÇöÇÑ °´Ã¼)

import java.io.*;

public class SerialObject implements Serializable{

   private String name;    // À̸§

   private String dept;      // ºÎ¼­

   private String title;       // Á÷Ã¥

   public SerialObject (String name, String dept, String title) {

       this.name = name;

       this.dept = dept;

       this.title = title;

   }

   public String toString(){

       return name + ":" + dept + ":" + title;

   }

}

C:\JavaExample\12>javac SerialObject.java

 

SerializableÀÎÅÍÆäÀ̽º´Â Ç¥½Ã ÀÎÅÍÆäÀ̽ºÀ̱⠶§¹®¿¡ ±¸ÇöÇØ¾ß ÇÏ´Â ¸Þ¼­µå°¡ ¾ø½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â ´ÜÁö ºÙ¿©¸¸ ÁÖ¸é µË´Ï´Ù.

 

 À§ÀÇ ¿¹Á¦´Â ³Ê¹«³ª ´Ü¼øÇÑ ¿¹Á¦ÀÔ´Ï´Ù. ´ÜÁö ´Ù¸¥ °ÍÀº implements SerializableÀÌ ºÙ¾ú´Ù´Â °Í ¹Û¿¡´Â º°´Ù¸¦ °Ô ¾ø½À´Ï´Ù. ÀÚ ÀÌÁ¦ ÀÓÀÇÀÇ ÆÄÀÏ¿¡ °´Ã¼ ½ºÆ®¸²À» ¿¬°áÇÏ¿© °´Ã¼¸¦ ÀÐ°í ±â·ÏÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ¾Æ·¡ÀÇ ¿¹´Â °´Ã¼¸¦ ±â·ÏÇÑ ÈÄ ´Ù½Ã Àо´Â ¿¹Á¦¸¦ º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù.

 

SerialObjectTest.java(°´Ã¼Á÷·ÄÈ­¸¦ ÀÌ¿ëÇÏ¿© ÆÄÀÏ¿¡ °´Ã¼ ±â·ÏÇϰí Àоî¿À±â)

import java.io.*;

public class SerialObjectTest {

      

   public static void main(String[] args) throws Exception {

 

     FileOutputStream fos = new FileOutputStream("object.txt");

     ObjectOutputStream oos = new ObjectOutputStream(fos);

       SerialObject so1 = new SerialObject("È«±æµ¿", "Ãѹ«ºÎ", "°úÀå");

       SerialObject so2 = new SerialObject("±è»ñ°«", "¿µ¾÷ºÎ", "°úÀå");

       SerialObject so3 = new SerialObject("¾ÏÇà¾î", "ÀλçºÎ", "°úÀå");

       oos.writeObject(so1);

       oos.writeObject(so2);

       oos.writeObject(so3);

       oos.close();

 

       FileInputStream fis = new FileInputStream("object.txt");

       ObjectInputStream ois = new ObjectInputStream(fis);

       SerialObject rso1 = (SerialObject)ois.readObject();

       SerialObject rso2 = (SerialObject)ois.readObject();

       SerialObject rso3 = (SerialObject)ois.readObject();

       System.out.println(rso1.toString());

       System.out.println(rso2.toString());

       System.out.println(rso3.toString9));

       ois.close();

   }

}

C:\JavaExample\12>javac SerialObjectTest.java

C:\JavaExample\12>java SerialObjectTest

È«±æµ¿:Ãѹ«ºÎ:°úÀå

±è»ñ°«:¿µ¾÷ºÎ:°úÀå

¾ÏÇà¾î:ÀλçºÎ:°úÀå

 

 ¸ÕÀú, object.txtÆÄÀÏ¿¡ ÆÄÀÏÃâ·Â½ºÆ®¸²À» »ý¼ºÇÕ´Ï´Ù. ±×¸®°í ÀÌ ÆÄÀÏÃâ·Â½ºÆ®¸²À» ObjectÃâ·Â½ºÆ®¸²À¸·Î º¯È¯ÇÕ´Ï´Ù. ´ÙÀ½°ú °°Àº ÄÚµå·Î Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

n        FileOutputStream fos = new FileOutputStream("object.txt");

n        ObjectOutputStream oos = new ObjectOutputStream(fos);

 

 ½ºÆ®¸²À» ¿­¾ú´Ù¸é implements Serializable·Î ±¸ÇöµÈ °´Ã¼¸¦ ¸¸µé¾î¾ß°ÚÁÒ. À§ÀÇ ¿¹Á¦¿¡¼­´Â 3°³ÀÇ °´Ã¼¸¦ Áغñ Çß½À´Ï´Ù.

 

n        SerialObject so1 = new SerialObject("È«±æµ¿", "Ãѹ«ºÎ", "°úÀå");

n        SerialObject so2 = new SerialObject("±è»ñ°«", "¿µ¾÷ºÎ", "°úÀå");

n        SerialObject so3 = new SerialObject("¾ÏÇà¾î", "ÀλçºÎ", "°úÀå");

 

 ±×¸®°í ÀÌ °´Ã¼¸¦ object.txtÆÄÀÏ¿¡ ±â·ÏÇÏ´Â ºÎºÐÀº ´ÙÀ½°ú °°½À´Ï´Ù °´Ã¼°¡ 3°³ÀÌ´Ï 3¹ø ±â·Ï ÇØ¾ß °ÚÁÒ.

n        oos.writeObject(so1);

n        oos.writeObject(so2);

n        oos.writeObject(so3);

 

¸¶Áö¸·À¸·Î Ãâ·Â½ºÆ®¸²À» ´Ý½À´Ï´Ù. ¼Ò½ºÀÇ ÀÌ ºÎºÐ±îÁö ¼öÇà µÇ¸é object.txt°¡ ¸¸µé¾îÁö°í °´Ã¼ 3°³°¡ ¼ø¼­´ë·Î ±â·ÏµÇ°Ô µË´Ï´Ù. ¼Ò½º¸¦ °£´ÜÇÏ°Ô Çϱâ À§Çؼ­ ¹Ù·Î ÀÔ·ÂÇÑ °´Ã¼¸¦ »Ìµµ·Ï ÇϰڽÀ´Ï´Ù. ¿ì¼± °´Ã¼¸¦ ÀÐ¾î ³»±â À§Çؼ­ object.txtÆÄÀÏ¿¡ ÆÄÀÏÀԷ½ºÆ®¸²À» »ý¼ºÇÕ´Ï´Ù. ±×¸®°í »ý¼ºµÈ ÆÄÀÏÀԷ½ºÆ®¸²À» ObjectÀԷ½ºÆ®¸²À¸·Î º¯È¯ÇÕ´Ï´Ù.

 

n        FileInputStream fis = new FileInputStream("object.txt");

n        ObjectInputStream ois = new ObjectInputStream(fis);

 

º¯È¯µÈ ObjectÀԷ½ºÆ®¸²À¸·Î °´Ã¼¸¦ Àоî³À´Ï´Ù. ¾Õ¿¡¼­ 3°³ ÀÔ·ÂÇßÀ¸´Ï 3¹ø¸¸ ÀÐ¾î ³»µµ·Ï ÇÏÁÒ. ±×¸®°í ObjectÀԷ½ºÆ®¸²À¸·Î ÀоúÀ» ¶§ ¹ÝȯÇüÀÌ ObjectÇüÀ̱⠶§¹®¿¡ ¿©·¯ºÐÀº °­Á¦ Downcasting½ÃÄÑ¾ß ÇÕ´Ï´Ù.

 

n        SerialObject rso1 = (SerialObject)ois.readObject();

n        SerialObject rso2 = (SerialObject)ois.readObject();

n        SerialObject rso3 = (SerialObject)ois.readObject();

 

½ÇÁ¦ ÀÌ °´Ã¼µéÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´ÂÁö SerialObjectŬ·¡½ºÀÇ ¸â¹ö¸Þ¼­µå¸¦ È£ÃâÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

n        System.out.println(rso1.toString());

n        System.out.println(rso2.toString());

n        System.out.println(rso3.toString());

 

¸¶Áö¸·À¸·Î ObjectÀԷ½ºÆ®¸²À» ´ÝÀ¸½Ã¸é ¸ðµç ÀÛ¾÷Àº ³¡ÀÌ ³³´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼­ ObjectOutputStream°ú ObjectInputStream¿¡ ´ëÇØ¼­ Á¶±Ý ´õ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ±×¸®°í Object½ºÆ®¸²ÀÇ ³×Æ®¿÷ ¿¹Á¦¸¦ º¸°í ½ÍÀ¸½Ã¸é äÆÃÀÇ µ¥ÀÌÅÍ Àü¼ÛºÎºÐÀ» ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù3ºÎ
ÀúÀÚ:ÃÖ¿µ°ü