##########################################################################
#  Ãß»óŬ·¡½º(abstract)¿Í ÀÎÅÍÆäÀ̽º(Interface)¸¦ »ç¿ëÇÏ´Â ¸ñÀû          # 
##########################################################################

ÀÛ¼ºÀÚ : ÀåÇüÈ­(hhjang97@venus.uos.ac.kr)
ÀÛ¼ºÀÏ : 2005. 02. 14 
¼öÁ¤ÀÏ : 

¿øº» :
  http://kin.naver.com/browse/db_detail.php?d1id=1&dir_id=10106&docid=923571
¼³¸í :

Ãß»óŬ·¡½º¿Í ÀÎÅÍÆäÀ̽º ¼³¸í



################################# ################################# #################################
      

°ÅÄ¥°Ô ¸»Çؼ­ È®À强 ¶§¹®ÀÔ´Ï´Ù.

¿¹¸¦ Çϳª µé¾î¼­ ÀÎÅÍÆäÀ̽º¸¦ ¾µ °æ¿ì¿Í ¾È¾µ °æ¿ì¸¦ »ý°¢Çغ¸ÁÒ.

¸íÇÔŬ·¡½º(NameCard)¿Í Ãâ·ÂÇϴ Ŭ·¡½º(PrintNameCard)°¡ ÀÖ°í, NameCard´Â print() ¸Þ¼Òµå°¡ À־ ½º½º·Î Ãâ·Âµµ µÇ¾î¾ß ÇÑ´Ù°í »ý°¢Çغ¾½Ã´Ù.

public class NameCard {
  String name;
  String phone;
  String email;
 
  PrintNameCard printNameCard;
 
  public void setPrintNameCard(PrintNameCard p) {
   this.printNameCard = p;
  }
  public void print() {
    printNameCard.print( this );
  }
}

public class PrintNameCard {
  public void print( NameCard nc ) {
   System.out.println("À̸§:"+nc.name);
  }
}
===================================
ÀÌ·¸°Ô ÇÏ¸é µÇ°ÚÁÒ? ¹°·Ð »ý¼ºÀÚ µîÀº »ý·«Ç߳׿ä. ¾ÏÆ° NameCard ¸¦ »ý¼ºÇؼ­ print() ¸¦ È£ÃâÇϸé À̸§¸¸ Ãâ·ÂµÇ°Ú³×¿ä.

±×·±µ¥ ´Ù¸¥ »ç¶÷ÀÌ ¿Í¼­, À̸§°ú ÀüÈ­¹øÈ£, À̸ÞÀϱîÁö ¸ðµÎ Ãâ·ÂÇØ´Þ¶ó°í ÇÑ´Ù°í ÇÏÁÒ. ¿ø·¡ À̸§¸¸ Ãâ·ÂÇØ´Þ¶ó°í ÇÏ´Â »ç¶÷µµ ¹°·Ð ±×´ë·Î ÀÖ±¸¿ä.

±×·³ »õ Ŭ·¡½º¸¦ Çϳª Ãâ·ÂÇؾ߰ÚÁÒ.

public class PrintNameCard2 {
  public void print( NameCard nc ) {
   System.out.println("À̸§:"+nc.name);
   System.out.println("ÀüÈ­¹øÈ£:"+nc.phone);
   System.out.println("À̸ÞÀÏ:"+nc.email);      
  }
}

±×¸®°í, NameCard Ŭ·¡½º°¡ ÀÌ Å¬·¡½º¸¦ »ç¿ëÇϵµ·Ï ¼öÁ¤Çؾ߰ڳ׿ä.

public class NameCard {
  String name;
  String phone;
  String email;
 
  PrintNameCard printNameCard;
  PrintNameCard2 printNameCard2;
 
  public void setPrintNameCard(PrintNameCard p) {
   this.printNameCard = p;
  }
  public void print() {
    printNameCard.print( this );
  }
  public void setPrintNameCard2(PrintNameCard2 p) {
   this.printNameCard2 = p;
  }
  public void print2() {
    printNameCard2.print( this );
  }
}
===========================================

±×·³ ´Ù¸¥ ¿ä±¸»çÇ×À» ÇÏ´Â »ç¶÷ÀÌ 1000 ¸íÂë ÀÖ´Ù°í Çغ¾½Ã´Ù.

PrintNamecard1000 ±îÁö Ŭ·¡½º¸¦ ¸ðµÎ ¸¸µé¾î¾ß ÇÏ°í, NameCard ¾È¿¡´Â SetPrintNameCard1000(); print1000(); ±îÁö ¸ðµÎ 2000°³ÀÇ ¸Þ¼Òµå¸¦ Ãß°¡ÇØÁà¾ßÁÒ.

