18-1.Á¦³×¸¯

18-1-1.Á¦³×¸¯ Ä÷º¼Ç

ÀÚ¹Ù 5 ÀÌÀü¿¡´Â Ä÷º¼Ç¿¡ Object ŸÀÔÀ» ÀúÀåÇß´Ù. Object´Â °¡Àå ÀϹÝÀûÀΠŸÀÔÀ̾ ¸ðµç ÈÄ¼Õ °´Ã¼¸¦ ´Ù ÀúÀåÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¼±¾ðµÈ ŸÀÔ°ú ½ÇÁ¦ ÀúÀåµÈ ŸÀÔÀÌ ÀÏÄ¡ÇÏÁö ¾Ê¾Æ ¿©·¯ °¡Áö ºÒÆí°ú À§ÇèÀÌ µû¸¥´Ù. µ¿Àû ¹è¿­ÀÎ ArrayList¸¦ ŸÀÔ Àμö¾øÀÌ »ç¿ëÇØ º¸ÀÚ. ¿äÁòÀº Á¦³×¸¯À» ¾²Áö¸¸ ¿ªÈ£È¯¼º ¶§¹®¿¡ ¾ÆÁ÷µµ ÀÌ·± Äڵ带 Áö¿øÇÑ´Ù.

 

rawarraylist

½ÇÇà°á°ú

import java.util.*;

 

class JavaTest {

     public static void main(String[] args) {

          ArrayList arNum = new ArrayList();

          arNum.add(1);

          arNum.add("¹®ÀÚ¿­");

          int value = (int)arNum.get(0);

          // int temp = (int)arNum.get(1);

          System.out.println(value);

     }

}

1

 

arNum ¹è¿­À» Çϳª »ý¼ºÇÏ°í ¼ýÀÚ 1°ú ¹®ÀÚ¿­À» ÀúÀåÇß´Ù. ÄÄÆÄÀÏÀº ¹«»çÈ÷ Àß µÇÁö¸¸ °æ°í°¡ 5°³³ª ¹ß»ýÇÑ´Ù. ¼ýÀÚ³ª ¹®ÀÚ¿­À̳ª ´Ù ObjectÀÇ ÈļÕÀ̹ǷΠArrayList¿¡ °°ÀÌ ÀúÀåÇÒ ¼ö ÀÖÁö¸¸ ¿ä¼Ò¸¦ ²¨³¾ ¶§ ÀÏÀÏÀÌ Ä³½ºÆÃÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. 0¹ø°ÀÇ Á¤¼ö 1À» ²¨³»±â À§ÇØ (int)·Î ij½ºÆÃÇߴµ¥ ÀÌ Ä³½ºÆÃÀ» »©¸é ¿¡·¯ 󸮵ȴÙ.

 

int value = arNum.get(0);

 

arNum¿¡ ÀúÀåµÈ µ¥ÀÌÅÍ´Â Object ŸÀÔÀ̾ Á¤¼öÇü º¯¼ö¿¡ ¹Ù·Î ´ëÀÔÇÒ ¼ö ¾ø´Ù. °³¹ßÀÚ°¡ Á¤¼ö¸¦ ÀúÀåÇß´Ù´Â °ÍÀ» ºÐ¸íÈ÷ ¾Ë°í ÀÖÁö¸¸ Á¿ìÀÇ Å¸ÀÔÀÌ ´Þ¶ó ¹Ýµå½Ã ij½ºÆÃÇØ¾ß ÇÑ´Ù. ºÒÆíÇÑ °ÍÀº ¹°·ÐÀÌ°í ij½ºÆÃÀ» À߸øÇÏ¸é ½ÇÇàÁß¿¡ ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. À§ ¿¹Á¦¿¡ ÁÖ¼® ó¸®µÈ ´ÙÀ½ ÄÚµåÀÇ ÁÖ¼®À» Ç®¾î º¸ÀÚ.

 

int temp = (int)arNum.get(1);

 

¹è¿­ÀÇ 1¹ø°¿¡ ¹®ÀÚ¿­À» ÀúÀåÇØ ³õ°í °³¹ßÀÚ°¡ Àá½Ã Âø°¢ÇÏ¿© Á¤¼öÇüÀ¸·Î ij½ºÆÃÇؼ­ Àоú´Ù. ¹®ÀÚ¿­ÀÌ Á¤¼ö°¡ µÉ ¼ö ¾øÀ¸´Ï ½ÇÇàÁß¿¡ ¿¹¿Ü¸¦ ÀÏÀ¸Å°¸ç ´Ù¿îµÇ¾î ¹ö¸°´Ù. ÀÌ Äڵ尡 À§ÇèÇÑ ÀÌÀ¯´Â ÄÄÆÄÀÏÁß¿¡ À߸øÀ» ¹ß°ßÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. arNum¿¡ ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ ³ÖÀ» ¼ö ÀÖÁö¸¸ ÇØ´ç ¿ä¼Ò°¡ ¾î¶² ŸÀÔÀÏÁö ¾Ë ¼ö ¾ø¾î ÄÄÆÄÀÏ·¯´Â À§ÇèÀ» ¿¹ÃøÇÏÁö ¸øÇÑ´Ù.

ŸÀÔ ºÒÀÏÄ¡¿¡ ÀÇÇÑ Ä³½ºÆÃÀÇ ºÒÆí°ú À߸øµÈ ij½ºÆÃÀ¸·Î ÀÎÇÑ À§ÇèÀ» Á¦°ÅÇϱâ À§ÇØ ÀÚ¹Ù 5¿¡ »õ·Î µîÀåÇÑ °³³äÀÌ Á¦³×¸¯ÀÌ´Ù. Á¦³×¸¯Àº Ŭ·¡½º¸¦ ÀμöÈ­ÇÏ¿© ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ µ¿ÀÛÇÏ´Â ÀϹÝÀûÀÎ ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÑ´Ù. ÀÌ ¿¹Á¦¸¦ Á¦³×¸¯ ¹öÀüÀ¸·Î ¹Ù²ã º¸ÀÚ.

 

genarraylist

½ÇÇà°á°ú

import java.util.*;

 

class JavaTest {

     public static void main(String[] args) {

          ArrayList<Integer> arNum = new ArrayList<Integer>();

          arNum.add(1);

          //arNum.add("¹®ÀÚ¿­");

          int value = arNum.get(0);

          System.out.println(value);

     }

}

1

 

ArrayList ŸÀÔ ´ë½Å ArrayList<Integer> ŸÀÔÀ¸·Î arNum °´Ã¼¸¦ »ý¼ºÇÏ¿© ÀÌ ¹è¿­Àº Á¤¼öÇü¸¸ ÀúÀåÇÑ´Ù´Â °ÍÀ» ¸í½ÃÇÑ´Ù. Á¦³×¸¯ÀÇ Å¸ÀÔ Àμö´Â ÂüÁ¶Çü¸¸ °¡´ÉÇÏ¿© int ŸÀÔ ´ë½Å Integer ŸÀÔÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª °ªÀ» ÀúÀåÇϰųª ²¨³¾ ¶§´Â ÀÚµ¿ ¹Ú½ÌÀÌ Áö¿øµÇ¾î Á¤¼ö ¸®ÅÍ·²À» »ç¿ëÇصµ ¹«¹æÇÏ´Ù.

