ÀÚ¹Ù ÀÚ·áÇüÀÇ °³³ä


[ ´ÙÀ½ ±Ûµé ] [ À̾ ±Û¿Ã¸®±â(´äÇϱâ) ] [ ÀÚ¹Ù ¹¯°í ´äÇϱâ ]

±Û¾´ÀÌ :±è´öÅ 1998³â 4¿ù 17ÀÏ 16:24:07

ÀÚ¹ÙÀÇ ÀÚ·áÇü °³³ä¿¡ ´ëÇؼ­ Á¦ ³ª¸§´ë·Î °£°áÇϸ鼭 ¾ö¹ÐÇÏ°Ô
Á¤¸®ÇÑ ³»¿ëÀ» ¼Ò°³Çϸç, ÀÚ¹Ù ¾ð¾îÀÇ ¹®¹ý°ú °³³äÀ» ½±°Ô ÀÌÇØÇÏ´Â µ¥
µµ¿òÀ» µÇ¸®¶ó »ý°¢ÇÕ´Ï´Ù.


Java Language SpecificationÀº ±âº»ÀÚ·áÇü, ¹è¿­ ÀÚ·áÇü, Ŭ·¡½º,
ÀÎÅÍÆäÀ̽º ÀÚ·áÇü°ú ÀÌµé »çÀÌÀÇ °ü°è¿¡ ´ëÇؼ­ ³­ÇØÇÏ°Ô ±â¼úÇÏ°í
ÀÖÀ¸³ª, ±× ¹ÙÅÁÀÌ µÇ´Â °³³ä ÀÚü´Â ±×·¸°Ô º¹ÀâÇÏÁö´Â ¾Ê½À´Ï´Ù.
ÀÌ¿¡ ´ëÇÑ ´Ù¸¥ °ßÇØ°¡ ÀÖ´Ù¸é ´ñ±ÛÀ» ¿Ã·ÁÁֽñ⠹ٶø´Ï´Ù.



==== »óÀ§ ÀÚ·áÇü°ú ÇÏÀ§ ÀÚ·áÇü =======


±âº» ÀÚ·áÇü°ú ±âŸ ÀÚ·áÇü°úÀÇ Â÷ÀÌ´Â ¿©·¯°÷¿¡¼­ ¼Ò°³µÇ¾î ÀÖÀ¸´Ï
»ý·«ÇÏ°í, ³ª¸ÓÁö ÀÚ·áÇüÀÇ °ü°è´Â ¸ðµÎ »óÀ§ ÀÚ·áÇü, ÇÏÀ§ ÀÚ·áÇü °ü°è·Î
ÆľÇÇÒ ¼ö ÀÖ½À´Ï´Ù.


- Ŭ·¡½º C°¡ Ŭ·¡½º C2ÀÇ ÇÏÀ§ Ŭ·¡½º¶ó¸é, C´Â C2ÀÇ ÇÏÀ§ ÀÚ·áÇüÀÔ´Ï´Ù.
¿¹) C2 c2 = new C();
- Ŭ·¡½º C°¡ ÀÎÅÍÆäÀ̽º I¸¦ ±¸Çö(implements)ÇÑ´Ù¸é, C´Â IÀÇ ÇÏÀ§ ÀÚ·áÇüÀÔ´Ï´Ù.
¿¹) I i1 = new C();
- ¸ðµç ¹è¿­ (int[], Object[], TextField[], ...)Àº Object¶ó´Â Ŭ·¡½ºÀÇ ÇÏÀ§
ÀÚ·áÇüÀÔ´Ï´Ù.
¿¹) Object obj = new int[10];
- ÀÚ·áÇü A°¡ ÀÚ·áÇü BÀÇ ÇÏÀ§ ÀÚ·áÇüÀ̶ó¸é, A[]´Â B[]ÀÇ ÇÏÀ§ ÀÚ·áÇüÀÔ´Ï´Ù.
¿¹) Object[] objs = new Long[10];


