ÀÚ¹Ù 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½ºÆÃÇÒ ÇÊ¿ä°¡ ¾ø¾î ÆíÀǼº°ú
¾ÈÀü¼ºÀÌ Çâ»óµÈ´Ù.
Á¦³×¸¯ÀÇ ÁÖ È°¿ëó°¡ Ä÷º¼ÇÀ̸ç Ä÷º¼ÇÀ» À§ÇØ Á¦³×¸¯ ¹®¹ýÀÌ µîÀåÇß´Ù°í Çصµ °ú¾ðÀÌ ¾Æ´Ï´Ù. »ç¿ë¸¸À» ¸ñÀûÀ¸·Î ÇÑ´Ù¸é ¿©±â±îÁö¸¸ ¾Ë¾Æµµ ¹«¹æÇÏ´Ù. ¶ÇÇÑ ÀÚ¹Ù¸¦
óÀ½ °øºÎÇÏ°í ÀÖ´Ù¸é ÀÌÇÏÀÇ ³»¿ëÀº ´Ù¼Ò ÇмúÀûÀ̹ǷΠÂ÷ÈÄ¿¡ ÀÚ¹Ù¿¡ ´ëÇÑ °æÇèÀ» ¾î´À Á¤µµ ½×Àº ÈÄ¿¡ °øºÎÇÏ´Â °ÍÀÌ ÁÁ´Ù. Á¦³×¸¯ Ŭ·¡½º¸¦ Á÷Á¢ ¸¸µé°Å³ª Á» ´õ ±íÀº °÷±îÁö ¾Ë°í ½Í´Ù¸é °è¼Ó ÀÐ¾î º¸ÀÚ.
Á¦³×¸¯ ŸÀÔÀÇ µ¿ÀÛ ¹æ½Ä°ú ³»ºÎ¸¦ ¾Ë¾Æº¸±â À§ÇØ Á¦³×¸¯ Ŭ·¡½º¸¦ Á÷Á¢ ¸¸µé¾î º¸°í Á¦³×¸¯ÀÌ ¿Ö ÇÊ¿äÇÑÁö ¿¬±¸ÇØ
º¸ÀÚ.
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½ºÆÃÇϸé ÄÄÆÄÀÏ ¿¡·¯·Î ó¸®µÇ¾î ¾ÈÀüÇÏ´Ù. ½Ç½À ÆíÀÇ»ó ÁַΠŬ·¡½º¸¦ ¸¸µé¾î º¸°í ¼³¸íµµ Ŭ·¡½º À§ÁÖ·Î Çϴµ¥ Á¦³×¸¯ Ŭ·¡½º¿¡ Àû¿ëµÇ´Â ¸ðµç ¹®¹ýÀº Á¦³×¸¯
ÀÎÅÍÆäÀ̽º¿¡µµ µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù.
¸Þ¼µåÀÇ Àμöó·³ Á¦³×¸¯ÀÇ Å¸ÀÔ Àμöµµ µÎ °¡Áö°¡ ÀÖ´Ù. Á¤ÀÇÇÒ ¶§´Â
ª°í °£´ÜÇÑ À̸§À» ¾²°í ¼±¾ðÇÒ ¶§ ½ÇÁ¦ Àû¿ëÇÒ Å¸ÀÔÀ» Àü´ÞÇÑ´Ù.
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°³ Á¤µµ¸¸ »ç¿ëµÈ´Ù.
Á¦³×¸¯Àº Äڵ尡 º¹ÀâÇØÁö´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ ŸÀÔ ¾ÈÁ¤¼ºÀÌ ³ô°í »ç¿ë ÆíÀǼºµµ ÈǸ¢ÇÏ´Ù. ±×·¯³ª ÀÌ ÁÁÀº Á¦³×¸¯¿¡µµ Ä¡¸íÀûÀÎ ¾àÁ¡ÀÌ ÀÖ´Ù. ÀÚ¹ÙÀÇ Ãʱ⠹öÀüºÎÅÍ
Áö¿øµÇ´ø °ÍÀÌ ¾Æ´Ï¶ó ÀÚ¹Ù 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´Â ÀÚ½ÅÀÌ °¡¸®Å°´Â °´Ã¼¿¡ Á¤¼ö°¡
µé¾î ÀÖ´Ù°í ö½â°°ÀÌ ¹Ï°í ÀÖ¾î º¯È¯½Ã ŸÀÔ Ã¼Å©¸¦ »ý·«ÇÑ´Ù. Á¦´ë·Î ¸¸µç ÆĶó¹ÌÅÍ Å¸ÀÔ °´Ã¼¶ó¸é ŸÀÔÀ»
üũÇÒ ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù. ±×·¯³ª Å»ýÀûÀ¸·Î ºÒ¾ÈÁ¤ÇÑ ·ÎŸÀÔÀ» ´ëÀÔ¹Þ¾Æ À§ÇèÇØÁ³À¸¸ç ¿¹¿Ü¸¦ ÀÏÀ¸Å°°í
´Ù¿îµÇ¾î ¹ö¸°´Ù.
±×·¡¼ À§ÇèÇÏ´Ù´Â °æ°í°¡ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù. ¸¸¾à ÀÌ °æ°í°¡ ±ÍÂú´Ù¸é
¼³Á¤¿¡¼ ²¨ ¹ö¸± ¼öµµ ÀÖ´Ù. ·ÎŸÀÔÀº ¿ªÈ£È¯¼ºÀ» À§ÇØ ºÒ°¡ÇÇÇÏ°Ô Áö¿øÇÏ´Â °ÍÀÏ »ÓÀÌ¸ç ±¸Çü Äڵ带
À§Çؼ ¾ÆÁ÷µµ °¡²û ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖ´Ù. ¾ÕÀ¸·Î´Â »ç¿ëÀ» ÀÚÀçÇÏ°í °¡±ÞÀûÀ̸é Á¦³×¸¯ ŸÀÔÀ» »ç¿ëÇؾß
ÇÑ´Ù.
Á¦³×¸¯ ¸Þ¼µå´Â ŸÀÔ ÆĶó¹ÌÅ͸¦ ¹Þ¾Æ µéÀδÙ. Á¦³×¸¯ Ŭ·¡½º¿Í °³³äÀº
À¯»çÇÏÁö¸¸ ŸÀÔ ÆĶó¹ÌÅÍÀÇ ¹üÀ§°¡ ¸Þ¼µå ³»ºÎ·Î ±¹Çѵȴٴ Á¡ÀÌ ´Ù¸£´Ù. »ý¼ºÀÚ¸¦ Æ÷ÇÔÇÏ¿© Á¤Àû, ºñÁ¤Àû ¸Þ¼µå ¸ðµÎ Á¦³×¸¯ÀÏ ¼ö ÀÖ´Ù. Á¦³×¸¯ ¸Þ¼µåÀÇ Å¸ÀÔ Àμö´Â
¸®ÅÏ Å¸ÀÔ ¾ÕÀÇ < > °ýÈ£ ¾È¿¡ Ç¥±âÇϸç È£ÃâÇÒ ¶§µµ ŸÀÔÀ» ¹àÈù´Ù. ´ÙÀ½ ¿¹Á¦·Î Á¦³×¸¯ ¸Þ¼µåÀÇ ¼±¾ð ¹æ½Ä°ú °³³äÀ» »ìÆ캸ÀÚ.
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> ŸÀÔÀ» Àü´Þ¹Þ¾Æ ÄַܼΠ´ýÇÁÇÑ´Ù. ¸Þ¼µå º»Ã¼¿¡¼´Â ¹è¿À»
¼øȸÇÏ¸ç ¿ä¼Ò¸¦ ²¨³» Ãâ·ÂÇÑ´Ù. Àμö·Î ¹ÞÀ» ¹è¿ÀÇ ¿ä¼Ò ŸÀÔÀÌ Á¦°¢°¢ÀÌ¾î¼ Å¸ÀÔ Àμö°¡ ÇÊ¿äÇϸç È£ÃâÇÒ
¶§ ¾î¶² ŸÀÔÀÇ ¹è¿ÀÎÁö ¹àÇô¾ß ÇÑ´Ù.