ÀÌ ¹è¿­¿¡´Â Á¤¼öÇü¸¸ ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç ´Ù¸¥ ŸÀÔÀÇ µ¥ÀÌÅ͸¦ ÀúÀåÇϸé ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ¿¡·¯ 󸮵ȴÙ. ÁÖ¼® ó¸®µÈ ¹®ÀåÀÇ ÁÖ¼®À» Ç®¾î º¸¸é ¹®ÀÚ¿­ ŸÀÔÀº ÀúÀåÇÒ ¼ö ¾ø´Ù´Â ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù.

 

The method add(Integer) in the type ArrayList<Integer> is not applicable for the arguments (String)

 

Ä÷º¼Ç¿¡ ¾î¶² µ¥ÀÌÅÍ°¡ ÀúÀåµÉÁö ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ¹Ì¸® ¾Ë ¼ö ÀÖ¾î À߸øµÈ ŸÀÔÀ» ¾ÖÃÊ¿¡ Çã¿ëÇÏÁö ¾Ê´Â´Ù. ÄÄÆÄÀÏÁß¿¡ ½Ç¼ö¸¦ ¹Ì¸® ¾Ë ¼ö ÀÖ´Ù´Â °ÍÀº ±²ÀåÈ÷ Áß¿äÇÑ ÀåÁ¡À̸ç ÄÚµåÀÇ ¾ÈÀü¼º ¹× »ý»ê¼º Çâ»ó Å« ±â¿©¸¦ ÇÑ´Ù.

¹è¿­¿¡ ÀúÀåµÇ´Â ¸ðµç µ¥ÀÌÅÍ°¡ Á¤¼öÇüÀÓÀÌ È®½ÇÇÏ´Ï ¿ä¼Ò¸¦ ÀÐÀ» ¶§ ij½ºÆÃÇÒ ÇÊ¿ä ¾ø¾î Æí¸®Çϸç À߸ø ij½ºÆÃÇÒ À§Çèµµ ¾ø¾î ¾ÈÀüÇÏ´Ù. Á¦³×¸¯À» »ç¿ëÇÒ ¶§ÀÇ ÀÌÁ¡Àº ´ÙÀ½ µÎ °¡ÁöÀÌ´Ù.

 

¨ç ÄÄÆÄÀϽà ŸÀÔÀ» üũÇÒ ¼ö ÀÖ´Ù.

¨è ij½ºÆÃÇÒ ÇÊ¿ä°¡ ¾ø¾î ÆíÀǼº°ú ¾ÈÀü¼ºÀÌ Çâ»óµÈ´Ù.

 

Á¦³×¸¯ÀÇ ÁÖ È°¿ëó°¡ Ä÷º¼ÇÀ̸ç Ä÷º¼ÇÀ» À§ÇØ Á¦³×¸¯ ¹®¹ýÀÌ µîÀåÇß´Ù°í Çصµ °ú¾ðÀÌ ¾Æ´Ï´Ù. »ç¿ë¸¸À» ¸ñÀûÀ¸·Î ÇÑ´Ù¸é ¿©±â±îÁö¸¸ ¾Ë¾Æµµ ¹«¹æÇÏ´Ù. ¶ÇÇÑ ÀÚ¹Ù¸¦ óÀ½ °øºÎÇÏ°í ÀÖ´Ù¸é ÀÌÇÏÀÇ ³»¿ëÀº ´Ù¼Ò ÇмúÀûÀ̹ǷΠÂ÷ÈÄ¿¡ ÀÚ¹Ù¿¡ ´ëÇÑ °æÇèÀ» ¾î´À Á¤µµ ½×Àº ÈÄ¿¡ °øºÎÇÏ´Â °ÍÀÌ ÁÁ´Ù. Á¦³×¸¯ Ŭ·¡½º¸¦ Á÷Á¢ ¸¸µé°Å³ª Á» ´õ ±íÀº °÷±îÁö ¾Ë°í ½Í´Ù¸é °è¼Ó ÀÐ¾î º¸ÀÚ.

18-1-2.Á¦³×¸¯ ŸÀÔ

Á¦³×¸¯ ŸÀÔÀÇ µ¿ÀÛ ¹æ½Ä°ú ³»ºÎ¸¦ ¾Ë¾Æº¸±â À§ÇØ Á¦³×¸¯ Ŭ·¡½º¸¦ Á÷Á¢ ¸¸µé¾î º¸°í Á¦³×¸¯ÀÌ ¿Ö ÇÊ¿äÇÑÁö ¿¬±¸ÇØ º¸ÀÚ.

 

intbox

½ÇÇà°á°ú

class IntBox {

     int value;

     IntBox(int value) { this.value = value; }

     int get() { return value; }

     void set(int value) { this.value = value; }

}

 

class DoubleBox {

     double value;

     DoubleBox(double value) { this.value = value; }

     double get() { return value; }

     void set(double value) { this.value = value; }

}

 

class JavaTest {

     public static void main(String[] args) {

          IntBox bi = new IntBox(1234);

          int biv = bi.get();

          System.out.println(biv);

 

          DoubleBox bd = new DoubleBox(56.78);

          double bdv = bd.get();

          System.out.println(bdv);

     }

}

1234

56.78

 

~Box Ŭ·¡½º´Â ƯÁ¤ ŸÀÔÀÇ º¯¼ö Çϳª¸¦ ÀúÀåÇÏ´Â ·¡Æ۷μ­ °ªÀ» ÀúÀåÇÏ´Â Çʵå¿Í »ý¼ºÀÚ, ¾×¼¼¼­·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ¿¹Á¦¿¡¼­´Â ÆíÀÇ»ó ÇϳªÀÇ °ª¸¸ ÀúÀåÇߴµ¥ ³»ºÎ Çʵ带 ¹è¿­·Î ¹Ù²Ù¸é ¿©·¯ °³ÀÇ °ªÀ» ÀúÀåÇÒ ¼ö ÀÖ´Ù. Å©±â°¡ 1·Î °íÁ¤µÈ Ä÷º¼ÇÀÎ ¼ÀÀε¥ ÀÌ Å¬·¡½º¸¦ È®ÀåÇÏ°í °ü¸® ¸Þ¼­µå¸¦ Ãß°¡ÇÏ¸é ½ÇÁ¦·Î Ä÷º¼ÇÀÌ µÈ´Ù.