ÇÏÀ§ ÀÚ·áÇüÀÇ °´Ã¼´Â ±× »óÀ§ ÀÚ·áÇü¿¡ ¼ÓÇÕ´Ï´Ù.
µû¶ó¼­, ´ÙÀ½°ú °°Àº È¿°ú¸¦ °®½À´Ï´Ù.


1. º¯¼ö (Áö¿ªº¯¼ö, ¸Å°³º¯¼ö, ÀνºÅϽº º¯¼ö, Ŭ·¡½º º¯¼ö)¸¦
¹è¿­ ȤÀº Ŭ·¡½º ȤÀº ÀÎÅÍÆäÀ̽º ÀÚ·áÇü A·Î ¼±¾ðÇϸé,
¾ö¹ÐÇÏ°Ô´Â, ±× º¯¼öÀÇ ÀÚ·áÇüÀÌ AÀÓÀ» ÀǹÌÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó,
`ÀÚ·áÇü A (ÇÏÀ§ ÀÚ·áÇü Æ÷ÇÔ) °´Ã¼ÀÇ ÂüÁ¶°ª'À» ÀúÀåÇÏ´Â
º¯¼ö·Î ¼±¾ðÇÏ´Â °ÍÀÔ´Ï´Ù.
¿¹) C c1; // c1Àº Ŭ·¡½º C °´Ã¼ .
// ¾ö¹ÐÇÏ°Ô´Â, Ŭ·¡½º C (ÇÏÀ§ ÀÚ·áÇü Æ÷ÇÔ) °´Ã¼ÀÇ ÂüÁ¶°ª
C[] c2; // c2´Â CÀÇ ¹è¿­.
// ¾ö¹ÐÇÏ°Ô´Â, Ŭ·¡½º C °´Ã¼ (ÇÏÀ§ ÀÚ·áÇü Æ÷ÇÔ) °´Ã¼ÀÇ ÂüÁ¶°ªÀÇ
// ¹è¿­ÀÇ ÂüÁ¶°ª
C[][] c3; // c3´Â CÀÇ ¹è¿­ÀÇ ¹è¿­
// ¾ö¹ÐÇÏ°Ô´Â, Ŭ·¡½º C °´Ã¼ (ÇÏÀ§ ÀÚ·áÇü Æ÷ÇÔ)ÀÇ ÂüÁ¶°ªÀÇ
// ¹è¿­ÀÇ ÂüÁ¶°ªÀÇ ¹è¿­ÀÇ ÂüÁ¶°ª
2. »óÀ§ ÀÚ·áÇü¿¡ Á¤ÀǵǾî ÀÖ´Â ¸ðµç ¸Þ½îµå¸¦ ±× ÇÏÀ§ ÀÚ·áÇü °´Ã¼¿¡¼­µµ
È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. (µ¿ÀÏ ÀÚ·áÇü ȤÀº ÇÏÀ§ ÀÚ·áÇüÀ¸·Î ¼±¾ðµÈ
ÂüÁ¶°ªÀ» ÅëÇÏ¿©)
3. ÇÏÀ§ ÀÚ·áÇüÀÇ ÂüÁ¶°ªÀº »óÀ§ ÀÚ·áÇüÀ¸·Î ¼±¾ðµÈ º¯¼ö·Î ´ëÀÔ°¡´ÉÇϸç,
»ý¼ºÀÚ, ¸Þ½îµå¿¡¼­ »óÀ§ ÀÚ·áÇüÀ¸·Î ¼±¾ðµÈ ÀÎÀÚ·Î ³Ñ°ÜÁÙ ¼ö ÀÖ½À´Ï´Ù.
4. °´Ã¼ÀÇ ÂüÁ¶°ªÀ» ±× °´Ã¼°¡ °®´Â ¿©·¯ ÀÚ·áÇüÁß ¾î´À °ÍÀ¸·Îµç
¸í½ÃÀû Çüº¯È¯ (type casting)À» ÇÒ ¼ö ÀÖ½À´Ï´Ù.


==== Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º =====


Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© °´Ã¼¸¦ ¸¸µé ¼ö´Â ÀÖÁö¸¸, ÀÎÅÍÆäÀ̽º·Î Á÷Á¢ °´Ã¼¸¦
¸¸µéÁö´Â ¸øÇÕ´Ï´Ù. ÇÏÁö¸¸, ±× Ŭ·¡½º C°¡ ÀÎÅÍÆäÀ̽º I¸¦ ±¸ÇöÇÑ´Ù¸é,
Ŭ·¡½º C °´Ã¼ÀÇ ÀÚ·áÇüÀº Cµµ µÇ°í Iµµ µË´Ï´Ù.
µû¶ó¼­, Ŭ·¡½º C °´Ã¼¿¡¼­ ÀÎÅÍÆäÀ̽º IÀÇ ¸Þ½îµå¸¦ È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç,
Ŭ·¡½º CÀÇ °´Ã¼(ÀÇ ÂüÁ¶°ª)ÀÇ ÂüÁ¶°ªÀ» ÀÎÅÍÆäÀ̽º I·Î ¼±¾ðµÈ º¯¼ö¿¡
´ëÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù.


==== ¹è¿­°ú Ŭ·¡½º =========


¹è¿­Àº ObjectÀÇ ÇÏÀ§ ÀÚ·áÇüÀ̹ǷÎ, Object Ŭ·¡½ºÀÇ ¸ðµç ¸Þ½îµå¸¦
È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç (toString, notify, ...), ±× ÂüÁ¶°ªÀ»
Object Ŭ·¡½º ÀÚ·áÇüÀÇ º¯¼ö¿¡ ´ëÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
µû¶ó¼­, Ŭ·¡½º¿Í À¯»çÇÑ ¸éÀÌ ¸¹Áö¸¸ (ÇÏÀ§ Ŭ·¡½º¸¦ Á¤ÀÇÇÏÁö ¸øÇÑ´Ù´Â
¸é¿¡¼­´Â final Ŭ·¡½º¿Í ´õ À¯»ç), ±× ¹®¹ý°ú Àǹ̰¡ ´Ù¸¥ Á¡ÀÌ
ÀÖÀ¸¹Ç·Î (Áï, Ŭ·¡½º¿¡¼­´Â ÀÚ·áÇü ¼±¾ð, »ý¼ºÀÚ ¹× ¿¬»êÀÚ¿¡¼­ []¸¦
»ç¿ëÇÒ ¼ö ¾øÀ½) ¹è¿­°ú ±¸ºÐµË´Ï´Ù.


===== Á¤Àû ÀÚ·áÇü°ú µ¿Àû ÀÚ·áÇü =====


ÀÚ¹ÙÀÇ Å¬·¡½º, ÀÎÅÍÆäÀ̽º, ¹è¿­Àº »ó¼Ó°ú ±¸Çö, ¸Þ½îµå ÀçÁ¤ÀÇ
(overriding) ±â´ÉÀ» ÅëÇÏ¿© µ¿Àû ÀÚ·áÇüÀÇ °³³äÀÌ ¾î´ÀÁ¤µµ Á¦°øµÇÁö¸¸,
ÀÌ´Â Á¤Àû ÀÚ·áÇüÀÇ Æ²¾È¿¡¼­ Á¦°øµÇ´Â °ÍÀ̹ǷΠÁ¦ÇÑÀÌ ¸¹½À´Ï´Ù. Á¤Àû
ÀÚ·áÇüÀÇ ÀÕÁ¡À¸·Î´Â ÄÄÆÄÀϽÿ¡ ¿ø½Ã È­Àϳ»ÀÇ ¸ðµç º¯¼öÀÇ ÀÚ·áÇü ¼±¾ð,
°´Ã¼ »ý¼º, º¯¼öÀÇ »ç¿ë¿¡ À־ ÀÚ·áÇüÀÇ ÀÏÄ¡¼ºÀ» ¹Ì¸® °Ë»çÇØÁÜÀ¸·Î½á
ÇÁ·Î±×·¥ÀÇ ¿À·ù¸¦ Á¶±â ¹ß°ßÇÏ°í, Á¤È®ÇÑ ÀÚ·áÇüÀÌ ÄÄÆÄÀϽÿ¡
¾Ë·ÁÁüÀ¸·Î½á º¸´Ù È¿À²ÀûÀÎ Äڵ带 »ý¼ºÇس¾ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.


ÄÄÆÄÀϽÿ¡ ¾Ë·ÁÁöÁö ¾ÊÀº ÀÚ·áÇü (Áï, ¿ø½ÃÈ­Àϳ»¿¡ ¸íÈ®È÷ ÀÚ·áÇüÀ»
¼±¾ðÇÏÁö ¾ÊÀº °æ¿ì¿¡ ÇØ´ç)À» ´Ù·ê ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì¿¡´Â ÀÚ¹ÙÀÇ µ¿Àû
ÀÚ·áÇü ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ´Â java.lang.Object Ŭ·¡½ºÀÇ
getClass() ¸Þ½îµå, java.lang.Class Ŭ·¡½º, java.lang.reflect ÆÐÅ°Áö¿¡
ÀÇÇØ Á¦°øµË´Ï´Ù. À̸¦ »ç¿ëÇϸé, ¿ø½Ã È­Àϳ»¿¡ ÀÚ·áÇüÀ» ¸íÈ®È÷
Ç¥ÇöÇÏÁö ¾Ê°íµµ, °´Ã¼ÀÇ ½ÇÁ¦ ÀÚ·áÇüÀ» ¾Ë¾Æ³»°Å³ª, »ç¿ëÀÚÀÇ ÀԷµîÀ»
ÅëÇØ Àü´Þ¹ÞÀº ÀÚ·áÇü À̸§À» ÅëÇؼ­ °´Ã¼¸¦ ¸¸µé°Å³ª, °´Ã¼ÀÇ Çʵå¿Í
¸Þ½îµå¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. À¯¿¬¼ºÀ» ¾òÀ» ¼ö´Â ÀÖÁö¸¸, ÄÄÆÄÀϽÿ¡
ÀÚ·áÇü ÀÏÄ¡ °Ë»ç¸¦ ÇØÁÖÁö ¸øÇϹǷÎ, ÇÁ·Î±×·¡¸Ó°¡ ´õ Á¶½ÉÇؾߵǰí,
¼º´ÉÀÌ ÀúÇ쵃 ¼ö ÀÖ´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù.


µ¿Àû ÀÚ·áÇü¿¡¼­ °¡Àå ÇÙ½ÉÀÌ µÇ´Â Ŭ·¡½º°¡ java.lang.ClassÀ̸ç ÀÌ Å¬·¡½ºÀÇ
°¢ °´Ã¼´Â ƯÁ¤ ÀÚ·áÇü (Ŭ·¡½º, ÀÎÅÍÆäÀ̽º, ¹è¿­, ±âº»ÀÚ·áÇü)À»
³ªÅ¸³»´Â °´Ã¼ÀÔ´Ï´Ù.
°´Ã¼À̱⿡ ±× ÂüÁ¶°ªÀ» ÀúÀåÇÒ ¼ö ÀÖ°í, ¸Å°³º¯¼ö·Î Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ, Class °´Ã¼ÀÇ ¿©·¯ ¸Þ½îµå¸¦ È£ÃâÇÏ¿© ±× Class °´Ã¼°¡ ³ªÅ¸³»´Â
ÀÚ·áÇü¿¡ ´ëÇÑ Á¤º¸ (Çʵå¿Í ¸Þ½îµå Æ÷ÇÔ)¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù.


--
Deogtae Kim (±è´öÅÂ)
CA Lab. CS Dept. KAIST
http://calab.kaist.ac.kr/~dtkim/java





´ÙÀ½ ±Ûµé:



À̾ ±Û¿Ã¸®±â(´äÇϱâ)

À̸§:
E-Mail:
Á¦¸ñ:
³»¿ë:
°ü·Ã URL(¼±ÅÃ):
URL Á¦¸ñ(¼±ÅÃ):
°ü·Ã À̹ÌÁö URL:


[ ´ÙÀ½ ±Ûµé ] [ À̾ ±Û¿Ã¸®±â(´äÇϱâ) ] [ ÀÚ¹Ù ¹¯°í ´äÇϱâ ]