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

 

12.4 Externalizable

 

   °´Ã¼Á÷·ÄÈ­ÀÇ ¶Ç ´Ù¸¥ ¹æ¹ýÀ¸·Î´Â ExternalizableÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. ±× ±âº» °³³äÀº Serializable°ú °°½À´Ï´Ù. ±×°Íµµ ±×·² °ÍÀÌ ExternalizableÀÚü°¡ SerializableÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇÑ ÀÎÅÍÆäÀ̽ºÀ̱⠶§¹®ÀÔ´Ï´Ù. ÀÎÅÍÆäÀ̽º°¡ ¾î¶»°Ô »ó¼ÓÀÌ µÇ´À³Ä°í ¸»ÇÏ´Â ºÐµµ °è½Ã°ÚÁö¸¸ ÀÎÅÍÆäÀ̽º´Â ÀÎÅÍÆäÀ̽º ³¢¸®´Â »ó¼ÓÀÇ °³³äÀÌ Àû¿ëµË´Ï´Ù. ±×·¡¼­ ±×

ExternalizableÀÇ ¿øÇüÀº ´ÙÀ½°ú °°½À´Ï´Ù.

 

°´Ã¼ Á÷·ÄÈ­¸¦ À§ÇÑ ExternalizableÀÎÅÍÆäÀ̽º

public interface Externalizable extends Serializable {

   public void writeExternal(ObjectOutput out)

      throws IOException;

 

   public void readExternal(ObjectInput in)

       throws IOException, ClassNotFoundException;

}

 

ExternalizableÀÎÅÍÆäÀ̽º´Â Serializableº¸´Ù ¾à°£ º¹ÀâÇÕ´Ï´Ù. ¹°·Ð, 2°³ÀÇ ¸Þ¼­µå¸¦ ±¸ÇöÇØ¾ß¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù. ±×¸®°í Serializableº¸´Ù ¹Ì¼¼ÇÑ Á÷·ÄÈ­¸¦ ´Ù·ç±â À§Çؼ­ »ç¿ëµË´Ï´Ù. Serializable¿¡¼­´Â ÀÚµ¿À¸·Î µ¥ÀÌÅͰ¡ ±â·ÏµÇÁö¸¸ Externalizable¿¡¼­´Â ±â·ÏÇÏ´Â ºÎºÐÀ» Á÷Á¢ Á¦¾îÇϰڴٴ °ÍÀÔ´Ï´Ù. ÀÌ ¶§ ±â·ÏÇÏ´Â ºÎºÐÀº writeExternalºÎºÐ¿¡ ±¸ÇöÀ» Çϸç Àо´Â ºÎºÐÀº readExternalºÎºÐ¿¡ ¸¸µé¾î ÁÝ´Ï´Ù. writeExternal¸Þ¼­µå¿¡¼­ »ç¿ëÀÚ°¡ ÀÓÀÇ·Î ±â·ÏÇÏ´Â ¹æ¹ýÀ» ±¸ÇöÇß´Ù¸é Àо´Â ÇØ´äÀ» °®°í ÀÖ´Â °ÍÀº writeExternalÀ» ±¸ÇöÇÑ ¿©·¯ºÐ ÀÚ½ÅÀÔ´Ï´Ù. °ÅÀÇ ¾ÏȣȭÀÇ °³³ä¿¡ °¡±õÁÒ. ¸»·Î¸¸ ÇØ¼­ ¹«½¼ ¼Ò¿ëÀÌ ÀÖ°Ú½À´Ï±î! Á÷Á¢ ¿¹Á¦¸¦ ¸¸µé¾î¼­ È®ÀÎ ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

ExternalObject.java( Externalizable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ¿¹Á¦)

import java.io.*;

public class ExternalObject implements Externalizable {

   private int id;    // ºÎ¼­

   private String name;    // À̸§

   private float height;     // Á÷Ã¥

   public ExternalObject(){

   }

   public ExternalObject(int id, String name, float height) {

       this.id = id;

       this.name = name;

       this.height = height;

   }

   public void readExternal(ObjectInput oi) throws IOException, ClassNotFoundException {

       System.out.println("readExternal()¸Þ¼­µå");

       id = oi.readInt();

     name = (String)oi.readObject();

     height = oi.readFloat();

   }

   public void writeExternal(ObjectOutput oo) throws IOException {

       System.out.println("writeExternal()¸Þ¼­µå");

       oo.writeInt(id);

     oo.writeObject(name);

     oo.writeFloat(height);

   }

   public String toString(){

       return id + ":" + name + ":" + height;

   }

}

C:\JavaExample\12>javac ExternalObject.java

 

ExternalizableÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ¼ø¼­´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 

n        implements Externalizable ÷ºÎ

n        public void writeExternal(ObjectOutput oo)±¸Çö

n        public void readExternal(ObjectInput oi)±¸Çö

n        ¸Å°³º¯¼ö ¾ø´Â »ý¼ºÀÚ ±¸Çö(¹Ýµå½Ã)

 

 ÀÌ·¯ÇÑ ÀýÂ÷¿¡¼­ ±¸ÇöÇÑ À§ÀÇ ¿¹Á¦¸¦ º¸½Ã¸é implements ExternalizableºÎÅÍ ºÙÀÎ ÈÄ¿¡ readExternal°ú writeExternalÀ» ±¸ÇöÇϰí ÀÖ½À´Ï´Ù. ÀÌµé ¸Þ¼­µåÀÇ ³»ºÎ¸¦ Çѹø º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ¸ÕÀú writeExternal¸Þ¼­µåºÎÅÍ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