Á¤¼ö ¹Ú½º¿¡ Á¤¼ö¸¦ ³Ö°í ½Ç¼ö ¹Ú½º¿¡ ½Ç¼ö¸¦ ³ÖÀº ÈÄ ´Ù½Ã Àоî Ãâ·ÂÇß´Ù. ¿ø·¡ ³Ö¾ú´ø °ªÀÌ Àß Ãâ·ÂµÈ´Ù. ÀÌ ¿¹Á¦ÀÇ IntBox´Â ÀÚ¹ÙÀÇ Integer ·¡ÆÛ¿Í À¯»çÇÏ´Ù. Á¤¼öÇüÀ» ÀúÀåÇÏ´Â IntBox¿¡´Â Á¤¼ö¸¸ ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç ½Ç¼ö¸¦ ÀúÀåÇÏ¸é ¿¡·¯ 󸮵ȴÙ.

 

IntBox bi = new IntBox(12.34);

 

°ªÀ» ½ÇÁ¦ ÀúÀåÇÏ´Â value ÇʵåÀÇ Å¸ÀÔ°ú »ý¼ºÀÚ°¡ ¹Þ¾Æ µéÀÌ´Â ½ÇÀμöÀÇ Å¸ÀÔÀÌ ´Ù¸£±â ¶§¹®ÀÌ´Ù. ±×·¡¼­ ÀúÀåÇÏ´Â °ª¿¡ µû¶ó ¸Å ŸÀÔº°·Î Ŭ·¡½º¸¦ ÀÏÀÏÀÌ ¸¸µé¾î¾ß Çϴµ¥ Ŭ·¡½º °³¼ö°¡ ¹«ÇÑ´ë¿©¼­ Çö½ÇÀûÀ¸·Î ÀÌ°ÍÀº ºÒ°¡´ÉÇÏ´Ù. ÀÌ ¹®Á¦¿¡ ´ëÇÑ °ú°ÅÀÇ ÇØ°áÃ¥Àº °¡Àå ÃÖ»óÀ§ÀÇ Object ŸÀÔÀ» È°¿ëÇÏ¿© ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â °ÍÀ̾ú´Ù.

 

objectbox

½ÇÇà°á°ú

class ObjectBox {

     Object value;

     ObjectBox(Object value) { this.value = value; }

     Object get() { return value; }

     void set(Object value) { this.value = value; }

}

 

class JavaTest {

     public static void main(String[] args) {

          ObjectBox bi = new ObjectBox(1234);

          int biv = (int)bi.get();

          System.out.println(biv);

         

          ObjectBox bd = new ObjectBox(56.78);

          double bdv = (double)bd.get();

          System.out.println(bdv);

     }

}

1234

56.78

 

Object´Â Á¤¼ö¿Í ½Ç¼ö´Â ¹°·ÐÀÌ°í ¹®ÀÚ¿­±îÁö ´ëÀÔÇÒ ¼ö ÀÖ´Â °¡Àå ÃÖ»óÀ§ÀÇ ·çÆ®¿©¼­ ¸ðµç µ¥ÀÌÅ͸¦ ´Ù ÀúÀåÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª º¸´Ù½ÃÇÇ ÀÐÀ» ¶§ ij½ºÆÃÀÌ ÇÊ¿äÇÏ°í ½ÇÁ¦ ÀúÀåµÈ ŸÀÔ°ú ´Ù¸£°Ô ij½ºÆÃÇÏ¸é ¿¹¿Ü°¡ ¹ß»ýÇÏ´Â À§ÇèÀÌ ÀÖ´Ù. °ªÀ» ÀúÀåÇÑ´Ù´Â º»¿¬ÀÇ ±â´É¿¡´Â Ãæ½ÇÇÏÁö¸¸ ŸÀÔ ¾ÈÁ¤¼ºÀÌ ¾ø´Ù. ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ µµÀÔµÈ °ÍÀÌ ¹Ù·Î Á¦³×¸¯ÀÌ´Ù.

 

genbox

½ÇÇà°á°ú

class Box<T> {

     T value;

     Box(T value) { this.value = value; }

     T get() { return value; }

     void set(T value) { this.value = value; }

}

 

class JavaTest {

     public static void main(String[] args) {

          Box<Integer> bi = new Box<Integer>(1234);

          int biv = bi.get();

          System.out.println(biv);

         

          Box<Double> bd = new Box<Double>(56.78);

          double bdv = bd.get();

          System.out.println(bdv);

     }

}

1234

56.78

 

Box¶ó´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÏµÇ Å¸ÀÔ Àμö T¸¦ ¹Þ¾Æµé¿© Ŭ·¡½º ¼±¾ð¹®¿¡ ÀÌ Å¸ÀÔÀ» »ç¿ëÇÏ°í °´Ã¼¸¦ ¼±¾ðÇÒ ¶§ ½ÇÁ¦ ŸÀÔÀ» ¹àÈù´Ù. Á¤¼ö ¹Ú½º´Â Box<Integer> ŸÀÔÀ» »ç¿ëÇÏ°í ½Ç¼ö ¹Ú½º´Â Box<Double> ŸÀÔÀ» »ç¿ëÇÑ´Ù. Á¦³×¸¯ ŸÀÔÀ» Á¤ÀÇÇØ µÎ¸é Box<Short>, Box<Human> µî ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ Àû¿ëÇÒ ¼ö ÀÖ´Ù.

Á¦³×¸¯À̶õ ÀϹÝÀûÀ̶ó´Â ¶æÀ̸ç ŸÀÔ Àμö·Î Àü´ÞµÈ ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ Àß µ¿ÀÛÇÑ´Ù. °ªÀ» ²¨³¾ ¶§ ij½ºÆÃÇÏÁö ¾Ê¾Æµµ µÇ¸ç À߸ø ij½ºÆÃÇϸé ÄÄÆÄÀÏ ¿¡·¯·Î ó¸®µÇ¾î ¾ÈÀüÇÏ´Ù. ½Ç½À ÆíÀÇ»ó ÁַΠŬ·¡½º¸¦ ¸¸µé¾î º¸°í ¼³¸íµµ Ŭ·¡½º À§ÁÖ·Î Çϴµ¥ Á¦³×¸¯ Ŭ·¡½º¿¡ Àû¿ëµÇ´Â ¸ðµç ¹®¹ýÀº Á¦³×¸¯ ÀÎÅÍÆäÀ̽º¿¡µµ µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù.

18-1-3.ŸÀÔ Àμö

¸Þ¼­µåÀÇ Àμöó·³ Á¦³×¸¯ÀÇ Å¸ÀÔ Àμöµµ µÎ °¡Áö°¡ ÀÖ´Ù. Á¤ÀÇÇÒ ¶§´Â ª°í °£´ÜÇÑ À̸§À» ¾²°í ¼±¾ðÇÒ ¶§ ½ÇÁ¦ Àû¿ëÇÒ Å¸ÀÔÀ» Àü´ÞÇÑ´Ù.

 