¾ÕÀ¸·Î ´õ ¸î °¡Áö°¡ Ãß°¡µÉÁö ¸ð¸£´Â »óȲÀ̶ó¸é, ¾ÕÀ¸·Îµµ ÀÌ NameCard Ŭ·¡½º´Â °è¼Ó ¼öÁ¤µÅ¾ß ÇÒ °ÍÀÔ´Ï´Ù.

Ãâ·Â¹æ½Ä¿¡ µû¶ó¼­ PrintNameCard¿Í ºñ½ÁÇÑ Å¬·¡½º¸¦ °è¼Ó ¸¸µå´Â °ÍÀº ´ç¿¬ÇÏÁö¸¸, ¹®Á¦´Â NameCard Ŭ·¡½º°¡ °è¼Ó ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù´Â µ¥¿¡ ÀÖ½À´Ï´Ù.

¸Þ¼Òµå°¡ ¼öõ°³¾¿ Àִ Ŭ·¡½º¸¦ ½ÇÇàÇÏ´Â °ÍÀº ½Ã½ºÅÛ¿¡µµ ºÎ´ãÀÌ µÇ´Âµ¥´Ù°¡, ¹«¾ùº¸´Ù Ŭ·¡½º ¼Ò½º¸¦ °è¼Ó ¼öÁ¤ÇÏ´Â °ÍÀº À§ÇèÇÑ ÀÏÀ̶ó´Â °ÍÀÌÁÒ.

ÇÏÁö¸¸ Interface³ª Ãß»óŬ·¡½º¸¦ ¾²¸é NameCard´Â ÀüÇô ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ¾øµµ·Ï ÀÛ¼ºÀÌ °¡´ÉÇÕ´Ï´Ù.


public class NameCard {
  String name;
  String phone;
  String email;
 
  PrintNameCard printNameCard;
 
  public void setPrintNameCard(PrintNameCard p) {
   this.printNameCard = p;
  }
  public void print() {
    printNameCard.print( this );
  }
}

public interface PrintNameCard {
  public void print( NameCard nc );
}

ÀÌ°ÍÀº ¾î¶²°¡ÁÒ? NameCard´Â PrintNameCard ¶ó´Â ÀÎÅÍÆäÀ̽º¸¸ »ç¿ëÀ» Çß½À´Ï´Ù. ±×·³ PrintNameCard1,2,3,4 µîÀÇ Å¬·¡½º´Â ÀÌ ÀÎÅÍÆäÀ̽º¸¸ ±¸ÇöÇØÁÖ¸é µÇ°ÚÁÒ.
NameCard ¿¡¼­´Â PrintNameCard ¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ¹Þ¾ÒÁö¸¸, ½ÇÁ¦·Î setPrintNamecard() ¸Þ¼Òµå¸¦ È£ÃâÇÒ¶§ ³Ö¾îÁÖ´Â °´Ã¼´Â ±× ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ½ÇÁ¦ °´Ã¼°¡ µÇ±â ¶§¹®¿¡ ½ÇÇàÀÌ Àß µË´Ï´Ù.
°Ô´Ù°¡ ±× ¾È¿¡ ³Ö¾îÁÖ´Â °´Ã¼ÀÇ print()°¡ È£ÃâµÇ±â ¶§¹®¿¡ Ãâ·ÂÇü½Äµµ ¸¶À½´ë·Î ¹Ù²ãÁÙ ¼ö ÀÖ½À´Ï´Ù. ´Ü ±× °´Ã¼µéÀº PrintNameCard ÀÎÅÍÆäÀ̽º¸¸ ±¸ÇöÇØÁÖ¸é µÇÁÒ.

public class PrintNameCard1 implements PrintNameCard {
  public void print( NameCard nc ) {
   System.out.println("À̸§:"+nc.name);
  }
}

public class PrintNameCard21 implements PrintNameCard {
  public void print( NameCard nc ) {
   System.out.println("À̸§:"+nc.name);
   System.out.println("ÀüÈ­¹øÈ£:"+nc.phone);
   System.out.println("À̸ÞÀÏ:"+nc.email);      
  }
}

...

ÀÌ·± ½ÄÀ¸·Î ¾ó¸¶µç Ãß°¡µÇ¾îµµ NameCard Ŭ·¡½º´Â ÀüÇô ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.