n        oo.writeInt(id);

n        oo.writeObject(name);

n        oo.writeFloat(height);

 

ÀÌ ºÎºÐÀº ¸Å°³º¯¼ö·Î ³Ñ¾î¿À´Â ObjectOutputÀÇ °´Ã¼ oo¸¦ ÀÌ¿ëÇÏ¿© ±â·ÏÇÏ°í ½ÍÀº ºÎºÐÀ» Â÷·Ê´ë·Î writeÇØÁÖ°í ÀÖ½À´Ï´Ù. ¹°·Ð ¿©·¯ºÐµéÀÌ ÇÊ¿ä·Î ÇÏ´Â ´ëºÎºÐÀÇ write¸Þ¼­µå´Â ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù. ¿©±â¼­´Â °£´ÜÈ÷ int, String, float¸¸À» ±â·ÏÇÏ¿´Áö¸¸ ObjectOutputÀÎÅÍÆäÀ̽º°¡ Á¦°øÇØÁÖ´Â writeBoolean, writeByte, writeBytes, writeChar, writeChars, writeDouble, writeFloat, writeInt, writeLong, writeShort, writeUTF ¸Þ¼­µåµéÀ» ÀüºÎ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

±×¸®°í, ´Ù½Ã À̰ÍÀ» ÀÐ¾î ¿À´Â ºÎºÐÀº ±â·ÏÇÑ Â÷·Ê´ë·Î Àоî¿À¸é µË´Ï´Ù. readExternal³»ºÎ´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 

n        id = oi.readInt();

n        name = (String)oi.readObject();

n        height = oi.readFloat();

 

Á¤È®ÇÏ°Ô ¼ø¼­¸¦ ¸ÂÃß¾î È£ÃâÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¸¸¾à ¿©·¯ºÐµéÀÌ À̰ÍÀÇ ¼ø¼­¸¦ ¹Ù²Û´Ù¸é  ¿¡·¯¸¦ ¸¸³ª°Ô µÉ °ÍÀÔ´Ï´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î Á÷·ÄÈ­µÈ µ¥ÀÌÅ͸¦ Àоîµé¿©¼­ °´Ã¼¸¦ ¸¸µé±â À§ÇØ ÀÎÀÚ¾ø´Â »ý¼ºÀÚ¸Þ¼­µå°¡ ÇÊ¿äÇÕ´Ï´Ù. À̰ÍÀ» ¸¸µé¾îÁÖÁö ¾ÊÀ¸¸é ¿¡·¯¸Þ½ÃÁö¿¡¼­ ÀÎÀÚ¾ø´Â »ý¼ºÀÚ¸Þ¼­µå¸¦ ¿ä±¸ÇÒ °ÍÀÔ´Ï´Ù. ÀÌÁ¦ Á÷·ÄÈ­ ÇÒ °´Ã¼ µðÀÚÀÎÀÌ ³¡ÀÌ ³µÀ¸´Ï ³ª¸ÓÁö´Â À§ÀÇ ¿¹Á¦µé°ú ¶È°°ÀÌ »ç¿ëÇÏ¸é µË´Ï´Ù. À̰ÍÀ» Å×½ºÆ®ÇÏ´Â ¿¹Á¦´Â  ´ÙÀ½°ú °°½À´Ï´Ù.

 

ExternalObjectTest.java( ExternalizableÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ Á÷·ÄÈ­ °´Ã¼ Å×½ºÆ®)

import java.io.*;

public class ExternalObjectTest {

      

   public static void main(String[] args) throws IOException, ClassNotFoundException{

 

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

       ObjectOutputStream oos = new ObjectOutputStream(fos);

       ExternalObject so1 = new ExternalObject(1, "È«±æµ¿", 170.25f);

       ExternalObject so2 = new ExternalObject(2, "±è»ñ°«", 190.01f);

       ExternalObject so3 = new ExternalObject(3, "¾ÏÇà¾î", 180.34f);

       oos.writeObject(so1);

       oos.writeObject(so2);

       oos.writeObject(so3);

       oos.close();

 

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

       ObjectInputStream ois = new ObjectInputStream(fis);

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

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

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

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

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

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

       ois.close();

   }

}

C:\JavaExample\12>javac ExternalObjectTest.java

C:\JavaExample\12>java ExternalObjectTest

writeExternal()¸Þ¼­µå

writeExternal()¸Þ¼­µå

writeExternal()¸Þ¼­µå

readExternal()¸Þ¼­µå

readExternal()¸Þ¼­µå

readExternal()¸Þ¼­µå

1:È«±æµ¿:170.25

2:±è»ñ°«:190.01

3:¾ÏÇà¾î:180.34

 

  Externalizable ÀÎÅÍÆäÀ̽º¸¦ Å×½ºÆ®ÇÏ´Â ¿¹Á¦´Â ÀÏ¹Ý SerializableÀ» Å×½ºÆ®ÇÏ´Â ¿¹Á¦¿Í ´Ù¸¦ °ÍÀÌ ¾ø½À´Ï´Ù. ´Ù¸¸ Á÷·ÄÈ­ °´Ã¼¸¦ Externalizable·Î ±¸ÇöÇßÀ» »ÓÀÔ´Ï´Ù.

ÀÌ·Î½á ¿©·¯ºÐÀº Á÷·ÄÈ­ÀÇ µÎ °¡Áö »ç¿ë¹ýÀÎ Serializable°ú ExternalizableÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» ¸ðµÎ ¾Ë¾Æº¸¾Ò½À´Ï´Ù.



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