l  Çü½Ä ŸÀÔ Àμö(Type Parameter) : Á¦³×¸¯À» Á¤ÀÇÇÒ ¶§ ÀÓÀÇÀÇ Å¸ÀÔÀ» ¹ÞÀ» ¼ö ÀÖÀ½À» Ç¥±âÇÏ´Â ÀμöÀ̸ç Ŭ·¡½º¸í µÚÀÇ < > °ýÈ£ ¾È¿¡ ¾´´Ù. Ŭ·¡½º¸í°ú ºÐ¸íÈ÷ ±¸ºÐÇϱâ À§ÇØ ´ë¹®ÀÚ Çϳª·Î µÈ °£·«ÇÑ À̸§À» »ç¿ëÇÑ´Ù. ÀμöÀÇ Àǹ̿¡ µû¶ó ÁÖ·Î ´ÙÀ½°ú °°Àº À̸§ÀÌ »ç¿ëµÈ´Ù.

 

Àμö¸í

¼³¸í

T

Type

E

Element

K

Key

V

Value

N

Number

 

l  ½Ç ŸÀÔ Àμö(Type Argument) : Á¦³×¸¯ Ŭ·¡½ºÀÇ °´Ã¼¸¦ »ý¼ºÇÒ ¶§ Àü´ÞÇϴ ŸÀÔÀ̸ç Ŭ·¡½º¸í µÚÀÇ < > °ýÈ£ ¾È¿¡ ½ÇÁ¦ ŸÀÔÀ» ±â¼úÇÑ´Ù. Ŭ·¡½º ¼±¾ð¹®ÀÇ Çü½Ä ŸÀÔ Àμö °³¼ö´ë·Î ½Ç ŸÀÔ Àμö¸¦ Àü´ÞÇÏ¸ç ½Ç Å¸ÀÔ Àμö°¡ Çü½Ä ŸÀÔ Àμö ÀÚ¸®¿¡ ´ëüµÈ´Ù.

 

¾Õ¿¡¼­ ¸¸µç Box Á¦³×¸¯Àº Çü½Ä ŸÀÔ Àμö·Î T¸¦ »ç¿ëÇߴµ¥ ÀÓÀÇ Å¸ÀÔÀ» ¹Þ¾Æ µéÀδٴ ¶æÀ¸·Î ª°Ô ½è´Ù. Ŭ·¡½º º»Ã¼¿¡¼­ ÀÌ Å¸ÀÔÀ» Àû¿ëÇÏ´Â ¸ðµç °÷¿¡ Çü½Ä ŸÀÔ Àμö¸¦ ¾´´Ù. value ÇʵåÀÇ Å¸ÀÔ, »ý¼ºÀÚÀÇ Àμö, getÀÇ ¸®ÅÏ°ª, setÀÇ Àμö µî¿¡ Çü½Ä ŸÀÔ Àμö T¸¦ »ç¿ëÇß´Ù.

Á¦³×¸¯ Ŭ·¡½º·ÎºÎÅÍ °´Ã¼¸¦ »ý¼ºÇÒ ¶§ Ŭ·¡½º À̸§ µÚ¿¡ < > °ýÈ£¿Í ½Ç ŸÀÔ Àμö¸¦ Àü´ÞÇϸé Çü½Ä ŸÀÔ Àμö°¡ ½Ç ŸÀÔ Àμö·Î ´ëüµÈ´Ù. ¸¶Ä¡ ¸Þ¼­µåÀÇ Çü½Ä Àμö¸¦ ÅëÇØ ½ÇÀμöÀÇ °ªÀÌ Àü´ÞµÇ´Â °Í°ú °°´Ù. ¿¹¸¦ µé¾î Box<Integer> ŸÀÔÀÇ °´Ã¼ a¸¦ »ý¼ºÇÏ¸é ´ÙÀ½ Ŭ·¡½º¸¦ ¼±¾ðÇÏ´Â °Í°ú °³³äÀûÀ¸·Î À¯»çÇÏ´Ù.

Á¦³×¸¯ÀÇ ¸ðµç T°¡ ½Ç ŸÀÔ Àμö·Î ´ëüµÇ¾î Á¤¼öÇüÀ» ÀúÀåÇϴ Ŭ·¡½º°¡ µÈ´Ù. ÀÌó·³ Á¦³×¸¯À» Àû¿ëÇÑ Box<Integer>¸¦ ÆĶó¹ÌÅÍÈ­µÈ ŸÀÔ(Parameterized type)À̶ó°í Çϸç ÇϳªÀÇ Å¸ÀÔÀ¸·Î °£ÁÖÇÑ´Ù. DoubleÀ̳ª HumanÀ» Àü´ÞÇÏ¿© ¼±¾ðÇÑ Box<Double>, Box<Human>µµ ÆĶó¹ÌÅÍÈ­µÈ ŸÀÔÀÌ´Ù.

ÀÚ¹ÙÀÇ Á¦³×¸¯¿¡ ´ëÀÀµÇ´Â C++ÀÇ °³³äÀº ÅÛÇø´ÀÌ¸ç µµÀÔ ¸ñÀûÀÌ °°°í »ç¿ë ¹æ¹ýµµ À¯»çÇÏ´Ù. ±×·¯³ª ÀÌ µÑÀº Å« Â÷ÀÌ°¡ Àִµ¥ ÅÛÇø´Àº ½Ç Àμö¿¡ µû¶ó Ŭ·¡½ºÀÇ º¹»çº»À» »ý¼ºÇϴµ¥ ºñÇØ Á¦³×¸¯Àº ±×·¸Áö ¾Ê´Ù. ÀÚ¹ÙÀÇ Á¦³×¸¯ ŸÀÔÀº µü ÇÑ ¹ø¸¸ ÄÄÆÄÀϵǾî ÇϳªÀÇ Å¬·¡½º ÆÄÀÏ·Î ÀúÀåµÈ´Ù. ÀÏ¹Ý Å¬·¡½º¿Í ÄÄÆÄÀϵǴ ¹æ¹ýÀÌ °°´Ù. °ú¿¬ ±×·±Áö ´ÙÀ½ ¿¹Á¦·Î Å×½ºÆ®ÇØ º¸ÀÚ.

 

gencompile

½ÇÇà°á°ú

class Box<T> {

     T value;

     Box(T value) { this.value = value; }

     T get() { return value; }

     void set(T value) { this.value = value; }

}

 

class JavaTest {

     public static void main(String[] args) {

          Box<Integer> bi = new Box<Integer>(1234);

          Box<Double> bd = new Box<Double>(56.78);

          System.out.println(bi.getClass() == bd.getClass());

     }

}

true

 

Á¤¼öÇü ¹Ú½º bi¿Í ½Ç¼öÇü ¹Ú½º bd¸¦ »ý¼ºÇÏ°í µÎ °´Ã¼ÀÇ Å¬·¡½º¸¦ ºñ±³ÇÏ¸é °°Àº °ÍÀ¸·Î Á¶»çµÈ´Ù. Áï ½Ç Å¸ÀÔ Àμö°¡ ¹«¾ùÀ̵ç Box<T>ÀÇ ÄÚµå´Â µü Çϳª »ÓÀÌ´Ù. ±×·¡¼­ C++¿¡ ºñÇØ ¸Þ¸ð¸® ³¶ºñ°¡ ¾ø´Ù. Á¦³×¸¯ Ŭ·¡½ºµµ ÂüÁ¶ÇüÀ̹ǷΠ°´Ã¼¸¦ »ý¼ºÇÒ ¶§ new ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. À̶§ °´Ã¼ÀÇ Å¸ÀÔ°ú new ¿¬»êÀÚÀÇ Å¸ÀÔÀº º¸Åë ÀÏÄ¡ÇÑ´Ù. ´ÙÀ½ ¼±¾ð¹®À» º¸ÀÚ.

 