ÀÌ°ÍÀÌ ¹Ù·Î ÀÎÅÍÆäÀ̽º¿Í Ãß»óŬ·¡½º¸¦ »ç¿ëÇÏ´Â Áß¿äÇÑ ÀÌÀ¯ÀÔ´Ï´Ù. Ãß»óŬ·¡½º´Â ÀÎÅÍÆäÀ̽º Áß¿¡ ¸î¸î ¸Þ¼Òµå¸¦ ¹Ì¸® ±¸ÇöÇصР°ÍÀ̶ó°í º¸¸é µË´Ï´Ù.

 

################################# # ÀÎÅÍÆäÀ̽º¿Í Ãß»óŬ·¡½ºÀÇÂ÷ÀÌÁ¡Àº? ################################# 1) ÀÎÅÍÆäÀ̽º´Â ´ÙÁß »ó¼ÓÀ» Áö¿øÇϳª Ãß»ó Ŭ·¡½º´Â ´ÜÀÏ »ó¼Ó¸¸ °¡´ÉÇÏ´Ù. 2) Ãß»ó Ŭ·¡½º¿¡¼­´Â ¸Þ¼ÒµåÀÇ ºÎºÐÀûÀÎ ±¸ÇöÀÌ °¡´ÉÇÏÁö¸¸ ÀÎÅÍÆäÀ̽º¿¡¼­´Â ¿ÀÁ÷ ¸Þ¼Òµå ¼±¾ð¸¸ ÀÖÀ» ¼ö ÀÖ´Ù. ################################# # ÀÎÅÍÆäÀ̽º¿Í Ãß»óŬ·¡½º ################################# ¡×1 Ãß»ó Ŭ·¡½º Ãß»óŬ·¡½º(abstract class)ÀÇ Æ¯¼ºÀ» ¾Ë¾Æº¸±â À§ÇØ java.lang ÆÐÅ°ÁöÀÇ Number Ŭ·¡½ºÀÇ ¼Ò½ºÄڵ带 »ìÆ캾½Ã´Ù. package java.lang; public abstract class Number implements java.io.Serializable { public abstract int intValue(); public abstract long longValue(); public abstract float floatValue(); public abstract double doubleValue(); public byte byteValue() { return (byte)intValue(); } public short shortValue() { return (short)intValue(); } private static final long serialVersionUID = -8742448824652078965L; } ¡×2 ¡á package ¼±¾ð package ¼±¾ð¹® package java.lang; À» ÅëÇØ ÀÌ Å¬·¡½º°¡ java.lang ÆÐÅ°Áö¿¡ ¼ÓÇÔÀ» ¾Ë¸³´Ï´Ù. ¡á Ŭ·¡½º ¼±¾ð¹® Ŭ·¡½º ¼±¾ð¹® public abstract class Number implements java.io.Serializable À» ÅëÇØ ÀÌ Number Ŭ·¡½º´Â °ø¿ëpublic Á¢±ÙÀÇ Ãß»óabstract Ŭ·¡½º·Î ÀÎÅÍÆäÀ̽º java.io.Serializable ¸¦ ÀÌÇàimplements ÇÔÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀÎÅÍÆäÀ̽º ÀÌÇ๮¿¡ Serializable ÀÎÅÍÆäÀ̽º ¸íĪÀ» java.io.Serializable ·Î ¿ÏÀüÁ¶°Ç¸íÀ» »ç¿ëÇÑ °Í¿¡ ÁÖ¸ñÇϽʽÿÀ. ¸¸¾à ¼öÀÔ¼±¾ð¹® import java.io.Serializable; ¸¦ »ç¿ëÇß´Ù¸é, ´Ü¼ø¸íÀ» »ç¿ëÇØ public abstract class Number implements Serializable ·Î Ç¥ÇöÇصµ µË´Ï´Ù. ¡×3 ¡á ¿Ö Ãß»óŬ·¡½ºÀΰ¡? Áß¿äÇÑ °ÍÀº ¿Ö Number Ŭ·¡½º¸¦ Ãß»óabstract Ŭ·¡½º·Î Á¤ÀÇÇÏ¿´´Â°¡ ÇÏ´Â ¹®Á¦ÀÔ´Ï´Ù. ±×°ÍÀº ¼önumber ¶õ ±¸Ã¼ÀûÀÎ ´ë»óÀÌ ¾Æ´Ï¶ó Byte, Integer, Long, Short, Float, Double µî ±¸Ã¼ÀûÀÎ ¼ö¸¦ ÅëÅоî ÁöĪÇÏ´Â Áý´Ü¸í»çÀ̱⠶§¹®ÀÔ´Ï´Ù. (¾Æ·¡ Ãß»óŬ·¡½º¿Í ÀÎÅÍÆäÀ̽º¿¡ °üÇÑ Q&A ¸¦ ÂüÁ¶ÇϽʽÿÀ.) ¡á ±¸¼ºÀÚ ¾øÀ½ Ãß»óŬ·¡½º´Â ÀνºÅϽºÈ­ µÉ ¼ö ¾ø±â ¶§¹®¿¡, ±¸¼ºÀÚconstuctor°¡ ¾ø½À´Ï´Ù. ¡×4 ¡á Ãß»ó ¸Þ½îµå intValue(), longValue(), floatValue(), doubleValue() µîÀº Á¦ÇÑÀÚ abstract ¸¦ »ç¿ëÇØ Ãß»ó¸Þ½îµå·Î Á¤ÀÇÇÏ¿´½À´Ï´Ù. À̵é Ãß»ó¸Þ½îµå´Â ¸öü ¾øÀÌ ¼±¾ð¹®¸¸ ÀÖ´Â °Í¿¡ ÁÖ¸ñÇϽʽÿÀ. ¸öüµµ ¾ø´Â, µû¶ó¼­ ÀÌÇ൵ ¾ø´Â ÀÌ·¯ÇÑ Ãß»ó¸Þ½îµå°¡ ¹«½¼ ¼Ò¿ëÀÌ ÀÖÀ»±î¿ä? Ãß»óŬ·¡½º´Â µ¶¸³ÀûÀ¸·Î´Â ¾Æ¹« Àǹ̵µ ¾ø½À´Ï´Ù. ±× ÇϺÎÀÇ ±¸Ã¼ÀûÀÎ ÀνºÅϽºÈ­ °¡´ÉÇÑ ºÎºÐŬ·¡½ºÀÇ ÃÊŬ·¡½º·Î¼­ ±× Àǹ̸¦ °¡Áý´Ï´Ù. µû¶ó¼­ ÀÌ Ãß»óŬ·¡½º°¡ Æ÷ÇÔÇÏ´Â Ãß»ó¸Þ½îµåµéÀº ÇÊ¿¬ÀûÀ¸·Î ±× ºÎºÐŬ·¡½º¿¡¼­ ±¸Ã¼ÀûÀÎ ÀÌÇàÀÌ Á¤ÀÇµÉ °ÍÀÔ´Ï´Ù. ÀÌ Á¡Àº ´ÙÀ½ ½Ã°£¿¡ ¾Ë¾Æº¾´Ï´Ù. ±×·¯´Ï±î Ãß»ó¸Þ½îµå´Â ±× ºÎºÐŬ·¡½ºµéÀÌ °øÅëÀûÀ¸·Î °¡Áö´Â ÇൿÀ̸鼭 ±¸Ã¼ÀûÀÎ ÀÌÇà ¹æ¹ý(¸öü)Àº °¢±â Ư¼º¿¡ ¸Â°Ô ´Þ¶óÁö´Â °ÍµéÀÔ´Ï´Ù. ¡×5 ¡á ºñÃß»ó ÀνºÅϽº ¸Þ½îµå byteValue() ¿Í shortValue() ¸Þ½îµå´Â Ãß»ó¸Þ½îµå°¡ ¾Æ´Õ´Ï´Ù. public byte byteValue() { return (byte)intValue(); } public short shortValue() { return (short)intValue(); } À̵éÀº °¢±â ¼ö °³Ã¼ÀÇ int Çü °ªÀ» ±¸ÇØ intValue() À̸¦ ij½ºÆ® (byte) ¿Í (short) ¸¦ ÀÌ¿ëÇØ Çüº¯È¯ ÇÑ ÈÄ À̸¦ µÇµ¹¸³´Ï´Ù. Ãß»óŬ·¡½º´Â ÀÎÅÍÆäÀ̽º¿Í ´Þ¸® Ãß»ó¸Þ½îµå »Ó ¾Æ´Ï¶ó ºñÃß»ó¸Þ½îµåµµ Æ÷ÇÔÇÒ ¼ö ÀÖÀ½¿¡ ÁÖ¸ñÇϽʽÿÀ. ¡á Çʵ庯¼ö ÀÌ Ãß»óŬ·¡½º Number ´Â Á¤Àûº¯¼ö private static final long serialVersionUID = -8742448824652078965L; ¸¦ Æ÷ÇÔÇÕ´Ï´Ù. ÀÌ´Â private ·Î º» Ŭ·¡½º ¾È¿¡¼­¸¸ Á¢±ÙÇÒ ¼ö ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù. Á¦ÇÑÀÚ final ·Î ¼öÁ¤ÇÒ ¼ö ¾øÀ½À» ³ªÅ¸³À´Ï´Ù. »ç½Ç ÀÌ Á¤Àûº¯¼ö´Â »ó¼ö ¿ªÇÒÀ» ÇÏÁö¸¸, java ¿¡¼­´Â ÀÎÅÍÆäÀ̽º¿¡ Æ÷ÇÔµÈ Çʵ常 »ó¼ö·Î ºÎ¸¨´Ï´Ù. ±×·¯³ª ÀÌ´Â ´Ù¸¸ ¿ë¾î»óÀÇ ¹®Á¦À̹ǷΠ½Å°æ¾µ ÇÊ¿ä¾ø½À´Ï´Ù. t_1 ´ÙÀ½ ½ÃÇèÇÁ·Î±×·¥À» ÅëÇØ Ãß»óŬ·¡½º´Â ÀνºÅϽºÈ­ ÇÒ ¼ö ¾øÀ½À» È®ÀÎÇսôÙ. /* Ãß»óŬ·¡½ºÀÇ ÀνºÅϽºÈ­ ºÒ°¡¼º */ class Test_13_2_1 { public static void main(String[] args) { Object num = new Number(); } } À̸¦ ÄÄÆÄÀÏÇÏ¸é ´ç¿¬È÷ ´ÙÀ½°ú °°ÀÌ ÀνºÅϽºÈ­ ÇÒ ¼ö ¾ø´Ù´Â ¿À·ù¸Þ½ÃÁö°¡ ³ª¿É´Ï´Ù. c:\javafactory\test>javac Test_13_2_1.java Test_13_2_1.java:6: class java.lang.Number is an abstract class. It can't be instantiated. Object num = new Number(); ¡×6 ÀÎÅÍÆäÀ̽º ¡ájava.io.Serializable ÀÎÅÍÆäÀ̽º ¾ÕÀÇ Number Ŭ·¡½º´Â java.io.Serializable ÀÎÅÍÆäÀ̽º¸¦ ÀÌÇàÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ Serializable ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ÀÎÅÍÆäÀ̽ºÀÇ Æ¯¼ºÀ» ¾Ë¾Æº¾½Ã´Ù. package java.io; public interface Serializable { static final long serialVersionUID = 1196656838076753133L; } ÀÌ°ÍÀÌ Serializable ÀÎÅÍÆäÀ̽ºÀÇ ¼Ò½ºÄÚµå ÀüºÎÀÔ´Ï´Ù. µµ´ëü ÀÌ·¸°Ô °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ ¹«½¼ ¿ªÇÒÀ» ÇÒ±î¿ä? ¡×7 ¡á package ¼±¾ð package ¼±¾ð¹® package java.io; À» ÅëÇØ ÀÌ ÀÎÅÍÆäÀ̽º°¡ java.io ÆÐÅ°Áö¿¡ ¼ÓÇÔÀ» ¾Ë¸³´Ï´Ù. ¡á ÀÎÅÍÆäÀ̽º ¼±¾ð¹® ÀÎÅÍÆäÀ̽º ¼±¾ð¹® public interface Serializable À» ÅëÇØ ÀÌ Serializable ÀÎÅÍÆäÀ̽º´Â °ø¿ëpublic Á¢±ÙÀÇ ÀÎÅÍÆäÀ̽ºÀÓÀ» ÁöÁ¤ÇÕ´Ï´Ù. »ç½Ç º° ´Ù¸¥ ¸»ÀÌ ¾ø´õ¶óµµ ¸ðµç ÀÎÅÍÆäÀ̽º¿Í ±× ¸â¹ö´Â public ÀÔ´Ï´Ù. ÀÎÅÍÆäÀ̽º´Â ÀÌÇàÀÌ ¾øÀ¸¹Ç·Î, Á¦ÇÑÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê´õ¶óµµ abstract ÀÔ´Ï´Ù. ´ëºÎºÐÀÇ ÀÎÅÍÆäÀ̽º ¸íĪÀº ÀÌ Serializable ÀÎÅÍÆäÀ̽ºÃ³·³ "~ÇÒ ¼ö ÀÖ´Â"À̶ó´Â ÀǹÌÀÇ "~able"·Î ³¡³­´Ù´Â Á¡¿¡ ÁÖ¸ñÇϽʽÿÀ. ÀÌ´Â ÀÎÅÍÆäÀ̽º°¡ ´Ù¸¥ Ŭ·¡½ºµéÀÌ Áö´Ò ±â´ÉÀ» ±ÔÁ¤ÇÏ´Â µ¥ »ç¿ëµÈ´Ù´Â Á¡À» ¾Ï½ÃÇÕ´Ï´Ù. ¡×8 ¡á package ¼±¾ð package ¼±¾ð¹® package java.io; À» ÅëÇØ ÀÌ ÀÎÅÍÆäÀ̽º°¡ java.io ÆÐÅ°Áö¿¡ ¼ÓÇÔÀ» ¾Ë¸³´Ï´Ù. ¡á ÀÎÅÍÆäÀ̽ºÀÇ ¿ªÇÒ ÀÌ Serializable ÀÎÅÍÆäÀ̽º´Â Ȳ´çÇÏ°Ôµµ ¾Æ¹«·± ¸Þ½îµåµµ Æ÷ÇÔÇÏÁö ¾Ê½À´Ï´Ù. µµ´ëü ±×·¸´Ù¸é ÀÌ Serializable ÀÎÅÍÆäÀ̽ºÀÇ ¿ªÇÒÀ» ¹«¾ùÀϱî¿ä? ¾Æ·¡ Ãß»óŬ·¡½º¿Í ÀÎÅÍÆäÀ̽º¿¡ °üÇÑ Q&A ¿¡¼­ ÀÎÅÍÆäÀ̽ºÀÇ ¿ëµµ¸¦ "Adjustable, ItemSelectable, Transparency, Composite µî°ú °°ÀÌ Çü¿ë»ç·Î Ç¥ÇöµÇ´Â ¼Ó¼ºÀ̳ª, Shape, Stroke, Paint, PaintContext, CompositeContext, LayoutManager, LayoutManager2, ActiveEvent, PrintGraphics µî°ú °°Àº Ãß»ó¸í»ç·Î Ç¥ÇöµÇ´Â ¼Ó¼º°ú °°ÀÌ °³Ã¼¿Í »ó°ü¾ø´Â °ÍÀ» °øÅëÀûÀ¸·Î ±ÔÁ¤ÇÏ°íÀÚ ÇÒ ¶§" »ç¿ëÇÑ´Ù°í ÇÏ¿´½À´Ï´Ù. ÀÌ Serializable ÀÎÅÍÆäÀ̽º´Â À̸¦ ÀÌÇàÇϴ Ŭ·¡½ºµéÀÌ Á÷·ÄÈ­ °¡´ÉÇÑ(serializable) ±â´ÉÀ» °®°Ô ÇÕ´Ï´Ù. ±×·¯´Ï±î ¾ÕÀÇ Number Ŭ·¡½ºÇü °³Ã¼´Â Á÷·ÄÈ­ °¡´ÉÇÕ´Ï´Ù. Á÷·ÄÈ­ °¡´ÉÇÏ´Ù´Â Àǹ̴ µ¥ÀÌÅ͸¦ ÁÖ°í¹ÞÀ» ¶§ ±× µ¥ÀÌÅ͸¦ Á÷·ÄÈ­ÇÒ ¼ö ÀÖ´Ù´Â Àǹ̷Πµ¥ÀÌÅÍ ÀÔÃâ·Â ½ºÆ®¸²¿¡ °üÇÑ ±â´ÉÀÔ´Ï´Ù. ¡×9 ¡á »ó¼ö Serializable ÀÎÅÍÆäÀ̽º°¡ Æ÷ÇÔÇÏ´Â À¯ÀÏÇÑ ¸â¹öÀÎ serialVersionUID ´Â static final long serialVersionUID = 1196656838076753133L; ·Î Á¤ÀÇµÈ »ó¼öÀÔ´Ï´Ù. ÀÌ »ó¼ö¿¡ Á¢±ÙÁ¦ÇÑÀÚ public ÀÌ ¾ø´Âµ¥, ¸ðµç ÀÎÅÍÆäÀ̽º ¸â¹ö´Â public Á¢±ÙÀ̹ǷÎ, ½ÇÁ¦·Î´Â public ÀÌ ºÙÀº °Í°ú µ¿ÀÏÇÏ°Ô »ý°¢ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ Serializable ÀÎÅÍÆäÀ̽º¸¦ ÀÌÇàÇÏ´Â Number Ŭ·¡½º¿¡µµ ¿ª½Ã µ¿ÀÏÇÑ ¸íĪÀÇ Á¤Àûº¯¼ö°¡ private static final long serialVersionUID = -8742448824652078965L; ·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ÀÌ¿Í °°ÀÌ ÃÊŬ·¡½º³ª ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇµÈ µ¿ÀÏÇÑ ¸íĪÀÇ Çʵ带 ºÎºÐ(ÀÌÇà)Ŭ·¡½º¿¡¼­ ´Ù½Ã Á¤ÀÇÇÏ´Â °ÍÀ» ÇÊµå °¨Ãß±âhidingÀ̶ó ÇÕ´Ï´Ù. ¡×10 ¡ájava.lang.Comparable ÀÎÅÍÆäÀ̽º ¶Ç ´Ù¸¥ ÀÎÅÍÆäÀ̽º·Î ´ÙÀ½ ½Ã°£¿¡ ¾Ë¾Æº¼ Byte, Integer, Long, Short, Float, Double µîÀÇ ºÎºÐŬ·¡½ºµéÀÌ ÀÌÇàÇÒ java.lang.Comparable ÀÎÅÍÆäÀ̽º¸¦ ¾Ë¾Æº¾½Ã´Ù. package java.lang; public interface Comparable { public int compareTo(Object o); } ÀÌ ¿ª½Ã ³Ê¹«³ª °£´ÜÇÕ´Ï´Ù. ´ÜÁö Serializable ÀÎÅÍÆäÀ̽º¿Í ´Þ¸® ¸Þ½îµå¸¦ Çϳª Æ÷ÇÔÇÕ´Ï´Ù. ¡×11 ¡á ¸Þ½îµå Comparable ÀÎÅÍÆäÀ̽º°¡ Æ÷ÇÔÇÏ´Â À¯ÀÏÇÑ ¸â¹öÀÎ compareTo() ¸Þ½îµå´Â public int compareTo(Object o); ·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ÀÌ ¸Þ½îµå´Â ¸öü°¡ ¾ø´Â °ÍÀ¸·Î º¸¾Æ Ãß»ó¸Þ½îµåÀÔ´Ï´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í Á¦ÇÑÀÚ abstract °¡ ¾ø½À´Ï´Ù. ÀÌ¿Í °°ÀÌ ÀÎÅÍÆäÀ̽ºÀÇ ¸ðµç ¸Þ½îµå´Â º° ´Ù¸¥ ¸»ÀÌ ¾ø¾îµµ Ãß»ó¸Þ½îµåÀ̹ǷΠabstract¸¦ ºÙÀÏ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. ÀÌ Ãß»ó¸Þ½îµå´Â ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ÀÌÇàÇÏ´Â ¸Þ½îµå¿¡¼­ µ¤¾î¾²±â¸¦ ÅëÇØ ±× ÀÌÇàÀ» ±¸Ã¼ÀûÀ¸·Î Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. ÀÌÀÇ ¿¹´Â ´ÙÀ½ ½Ã°£¿¡ ¾Ë¾Æº¾´Ï´Ù. ¡á Comparable ÀÎÅÍÆäÀ̽ºÀÇ ¿ëµµ Comparable ÀÎÅÍÆäÀ̽º´Â Serializable ÀÎÅÍÆäÀ̽ºÃ³·³, À̸¦ ÀÌÇàÇϴ Ŭ·¡½ºµéÀÇ °³Ã¼°¡ ºñ±³°¡´ÉÇÑ(comparable) ±â´ÉÀ» °®°Ô ÇÕ´Ï´Ù. ºñ±³°¡´ÉÇÏ´Ù´Â °ÍÀº ¼öó·³ ¼ø¼­°¡ ÀÖ¾î Å©±â¸¦ ºñ±³ÇÒ ¼ö ÀÖ´Ù´Â ÀǹÌÀÔ´Ï´Ù. ################################# # ÀÎÅÍÆäÀ̽º¿Í Ãß»óÈ­ Ŭ·¡½ºÀÇ Â÷ÀÕÁ¡ÀÌ ¹«¾ùÀΰ¡¿ä? ################################# ÀϹÝÀûÀ¸·Î ÀÚ¹ÙÀÇ ÇãÁ¢ Ã¥µéÀ» º¸¸é ÀÎÅÍÆäÀ̽º´Â ÀÚ¹ÙÀÇ ´ÜÀÏ »ó¼Ó¿¡¼­ ³ª¿À´Â ¹®Á¦Á¡À» ÇØ°áÇϱâ À§Çؼ­ ³ª¿Ô´Ù¶ó°í ³ª¿ÍÀÖ½À´Ï´Ù. Ãß»óÈ­ Ŭ·¡½º¸¦ »ç¿ëÇؼ­ »óÀ§ Ŭ·¡½º¸¦ »ó¼ÓÇÏ¸é ´Ù¸¥ »ó¼ÓÀ» ÇÒ ¼ö¾ø±â ¶§¹®¿¡ ³ª¿Ô´Ù¶ó°í ÇÏ°í ¿¹Á¦·Î ¸î°³ µé¾î ³õ¾Ò½À´Ï´Ù. »ç¿ëÀº ½ÇÁ¦ ±×·± ¹æ½ÄÀ¸·Î ÇÕ´Ï´Ù. ÇÏÁö¸¸ ¸í¹éÈ÷ Ʋ¸° ¸»ÀÔ´Ï´Ù. ±×°Í ¶§¹®¿¡ ³ª¿Â°ÍÀº ¾Æ´Õ´Ï´Ù. °´Ã¼ÁöÇâ À̷п¡ º¸¸é ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ À̾߱Ⱑ ³ª¿É´Ï´Ù. Áï,ÀÎÅÍÆäÀ̽º´Â ŸÀÔÀ» ÀçÁ¤ÀÇ ÇϱâÀ§Çؼ­ÀÔ´Ï´Ù. Ŭ·¡½º´Â ÇϳªÀÇ type ÀÔ´Ï´Ù. ÀÎÅÍÆäÀ̽º´Â ±× Ŭ·¡½º°¡ °¡Áú¼ö ÀÖ´Â typeÀ» ¿À¹ö·ÎµùÇϱâ À§Çؼ­ ¸¸µé¾î Áø°ÍÀÔ´Ï´Ù. ÇϳªÀÇ Å¬·¡½º°¡ ¿©·¯ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© ±× ÀÎÅÍÆäÀ̽º typeÀ¸·Î »ç¿ëµÉ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¹Ý¸é Ãß»óÈ­ Ŭ·¡½º´Â »óÀ§ Ŭ·¡½º¿¡¼­ Á÷Á¢ ±¸ÇöÀ» ÇÏÁö ¾Ê°í ÇÏÀ§ Ŭ·¡½º¿¡¼­ ±¸ÇöÇÏ°Ô ÇÔÀ¸·Î½á ÇÁ·Î±×·¥»ó¿¡¼­ ÇÏÀ§ Ŭ·¡½º¸¦ ±¸ÇöÇÑ ¿ÀºêÁ§Æ®°¡ °¢°¢ »óÀ§ Ŭ·¡½º ŸÀÔÀ¸·Î ¾²À϶§ ±× °¢°¢ÀÇ ÇÏÀ§ ¿ÀºêÁ§Æ®¿¡ ¸Â´Â ¸Þ¼Òµå¸¦ µ¿ÀûÀ¸·Î È£ÃâÇϱâ À§Çؼ­ »ç¿ëÇÕ´Ï´Ù. ¾ðµí º¸¸é ¸Å¿ì ºñ½ÁÇϸ鼭 ±× »ç¿ëµµ °°½À´Ï´Ù. ÇÏÁö¸¸ ºÐ¸íÇÑ Á¡Àº ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °ÍÀº ÀÌ Å¬·¡½º°¡ ±× ÀÎÅÍÆäÀ̽º ŸÀÔÀ¸·Î »ç¿ëµÉ¼ö ÀÖ´Ù´Â °ÍÀ» ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁÖ°í ½ÇÇà½Ã°£¿¡ È£Ã⠵Ǵ °ÍÀÌ°í Ãß»óŬ·¡½º´Â ½ÇÇà½Ã°£¿¡ µ¿ÀûÀ¸·Î È£Ã⠵ȴٴ °ÍÀÔ´Ï´Ù. ## Ãß»ó Ŭ·¡½º °£´ÜÇÑ ¿¹Á¦) Ǫµé Ä¡¿Í¿Í ºÒµ¶ ... ÀÌ·±°Å ÀÖÁÒ ÀÌ°É abstract class·Î Çϸé dogÀÌÁ¤µµ·Î¿ä ^^ ±×·³ dog¸¦ »ó¼Ó¹ÞÀº ǪµéÀº °³¿¡ ´ëÇÑ ¼Ó¼ºÀÌ Àִ°ÅÁÒ? °Å±â¿¡ ǪƲ¸¸ÀÇ ¼Ó¼ºÀÌ ´õ Àִ°ű¸¿ä ^^ ################################# # #################################