Box<Integer> bi = new Box<Integer>(1234);

 

bi°¡ Box<Integer> ŸÀÔÀ̹ǷΠnew ¿¬»êÀÚÀÇ Å¸ÀÔµµ Box<Integer>ÀÌ´Ù. ³Ê¹« ´ç¿¬ÇÏÁö¸¸ ±æ°í º¹ÀâÇؼ­ ¸î °¡Áö °£ÆíÇÑ Ç¥±â¹ýÀÌ Áö¿øµÈ´Ù. ÀÌ ¼±¾ð¹®¿¡¼­ µÚÂÊÀÇ ½Ç ŸÀÔ Àμö Integer´Â ²À ÇÊ¿äÄ¡ ¾Ê´Ù. ±×·¡¼­ ÀÚ¹Ù 7 ºÎÅÍ½Ç Å¸ÀÔ Àμö¸¦ »ý·«ÇÒ ¼ö ÀÖÀ¸¸ç ŸÀÔ Àμö ÀÚ¸®¿¡ ºó °ýÈ£¸¸ ½á ÁÖ¸é µÈ´Ù.

 

Box<Integer> bi = new Box<>(1234);

 

ÀÌ·¸°Ô ½áµµ Box<> °ýÈ£¿¡ µé¾î°¥ ŸÀÔÀ» ÄÄÆÄÀÏ·¯°¡ Ãß·ÐÇÏ¿© Integer¸¦ ½á ³Ö´Â´Ù. <> ºó°ýÈ£¸¸ Àû¾î ³õ´Â ¹æ¹ýÀ» ´ÙÀ̾Ƹóµå Ç¥±â¹ýÀ̶ó°í ÇÑ´Ù. ŸÀÔ Àμö°¡ ¿©·¯ °³ÀÌ°í º¹ÀâÇÒ ¶§ ¹«Ã´ Æí¸®ÇÏ´Ù. ŸÀÔÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù°í Çؼ­ ¾Æ¿¹ < > °ýÈ£±îÁö »ý·«ÇØ ¹ö¸®¸é ¾ÈµÈ´Ù.

 

Box<Integer> bi = new Box(1234);             // °æ°í

 

ÀÌ·¸°Ô µÇ¸é Box¸¦ ·ÎŸÀÔ(Raw Type)À¸·Î ÀνÄÇÏ¿© °æ°í°¡ ¹ß»ýÇÑ´Ù. ¹Ýµå½Ã ºó °ýÈ£¸¦ ½á¼­ ÀÌ ÀÚ¸®¿¡ ŸÀÔÀÌ ÇÊ¿äÇÔÀ» ¹àÇô¾ß ÇÑ´Ù. ÀÚ¹Ù 10 ÀÌÈÄ¿¡´Â Áö¿ªº¯¼öÀÇ Å¸ÀÔÀ» Ãß·ÐÇÏ´Â ±â´ÉÀÌ Ãß°¡µÇ¾î º¯¼öÀÇ Å¸ÀÔÀ» var¶ó°í ´õ ª°Ô ¾µ ¼ö ÀÖ´Ù.

 

var bi = new Box<>(1234);

 

ÃʱⰪÀÇ ¸®ÅÍ·²ÀÌ Á¤¼öÇüÀÌ´Ï <> °ýÈ£ ¾ÈÀÇ ½ÇŸÀÔ Àμö´Â IntegerÀÓÀ» Ãß·ÐÇÒ ¼ö ÀÖ°í new ¿¬»êÀÚÀÇ ´ë»óÀÌ Box<Integer>ÀÌ´Ï biÀÇ Å¸ÀÔµµ ÀÚµ¿À¸·Î Box<Integer>ÀÏ ¼ö¹Û¿¡ ¾ø´Ù. ÄÄÆÄÀÏ·¯°¡ Á¡Á¡ ¶È¶ÈÇØÁ® Ç¥±â¹ýÀº °£ÆíÇØÁ³Áö¸¸ ¾ÆÁ÷±îÁö´Â ȣȯ¼º¿¡ ºÒ¸®ÇÏ´Ù.

¸Þ¼­µåÀÇ Àμö °³¼ö¿¡ Á¦¾àÀÌ ¾øµíÀÌ Á¦³×¸¯ÀÇ Å¸ÀÔ Àμö °³¼ö¿¡µµ Á¦¾àÀÌ ¾ø´Ù. º¸Åë ÇϳªÀÇ Å¸ÀÔ¸¸ ÃëÇÏÁö¸¸ ¿©·¯ °³ÀÇ Å¸ÀÔ Àμö¸¦ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù. ÀÚ¹Ù ¶óÀ̺귯¸®ÀÇ ÇؽøÊÀÌ 2°³ÀÇ Å¸ÀÔ Àμö¸¦ ¹Þ´Â´Ù.

 

public class HashMap<K,V>

 

Çؽô Ű¿Í °ªÀÇ ½ÖÀ» ÀúÀåÇϴµ¥ µÎ ŸÀÔÀÌ °¢°¢ ´Ù¸¦ ¼ö ÀÖ¾î ŸÀÔ Àμöµµ 2°³¿©¾ß ÇÑ´Ù. 3°³ ÀÌ»óµµ ¾ó¸¶µçÁö °¡´ÉÇÏÁö¸¸ Çö½ÇÀûÀ¸·Î´Â 2°³ Á¤µµ¸¸ »ç¿ëµÈ´Ù.

18-1-4.·ÎŸÀÔ

Á¦³×¸¯Àº Äڵ尡 º¹ÀâÇØÁö´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ ŸÀÔ ¾ÈÁ¤¼ºÀÌ ³ô°í »ç¿ë ÆíÀǼºµµ ÈǸ¢ÇÏ´Ù. ±×·¯³ª ÀÌ ÁÁÀº Á¦³×¸¯¿¡µµ Ä¡¸íÀûÀÎ ¾àÁ¡ÀÌ ÀÖ´Ù. ÀÚ¹ÙÀÇ Ãʱ⠹öÀüºÎÅÍ Áö¿øµÇ´ø °ÍÀÌ ¾Æ´Ï¶ó ÀÚ¹Ù 5ºÎÅÍ ºñ±³Àû ´Ê°Ô µµÀԵǾî Á¦³×¸¯ ÀÌÀüÀÇ ÄÚµå¿Í ÀÌÈÄÀÇ Äڵ尡 È¥ÀçÇÏ´Â »óȲÀÌ´Ù.

Á¦³×¸¯ ÀÌÀü¿¡ ArrayList¸¦ Àß ½á ¸Ô°í ÀÖ¾ú´Âµ¥ Á¦³×¸¯ÀÌ µµÀԵǾúÀ¸´Ï ¸ðµÎ ArrayList<T>·Î ¹Ù²Ù¶ó°í °­Á¦ÇÒ ¼ö´Â ¾ø´Ù. ±×·¡¼­ ÀÚ¹Ù´Â ¿ª ȣȯ¼ºÀ» À§ÇØ Å¸ÀÔ Àμö¸¦ »©°í Ŭ·¡½º¸í¸¸ »ç¿ëÇÏ´Â ·ÎŸÀÔ(Raw Type) °³³äÀ» µµÀÔÇß´Ù. ArrayList<T>ÀÇ ·ÎŸÀÔÀº ArrayListÀ̸ç ÀÌ µÑÀ» °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. °ú¿¬ ±×·±Áö ¿ì¸®°¡ Á÷Á¢ ¸¸µç Box<T> ŸÀÔÀ¸·Î Å×½ºÆ®ÇØ º¸ÀÚ.

 

rawtype

½ÇÇà°á°ú

class Box<T> {

     T value;

     Box(T value) { this.value = value; }

     T get() { return value; }

     void set(T value) { this.value = value; }

}

 

class JavaTest {

     public static void main(String[] args) {

          Box rb = new Box(1234);

          int rbv = (int)rb.get();

          System.out.println(rbv);

     }

}

1234

 

Ŭ·¡½º ¼±¾ð¹®¿¡´Â Box<T> Á¦³×¸¯À¸·Î ¼±¾ðÇßÁö¸¸ ½ÇÁ¦ »ç¿ëÇÒ ¶§´Â ±×³É Box ŸÀÔÀ¸·Î °´Ã¼ rb¸¦ »ý¼ºÇß´Ù. ÄÄÆÄÀÏÀº µÇÁö¸¸ ¾ÈÀüÇÏÁö ¾Ê´Ù´Â °æ°í°¡ ¹ß»ýÇÑ´Ù. Box´Â Á¦³×¸¯Àε¥ ¿Ö ·ÎŸÀÔÀ¸·Î »ç¿ëÇÏ´À³Ä´Â ¶æÀ̸ç ŸÀÔ Àμö¸¦ »ç¿ëÇ϶ó°í ±ÇÇÑ´Ù.

 

Box is a raw type. References to generic type Box<T> should be parameterized

 

·ÎŸÀÔÀº ŸÀÔ Àμö°¡ ¾ø¾î Á¦³×¸¯ ÀÌÀüÀÇ Å¬·¡½º¿Í °°Àº Ư¼ºÀ» º¸ÀδÙ. À§ ¿¹Á¦ÀÇ Box´Â ŸÀÔ¿¡ ´ëÇÑ Á¤º¸°¡ ¾ø¾î Object¸¦ ÀúÀåÇÏ¸ç µû¶ó¼­ °ªÀ» ÀÐÀ» ¶§ ij½ºÆÃÀÌ ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ Ä³½ºÆÃÀ» À߸øÇÏ¸é ´Ù¿îµÇ´Â À§Ç輺µµ ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â ¿¹¿Ü¸¦ ÀÏÀ¸Å²´Ù.

 

String a = (String)rb.get();

 

º¸´Ù½ÃÇÇ ·ÎŸÀÔÀº ij½ºÆõµ ÇØ¾ß ÇÏ°í ½Ç¼öÇÏ¸é ¿¹¿Ü¸¦ ÀÏÀ¸Å²´Ù. ±×·¯³ª ÀÌ·± À§ÇèÇÑ Äڵ带 ¿¡·¯·Î ó¸®ÇÏÁö ¾Ê°í °¡º­¿î °æ°í·Î ó¸®ÇÒ ¼ö ¹Û¿¡ ¾ø´Â ÀÌÀ¯´Â Box<T> ÀÌÀüÀÇ Box ŸÀÔÀ» »ç¿ëÇÏ´ø Äڵ嵵 ÄÄÆÄÀϵǾî¾ß Çϱ⠶§¹®ÀÌ´Ù. ³í¸®ÀûÀ¸·Î À§ÇèÇÏÁö¸¸ °ú°ÅÀÇ ¼Ò½º¸¦ À§ÇØ ¾î¿ ¼ö ¾ø´Â ¼±ÅÃÀÌ´Ù.

´õ °ñÄ¡ ¾ÆÇ ¹®Á¦´Â ·ÎŸÀÔ°ú Á¦³×¸¯À» ¼¯¾î¼­ »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. °ú°Å ¼Ò½ºÀÇ ÀϺο¡ Á¦³×¸¯À» Àû¿ëÇÒ ¼ö ÀÖ°í ÃֽŠ¼Ò½ºµµ °ú°ÅÀÇ ¸ðµâ°ú ÀڷḦ ÁÖ°í ¹Þ±â À§ÇØ ·ÎŸÀÔÀ» ½á¾ß ÇÑ´Ù. ±×·¡¼­ ÀÚ¹Ù´Â µÎ Çü½ÄÀ» ¼¯¾î¼­ »ç¿ëÇÏ´Â ±ÔÄ¢À» ¸¶·ÃÇß´Ù. ¾ÕÀ¸·Î Á¦³×¸¯¸¸ »ç¿ëÇÒ °ÍÀ̶ó¸é ÀÌÇÏÀÇ ³»¿ëÀº °ñÄ¡¸¸ ¾ÆÇÃ»Ó ½Ç¿ë¼ºÀÌ ¾ø¾î ¸ô¶óµµ »ó°ü¾ø´Ù.

·ÎŸÀÔÀÇ °´Ã¼¿Í Á¦³×¸¯ ŸÀÔÀÇ °´Ã¼¸¦ »óÈ£ ´ëÀÔÇÒ ¼ö Àִµ¥ °æ¿ì¿¡ µû¶ó °æ°í ¹ß»ý ¿©ºÎ°¡ ´Ù¸£´Ù. ´ëÀÔÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº °ð Àμö·Î Àü´ÞÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù. ¸ÕÀú ·ÎŸÀÔÀÇ °´Ã¼·Î Á¦³×¸¯ ŸÀÔÀÇ °´Ã¼¸¦ ´ëÀÔ¹Þ¾Æ º¸ÀÚ.

 

rawtype2

½ÇÇà°á°ú

class Box<T> {

     T value;

     Box(T value) { this.value = value; }

     T get() { return value; }

     void set(T value) { this.value = value; }

}

 

class JavaTest {

     public static void main(String[] args) {

          Box raw = new Box(1234);

          Box<Integer> para = new Box<Integer>(5678);

          raw = para;

          int value = (int)raw.get();

          System.out.println(value);

     }

}

5678

 

raw ŸÀÔÀÇ º¯¼ö¿¡ para ŸÀÔÀÇ °´Ã¼¸¦ ´ëÀÔÇß´Ù. ŸÀÔÀÌ ´Ù¸£Áö¸¸ Àß ´ëÀÔµÇ¸ç ½ÉÁö¾î °æ°íµµ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé para °´Ã¼¿¡ ÀúÀå °¡´ÉÇÑ ¸ðµç µ¥ÀÌÅÍ´Â raw °´Ã¼¿¡µµ ÀúÀåÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ´Ü, raw °´Ã¼´Â ŸÀÔ Á¤º¸°¡ ¾ø¾î ÀÐÀ» ¶§ ¹Ýµå½Ã ij½ºÆÃÇØ¾ß ÇÑ´Ù.

±×·¯³ª ij½ºÆÃÀ» À߸øÇÏ¸é ¿¹¿Ü¸¦ ÀÏÀ¸Å°¸ç ´Ù¿îµÈ´Ù. ·ÎŸÀÔÀ» ¾´ °³¹ßÀÚ´Â ÀÌ·± ºÒÆíÇÔÀ» ÀÌ¹Ì ¾Ë°í ÀÖÁö¸¸ ȣȯ¼º ¶§¹®¿¡ ¾î¿ ¼ö ¾øÀÌ ¾´ °ÍÀ̾ ÄÄÆÄÀÏ·¯°¡ ´õ °³ÀÔÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÙÀ½Àº ¹Ý´ëÀÇ °æ¿ì¸¦ º¸ÀÚ.

 

rawtype3

½ÇÇà°á°ú

class Box<T> {

     T value;

     Box(T value) { this.value = value; }

     T get() { return value; }

     void set(T value) { this.value = value; }

}

 

class JavaTest {

     public static void main(String[] args) {

          Box raw = new Box(1234);

          Box<Integer> para = new Box<Integer>(5678);

          para = raw;

          int value = para.get();

          System.out.println(value);

     }

}

1234

 

para ŸÀÔÀÇ º¯¼ö¿¡ raw ŸÀÔÀÇ °´Ã¼¸¦ ´ëÀÔÇß´Ù. ¿¡·¯´Â ¹ß»ýÇÏÁö ¾ÊÁö¸¸ ÀÌ °æ¿ì´Â ´ÙÀ½°ú °°Àº °æ°í°¡ ¹ß»ýÇÑ´Ù.

 

Type safety: The expression of type Box needs unchecked conversion to conform to Box<Integer>

 

Box ·ÎŸÀÔ °´Ã¼¿¡ ´ëÇؼ­´Â º¯È¯½Ã üũÇÒ ¼ö ¾ø¾î ¾ÈÀüÇÏÁö ¾Ê´Ù´Â °æ°íÀÌ´Ù. raw ¾È¿¡ ¾ÖÃÊ¿¡ ¹¹°¡ ÀúÀåµÇ¾î ÀÖ¾ú´ÂÁö È®½ÇÇÏÁö ¾Ê´Ù. para´Â ŸÀÔ Á¤º¸°¡ ÀÖ¾î ij½ºÆÃÇÏÁö ¾Ê°íµµ °ªÀ» ÀÐÀ» ¼ö ÀÖÀ¸¸ç raw¿¡ ÀúÀåµÈ °ªÀÌ Á¤»óÀûÀ¸·Î Àß Ãâ·ÂµÈ´Ù.

±×·¯³ª ¸¸¾à Box¿¡ ¹®ÀÚ¿­ÀÌ ÀúÀåµÇ¾î ÀÖ¾ú´Ù¸é ¾î¶»°Ô µÉ±î? rawÀÇ »ý¼ºÀÚ·Î ¹®ÀÚ¿­À» ÀúÀåÇØ º¸ÀÚ. raw´Â Object¸¦ ÀúÀåÇϹǷΠÁ¤¼ö³ª ¹®ÀÚ¿­À̳ª ´Ù ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç ÄÄÆÄÀÏÁß¿¡´Â ¿¡·¯¸¦ ¹ß°ßÇÒ ¼ö ¾ø´Ù.

 

Box raw = new Box("¹®ÀÚ¿­");

 

±×·¯³ª ÀÌ °´Ã¼¸¦ ´ëÀÔ¹ÞÀº para´Â ÀÚ½ÅÀÌ °¡¸®Å°´Â °´Ã¼¿¡ Á¤¼ö°¡ µé¾î ÀÖ´Ù°í ö½â°°ÀÌ ¹Ï°í ÀÖ¾î º¯È¯½Ã ŸÀÔ Ã¼Å©¸¦ »ý·«ÇÑ´Ù. Á¦´ë·Î ¸¸µç ÆĶó¹ÌÅÍ Å¸ÀÔ °´Ã¼¶ó¸é ŸÀÔÀ» üũÇÒ ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù. ±×·¯³ª Å»ýÀûÀ¸·Î ºÒ¾ÈÁ¤ÇÑ ·ÎŸÀÔÀ» ´ëÀÔ¹Þ¾Æ À§ÇèÇØÁ³À¸¸ç ¿¹¿Ü¸¦ ÀÏÀ¸Å°°í ´Ù¿îµÇ¾î ¹ö¸°´Ù.

±×·¡¼­ À§ÇèÇÏ´Ù´Â °æ°í°¡ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù. ¸¸¾à ÀÌ °æ°í°¡ ±ÍÂú´Ù¸é ¼³Á¤¿¡¼­ ²¨ ¹ö¸± ¼öµµ ÀÖ´Ù. ·ÎŸÀÔÀº ¿ªÈ£È¯¼ºÀ» À§ÇØ ºÒ°¡ÇÇÇÏ°Ô Áö¿øÇÏ´Â °ÍÀÏ »ÓÀÌ¸ç ±¸Çü Äڵ带 À§Çؼ­ ¾ÆÁ÷µµ °¡²û ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖ´Ù. ¾ÕÀ¸·Î´Â »ç¿ëÀ» ÀÚÀçÇÏ°í °¡±ÞÀûÀ̸é Á¦³×¸¯ ŸÀÔÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

18-1-5.Á¦³×¸¯ ¸Þ¼­µå

Á¦³×¸¯ ¸Þ¼­µå´Â ŸÀÔ ÆĶó¹ÌÅ͸¦ ¹Þ¾Æ µéÀδÙ. Á¦³×¸¯ Ŭ·¡½º¿Í °³³äÀº À¯»çÇÏÁö¸¸ ŸÀÔ ÆĶó¹ÌÅÍÀÇ ¹üÀ§°¡ ¸Þ¼­µå ³»ºÎ·Î ±¹Çѵȴٴ Á¡ÀÌ ´Ù¸£´Ù. »ý¼ºÀÚ¸¦ Æ÷ÇÔÇÏ¿© Á¤Àû, ºñÁ¤Àû ¸Þ¼­µå ¸ðµÎ Á¦³×¸¯ÀÏ ¼ö ÀÖ´Ù. Á¦³×¸¯ ¸Þ¼­µåÀÇ Å¸ÀÔ Àμö´Â ¸®ÅÏ Å¸ÀÔ ¾ÕÀÇ < > °ýÈ£ ¾È¿¡ Ç¥±âÇϸç È£ÃâÇÒ ¶§µµ ŸÀÔÀ» ¹àÈù´Ù. ´ÙÀ½ ¿¹Á¦·Î Á¦³×¸¯ ¸Þ¼­µåÀÇ ¼±¾ð ¹æ½Ä°ú °³³äÀ» »ìÆ캸ÀÚ.

 

genmethod

½ÇÇà°á°ú

class JavaTest {

     static <T> void print(T a) {

          System.out.println(a);

     }

 

     public static void main(String[] args) {

          JavaTest.<Integer>print(1234);

          JavaTest.<String>print("¹®ÀÚ¿­");

     }

}

1234

¹®ÀÚ¿­

 

print ¸Þ¼­µå´Â ÀÓÀÇÀÇ T ŸÀÔ¿¡ ´ëÇÑ Àμö a¸¦ Àü´Þ¹Þ¾Æ ÀÌ °ªÀ» ÄַܼΠÃâ·ÂÇÏ´Â °£´ÜÇÑ µ¿ÀÛÀ» ÇÑ´Ù. Àμö aÀÇ Å¸ÀÔÀº ¸Þ¼­µå¸¦ È£ÃâÇÒ ¶§ ½Ç ŸÀÔ Àμö·Î °áÁ¤µÈ´Ù. Á¤¼ö³ª ¹®ÀÚ¿­À̳ª ´Ù Àß Ãâ·ÂµÈ´Ù.

È£Ãâ ±¸¹®ÀÇ ½ÇŸÀÔ Àμö ÁöÁ¤¹®ÀÌ º¹ÀâÇÏ°í ¾î»öÇØ º¸ÀδÙ. ´ÙÇàÈ÷ ¸Þ¼­µå·Î Àü´ÞµÇ´Â ½ÇÀμöÀÇ Å¸ÀÔÀ¸·ÎºÎÅÍ À¯ÃßÇÒ ¼ö ÀÖ¾î »ý·« °¡´ÉÇÏ¸ç º¸Åë ¸Þ¼­µå¿Í °°ÀÌ ÀÚ¿¬½º·´°Ô È£ÃâÇÒ ¼ö ÀÖ´Ù. Á¤Àû ¸Þ¼­µå³¢¸®ÀÇ È£ÃâÀ̹ǷΠJavaTest.µµ »ý·« °¡´ÉÇÏ´Ù.

 

JavaTest.print(1234);

JavaTest.print("¹®ÀÚ¿­");

 

Á¦³×¸¯ ¸Þ¼­µåÀÇ º»Ã¼´Â Àμö·Î Àü´ÞµÇ´Â ¸ðµç ŸÀÔ¿¡ ´ëÇØ µ¿ÀÛÇÏ´Â Äڵ常 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. À§ ¿¹Á¦´Â println ¸Þ¼­µå°¡ ÀÓÀÇÀÇ Å¸ÀÔÀ» ¹ÞÀ¸¹Ç·Î ÀÌ»ó ¾øÀÌ Àß µ¿ÀÛÇÏÁö¸¸ °£´ÜÇÑ ¿¬»êÀÚ¸¸ »ç¿ëÇصµ ÄÄÆÄÀÏÀÌ ¾ÈµÈ´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.

 

static <T> T abs(T a) {

     if (a > 0) {

          return a;

     } else {

          return -a;

     }

}

 

<T> T max(T a, T b) {

     if (a > b) {

          return a;

     } else {

          return b;

     }

}

 

Àý´ë°ªÀ» ã°Å³ª µÑ Áß Å« °ªÀ» Á¶»çÇÏ´Â ¸Þ¼­µå¸¦ Á¦³×¸¯À¸·Î ÀÛ¼ºÇߴµ¥ > ¿¬»êÀÚ°¡ ¸ðµç ŸÀÔ¿¡ ´ëÇØ µ¿ÀÛÇÏÁö ¾Ê¾Æ Á¦³×¸¯ÀÌ µÉ ¼ö ¾ø´Ù. C++Àº ÅÛÇø´ÀÌ ÀνºÅϽºÈ­µÇ±â Àü±îÁö ¹®¹ý Á¡°ËÀ» ¹Ì·ç¾î ÀÏ´Ü ÄÄÆÄÀÏ °¡´ÉÇÏ´Ù. ±×·¯³ª À߸øµÈ ŸÀÔÀ» ¾²¸é ½ÇÇàÁß ¿¡·¯°¡ ¹ß»ýÇÏ¸ç °³¹ßÀÚ°¡ ¾Ë¾Æ¼­ ¸Þ¼­µå º»Ã¼¿Í ȣȯµÇ´Â ŸÀÔÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

¹Ý¸é ÀÚ¹Ù´Â ÆĶó¹ÌÅ͸¦ Á¦ÇÑÇÏÁö ¾Ê´Â ÇÑ ¸ðµç ŸÀÔ¿¡ ´ëÇØ µ¿ÀÛ °¡´ÉÇÑ Äڵ常 ÀÎÁ¤ÇÏ¿© ´õ ¾ö°ÝÇÏ´Ù. ±×·¡¼­ Á¦³×¸¯ ¸Þ¼­µåÀÇ Å¸ÀÔ Àμö´Â ¸Þ¼­µå º»Ã¼¿¡¼­ Á÷Á¢ »ç¿ëµÇ´Â °æ¿ì°¡ ÈçÇÏÁö ¾ÊÀ¸¸ç ÁÖ·Î ÀμöÀÇ Å¸ÀÔÀ» °áÁ¤ÇÏ´Â ¿ëµµ·Î »ç¿ëµÈ´Ù.

 

genarg

½ÇÇà°á°ú

import java.util.ArrayList;

 

class JavaTest {

     static <T> void dumpArray(ArrayList<T> ar) {

          for (T a : ar) {

              System.out.println(a);

          }

     }

 

     public static void main(String[] args) {

          ArrayList<String> yoil = new ArrayList<String>();

          yoil.add("ÀÏ¿äÀÏ");

          yoil.add("¿ù¿äÀÏ");

          JavaTest.<String>dumpArray(yoil);

         

          ArrayList<Integer> score = new ArrayList<Integer>();

          score.add(98);

          score.add(72);

          JavaTest.<Integer>dumpArray(score);

     }

}

ÀÏ¿äÀÏ

¿ù¿äÀÏ

98

72

 

dumpArray ¸Þ¼­µå´Â ArrayList<T> ŸÀÔÀ» Àü´Þ¹Þ¾Æ ÄַܼΠ´ýÇÁÇÑ´Ù. ¸Þ¼­µå º»Ã¼¿¡¼­´Â ¹è¿­À» ¼øȸÇÏ¸ç ¿ä¼Ò¸¦ ²¨³» Ãâ·ÂÇÑ´Ù. Àμö·Î ¹ÞÀ» ¹è¿­ÀÇ ¿ä¼Ò ŸÀÔÀÌ Á¦°¢°¢À̾ ŸÀÔ Àμö°¡ ÇÊ¿äÇϸç È£ÃâÇÒ ¶§ ¾î¶² ŸÀÔÀÇ ¹è¿­ÀÎÁö ¹àÇô¾ß ÇÑ´Ù.