ÀÚ¹Ù SDK´Â °Å´ëÇÑ ÀÚ¹Ù API ½Ã½ºÅÛ
¶óÀ̺귯¸®¸¦ Æ÷ÇÔÇÑ´Ù. ±âº»ÀûÀÎ ÀڷᱸÁ¶¿Í ÀÚÁÖ »ç¿ëÇÏ´Â ¾Ë°í¸®ÁòÀ» Á¦°øÇÏ¸ç ³×Æ®¿÷, ±×·¡ÇÈ, µ¥ÀÌÅͺ£À̽º µî ½Ç¹«¿ë ±â´É±îÁö ´ë°Å ¸Á¶óÇÏ°í ÀÖÀ¸¸ç ½Å±â¼úµµ
¹ßºü¸£°Ô Á¦°øÇÑ´Ù.
ÀÚ¹Ù API¸¸ Àß È°¿ëÇصµ ±âº» Äڵ带 ÀÏÀÏÀÌ ÀÛ¼ºÇÒ ÇÊ¿ä°¡ ¾ø°í
ºñ½Ñ ¿ÜºÎ ¶óÀ̺귯¸®¸¦ ±¸ÀÔÇÏÁö ¾Ê¾Æµµ ´ëºÎºÐÀÇ ±â´ÉÀ» ¾µ ¼ö ÀÖ´Ù. ÀÌ ¹æ´ëÇÑ ¶óÀ̺귯¸®¸¦ Àß È°¿ëÇÏ·Á¸é API ±¸Á¶¸¦ ¹Ì¸® ÆľÇÇØ µÎ¾î¾ß ÇÏ¸ç ·¹ÆÛ·±½º¸¦ Àß È°¿ëÇØ¾ß ÇÑ´Ù.
Àڹ٠Ŭ·¡½º ¶óÀ̺귯¸®ÀÇ ·çÆ® Ŭ·¡½º´Â ObjectÀÌ¸ç ¸ðµç Ŭ·¡½º°¡ Object·ÎºÎÅÍ ÆÄ»ýµÈ´Ù. Ŭ·¡½º ¼±¾ð¹®¿¡ extends ÀýÀÌ ¾ø´õ¶óµµ ÄÄÆÄÀÏ·¯´Â Object·ÎºÎÅÍ »ó¼Ó¹Þ´Â
°ÍÀ¸·Î °£ÁÖÇÑ´Ù. Áö±Ý±îÁö ½Ç½ÀÀ¸·Î ¸¸µé¾ú´ø Car, Human Ŭ·¡½ºÀÇ
¼±¾ð¹®Àº ½ÇÁ¦ ´ÙÀ½°ú °°´Ù.
class Human extends Object {
}
º°µµÀÇ ºÎ¸ð Ŭ·¡½º¸¦ ÁöÁ¤ÇÑ °æ¿ìµµ °èÃþÀ» µû¶ó ¿Ã¶ó°¡¸é ½ÃÀÛÀº Ç×»ó
ObjectÀÌ¸ç ¸ðµç Ŭ·¡½º´Â °£Á¢ÀûÀ¸·Î Object¸¦ »ó¼Ó¹Þ´Â´Ù. µû¶ó¼ ÀÚ¹ÙÀÇ ¸ðµç Ŭ·¡½º´Â ObjectÀÇ ÈļÕÀ̸ç ObjectÀÇ ¸â¹ö¸¦ °øÀ¯ÇÏ°í ObjectÀÇ ¸Þ¼µå¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. Object´Â ¸ðµç ÈÄ¼Õ Å¬·¡½º¿¡ °øÅëÀûÀ¸·Î ÇÊ¿äÇÑ ±âº» ±â´ÉÀÇ ¸ñ·ÏÀ» Á¦°øÇÑ´Ù.
ÀÚÁÖ »ç¿ëµÇ´Â Áß¿äÇÑ ±â´ÉÀ» Á¤ÀÇÇϹǷΠObject ÀÚü¸¦ Àß ¿¬±¸ÇØ
µÑ ÇÊ¿ä°¡ ÀÖ´Ù. Object´Â ¸Þ¼µå¸¸ °¡Áö¸ç Çʵå´Â ´Ü Çϳªµµ Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇÏ¸é ·çÆ®ÀÇ Çʵå´Â ¸ðµç Èļտ¡°Ô »ó¼ÓµÇ¾î ¸Þ¸ð¸® ¼Ò¸ð°¡ ½ÉÇϱ⠶§¹®ÀÌ´Ù.
¸Þ¼µå´Â ÃÑ 9°³ ÀÖÀ¸¸ç ÀÌ Áß wait ¸Þ¼µå´Â 3°³ÀÇ ¹öÀüÀ¸·Î ¿À¹ö·ÎµùµÇ¾î ÀÖ´Ù.
¸Þ¼µå |
¼³¸í |
toString |
°´Ã¼ÀÇ »óŸ¦ ¹®ÀÚ¿·Î ¸®ÅÏÇÑ´Ù. |
equals |
´Ù¸¥ °´Ã¼¿Í ºñ±³ÇÏ¿© °°ÀºÁö Á¶»çÇÑ´Ù. |
hashCode |
°´Ã¼ÀÇ Çؽà Äڵ带 ¸®ÅÏÇÑ´Ù. |
clone |
»çº»À» ÀÛ¼ºÇÑ´Ù. |
finalize |
°´Ã¼°¡ Á¦°ÅµÉ ¶§ È£ÃâµÇ¾î ÀÚ¿øÀ» Á¤¸®ÇÑ´Ù. |
getClass |
°´Ã¼ÀÇ Å¬·¡½º Á¤º¸¸¦ ½ÇÇàÁß¿¡ Á¶»çÇÑ´Ù. |
notify |
°´Ã¼¸¦ ±â´Ù¸®´Â ½º·¹µå¸¦ ±ú¿î´Ù. |
notifyAll |
°´Ã¼¸¦ ±â´Ù¸®´Â ¸ðµç ½º·¹µå¸¦ ±ú¿î´Ù. |
wait |
ÇöÀç ½º·¹µå¸¦ ´ë±â »óÅ·Π¸¸µç´Ù. |
Object´Â ÈÄ¼Õ Å¬·¡½º¿¡¼ ÀçÁ¤ÀÇÇÒ¸¸ÇÑ ¸Þ¼µå¸¦ Á¦°øÇÒ »Ó ±×
ÀÚü´Â Ưº°ÇÑ ±â´ÉÀÌ ¾ø´Ù. µû¶ó¼ Object °´Ã¼¸¦ »ý¼ºÇÒ
ÀÏÀº °ÅÀÇ ¾øÀ¸¸ç ¸¸µé¾î ºÁ¾ß ½á ¸ÔÀ» µ¥µµ ¾ø´Ù. ´Ù¸¸ ·çÆ®Àθ¸Å ¸ðµç Ŭ·¡½ºÀÇ ´ëÇ¥ ŸÀÔ ÀÚ°ÝÀ»
°¡Áö¸ç Object ŸÀÔÀÇ º¯¼ö´Â ¸ðµç º¯¼ö¸¦ ´ëÀÔ¹ÞÀ» ¼ö ÀÖ´Ù.
ObjectÀÇ ¸Þ¼µå´Â ´ëºÎºÐ ¹«³ÇÑ µðÆúÆ® ±¸ÇöÀÌ Á¦°øµÇÁö¸¸ ¸ðµç
Ŭ·¡½º¿¡ ÀûÇÕÇÏÁö´Â ¾Ê¾Æ ÇÊ¿ä¿¡ µû¶ó Ŭ·¡½ºº°·Î Àû´çÈ÷ ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù. ObjectÀÇ ¸Þ¼µå¸¦ ¼ø¼´ë·Î
¾Ë¾Æº¸µÇ µ¿±âÈ °ü·Ã ¸Þ¼µå´Â ½º·¹µå¿Í ÇÔ²² µû·Î ¿¬±¸ÇØ º¸±â·Î ÇÏÀÚ.
toString ¸Þ¼µå´Â °´Ã¼ÀÇ »óŸ¦ ¹®ÀÚ¿·Î ¸®ÅÏÇÑ´Ù. ÀÌ ¹®ÀÚ¿Àº °´Ã¼ÀÇ »óŸ¦ ¼³¸íÇϸç Ãâ·Â, µð¹ö±ë, ·Î±× µîÀÇ
¿©·¯ °¡Áö ¿ëµµ·Î »ç¿ëµÈ´Ù. toStringÀÌ ·çÆ®¿¡ Á¤ÀǵǾî ÀÖ¾î ÀÚ¹ÙÀÇ
¸ðµç °´Ã¼´Â ¹®ÀÚ¿ ÇüÅ·ΠǥÇöÇÒ ¼ö ÀÖ´Ù. Á¤¼ö³ª ½Ç¼ö°°Àº ±âº»Çü º¯¼ö´Â ¹°·ÐÀÌ°í °´Ã¼µµ ¹®ÀÚ¿·Î
º¯È¯ °¡´ÉÇØ println ¸Þ¼µå·Î ¸ðµç º¯¼ö¸¦ ´Ù Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.
tostring |
½ÇÇà°á°ú |
class Human { int
age; String
name; Human(int
age, String name) { this.age
= age; this.name
= name; } } class JavaTest { public
static void main(String[] args) { int
i = 1234; System.out.println(i); Human
kim = new Human(29, "±è»óÇü"); System.out.println(kim); } } |
1234 Human@15db9742 |
°ª 1234¸¦ °¡Áö´Â Á¤¼öÇü º¯¼ö
i¸¦ Ãâ·ÂÇϸé ÀÌ º¯¼öÀÇ toString ¸Þ¼µå°¡ È£ÃâµÇ¾î ¹®ÀÚ¿·Î ȸ鿡 Ãâ·ÂµÈ´Ù. Á¤¼öµµ ȸ鿡 "1234" ½ÄÀ¸·Î ¹®ÀÚ¿ ÇüÅ·Î
Âï¾î¾ß ±× °ªÀ» È®ÀÎÇÒ ¼ö Àִµ¥ printlnÀÌ º¯¼öÀÇ
toStringÀ» È£ÃâÇÏ¿© ¹®ÀÚ¿·Î ¹Ù²ã ÁÖ´Â °ÍÀÌ´Ù.
Human °´Ã¼µµ println ¸Þ¼µå·Î
Àü´ÞÇϸé ȸ鿡 Ãâ·ÂµÈ´Ù. Human ŸÀÔÀ» ¹Þ´Â println ¸Þ¼µå´Â
¾øÁö¸¸ HumanÀÌ ObjectÀÇ ÈļÕÀ̸ç Object°¡ toStringÀ» Á¤ÀÇÇÏ°í ÀÖ¾î ÀÌ»ó ¾øÀÌ ÄÄÆÄÀϵȴÙ. ±×·¯³ª Human °´Ã¼¿¡ ´ëÇÑ Ãâ·Â¹®Àº ¼³¸íÀûÀÌÁö ¾Ê¾Æ ¾î¶² Á¾·ùÀÇ
»ç¶÷ÀÎÁö ÆľÇÇÒ ¼ö ¾ø´Ù. ObjectÀÇ toString ¸Þ¼µå´Â
Ŭ·¡½º À̸§°ú 16Áø Çؽà ÄÚµåÀÇ Á¶ÇÕÀ» Ãâ·ÂÇÑ´Ù.
getClass().getName() + '@' +
Integer.toHexString(hashCode())
»ç¿ëÀÚ°¡ Á¤ÀÇÇÑ Å¬·¡½º´Â ¾ÆÁÖ ¸¹Àº Çʵ带 °¡Áö´Âµ¥ ±× Áß ¾î¶² Çʵ尡 Áß¿äÇÑ Á¤º¸ÀÎÁö ÆǺ°Çϱ⠾î·Á¿ö ±âº» toString ¸Þ¼µå´Â À¯¿ëÇÑ Á¤º¸¸¦ º¸¿©ÁÙ ¼ö ¾ø°í °´Ã¼³¢¸® ±¸º° °¡´ÉÇÑ °íÀ¯ÇÑ Ç¥½Ä¸¸ º¸¿©ÁØ´Ù. ¼³¸íÀûÀÎ ¹®ÀÚ¿À» Ãâ·ÂÇÏ°í ½Í´Ù¸é toString ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿©
°´Ã¼ ÆǺ°¿¡ ¿ëÀÌÇÑ Á¤º¸¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù.
humanstring |
½ÇÇà°á°ú |
class Human { int
age; String
name; Human(int
age, String name) { this.age
= age; this.name
= name; } public
String toString() { return
age + "¼¼ÀÇ " + name; } } class JavaTest { public
static void main(String[] args) { int
i = 1234; System.out.println(i); Human
kim = new Human(29, "±è»óÇü"); System.out.println(kim); String
str = "¹üÀÎ : " + kim; System.out.println(str); } } |
1234 29¼¼ÀÇ ±è»óÇü ¹üÀÎ : 29¼¼ÀÇ ±è»óÇü |
»ç¶÷À» ƯÁ¤Çϴµ¥´Â ³ªÀÌ¿Í À̸§ÀÌ °¡Àå ÀûÇÕÇÏ´Ù. Human Ŭ·¡½º´Â toString ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿© age¿Í name Çʵ带 Á¶ÇÕÇÑ ¹®ÀÚ¿À» ¸®ÅÏÇÔÀ¸·Î½á »ç¶÷ÀÇ ½Å»ó Á¤º¸¸¦ ³ëÃâÇÑ´Ù. ´õ
º¹ÀâÇÑ Å¬·¡½º´Â ¿©·¯ ÇʵåÀÇ °ªÀ» Á¶ÇÕÇϰųª °è»êÇÏ¿© ´ë·®ÀÇ °á°ú¸¦ ¸®ÅÏÇÑ´Ù.
Object´Â Á÷Á¢ÀûÀÎ ±â´ÉÀº ¾øÁö¸¸ ÀçÁ¤ÀÇÇÒ¸¸ÇÑ ¸Þ¼µåÀÇ ¸ñ·ÏÀ»
Á¦°øÇÑ´Ù. ObjectÀÇ toStringÀÌ publicÀÌ¾î¼ ÀçÁ¤ÀÇÇÒ ¶§µµ ¹Ýµå½Ã publicÀ̾î¾ß ÇÑ´Ù. ÀÌÁ¦ printlnÀ¸·Î Human
°´Ã¼¸¦ Ãâ·ÂÇϸé toString ¸Þ¼µå°¡ ¸®ÅÏÇÏ´Â ³ªÀÌ¿Í À̸§ÀÌ Ãâ·ÂµÇ¾î ¾î¶² »ç¶÷ÀÎÁö
¹Ù·Î ¾Ë¾Æº¼ ¼ö ÀÖ´Ù.
´Ù¸¥ ¹®ÀÚ¿¿¡ + ¿¬»êÀÚ·Î ¿¬°áÇÒ ¶§µµ toString ¸Þ¼µå°¡ È£ÃâµÇ¾î µÚÂÊ¿¡ µ¡ºÙ¿©Áø´Ù. °Á¦ÀûÀÎ »çÇ×Àº
¾Æ´ÏÁö¸¸ toString ¸Þ¼µå¸¦ Àß Á¤ÀÇÇØ ³õÀ¸¸é µð¹ö±ëÀ̳ª ·Î±× Á¤º¸ ±â·Ï½Ã¿¡ À¯¿ëÇÏ°Ô »ç¿ëµÇ¹Ç·Î
Ŭ·¡½º Ư¼º¿¡ ¸Â°Ô ÀçÁ¤ÀÇÇØ µÎ´Â °ÍÀÌ ÁÁ´Ù.
¹è¿, File, Date µîÀÇ Ç¥ÁØ Å¬·¡½º´Â toStringÀ» ÀûÀýÈ÷ ÀçÁ¤ÀÇÇÏ¿© ÀÚ½ÅÀÇ °ªÀ» ¹®ÀÚ¿·Î Ãâ·ÂÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. ±×·¡¼ º°µµÀÇ º¯È¯À» ÇÏÁö ¾Ê´õ¶óµµ ȸéÀ̳ª ÆÄÀÏ·Î Ãâ·ÂÇÏ¸é ´ëÃæÀÇ Á¤º¸¸¦ Áï½Ã È®ÀÎÇÒ ¼ö ÀÖ´Ù.
±âº»Çü³¢¸® »óµî¼ºÀ» ºñ±³ÇÒ ¶§´Â == ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸ç °ªÀÌ °°À¸¸é true¸¦ ¸®ÅÏÇÑ´Ù. ¹Ý¸é °´Ã¼¿¡ ´ëÇؼ´Â °ªÀÌ ¾Æ´Ñ ÂüÁ¶°¡ °°ÀºÁö¸¸
º»´Ù. µÎ °´Ã¼°¡ °°Àº ´ë»óÀ» °¡¸®Å³ ¶§ true¸¦ ¸®ÅÏÇϸç
¼³»ç ³»¿ëÀÌ ¿ÏÀüÈ÷ °°¾Æµµ ÂüÁ¶°¡ ´Ù¸£¸é ´Ù¸¥ °´Ã¼·Î ÆǺ°ÇÑ´Ù. Ŭ·¡½ºÀÇ ¾î¶² Çʵ尡 Áß¿äÇÑÁö °áÁ¤ÇÒ
¼ö ¾ø°í ¸ðµç Çʵ带 ´Ù ºñ±³ÇØ º¼ ¼öµµ ¾ø±â ¶§¹®ÀÌ´Ù.
equals |
|
class Human { int
age; String
name; Human(int
age, String name) { this.age
= age; this.name
= name; } } class JavaTest { public
static void main(String[] args) { Human
kim = new Human(29, "±è»óÇü"); Human
lee = new Human(43, "À̽¿ì"); Human
kimcopy = kim; Human
kim2 = new Human(29, "±è»óÇü"); System.out.println("kim
== lee : " + (kim == lee ? "°°´Ù":"´Ù¸£´Ù")); System.out.println("kim
== kimcopy : " + (kim == kimcopy ? "°°´Ù":"´Ù¸£´Ù")); System.out.println("kim
== kim2 : " + (kim == kim2 ? "°°´Ù":"´Ù¸£´Ù")); } } |
|
½ÇÇà°á°ú |
kim == lee : ´Ù¸£´Ù kim == kimcopy : °°´Ù kim == kim2 : ´Ù¸£´Ù |
Human ŸÀÔÀÇ °´Ã¼ ¿©·¯ °³¸¦ »ý¼ºÇÏ°í == ¿¬»êÀÚ·Î ºñ±³ÇÏ¿© °á°ú¸¦ Ãâ·ÂÇß´Ù. ÄÚµå¿Í Ãâ·Â °á°ú¸¦ Àß ºñ±³ÇØ
º¸ÀÚ. kim°ú lee´Â ³ªÀ̵µ ´Ù¸£°í À̸§µµ ´Þ¶ó ´ç¿¬È÷
´Ù¸¥ °´Ã¼ÀÌ´Ù. kimÀÇ »çº»ÀÎ kimcopy´Â kim°ú ¶È°°Àº ´ë»óÀ» °¡¸®Å°°í ÀÖ¾î °°Àº °´Ã¼·Î Æò°¡µÈ´Ù. ¿©±â±îÁö´Â
¾ÆÁÖ »ó½ÄÀûÀ̶ó ÀÌÇØÇϱ⠽±´Ù.
Á¦ÀÏ ÀÌ»óÇÑ °ÍÀº kim°ú kim2ÀÇ
ºñ±³°á°úÀÌ´Ù. ³ªÀ̵µ °°°í À̸§µµ °°Áö¸¸ ÂüÁ¶ÇÏ´Â ½Çü°¡ ´Þ¶ó µÎ °´Ã¼´Â ´Ù¸£´Ù°í Æò°¡ÇÑ´Ù. == ¿¬»êÀÚ·Î °´Ã¼¸¦ ºñ±³ÇÏ¸é °¡¸®Å°´Â ´ë»óÀÌ °°ÀºÁö¸¸ º¸¸ç ³»¿ë±îÁö º¸Áö ¾Ê´Â´Ù. »ç½Ç == ¿¬»êÀÚ´Â ¾î¶² Çʵ尡 »ç¶÷ÀÇ ÁÖ¿ä Á¤º¸ÀÎÁöµµ ¸ð¸¥´Ù.
°´Ã¼³¢¸® ÂüÁ¶°¡ ¾Æ´Ñ ½ÇÁ¦ ³»¿ëÀ¸·Î ºñ±³ÇÒ ¼ö ÀÖ´Â º°µµÀÇ ¹æ¹ýÀÌ ÇÊ¿äÇѵ¥ ÀÌ°ÍÀÌ ¹Ù·Î equals ¸Þ¼µåÀÌ´Ù. equals ¸Þ¼µå´Â µÎ °´Ã¼ÀÇ ³»¿ëÀ» ºñ±³ÇÏ¿©(ÂüÁ¶¸¦ ºñ±³ÇÏ´Â°Ô ¾Æ´Ï¶ó) °°ÀºÁö Æò°¡ÇÑ´Ù. °´Ã¼³¢¸® ºñ±³ÇÒ ÀÏÀÌ ¸¹À¸¹Ç·Î Object¿¡ ÀÌ ¸Þ¼µå°¡ ¹Ì¸® Æ÷ÇԵǾî
ÀÖ´Ù. == ¿¬»êÀÚ ´ë½Å equals ¸Þ¼µå·Î ºñ±³ÇØ º¸ÀÚ.
System.out.println("kim.equals(lee) : "
+ (kim.equals(lee) ? "°°´Ù":"´Ù¸£´Ù"));
System.out.println("kim.equals(kimcopy) :
" + (kim.equals(kimcopy) ? "°°´Ù":"´Ù¸£´Ù"));
System.out.println("kim.equals(kim2) : "
+ (kim.equals(kim2) ? "°°´Ù":"´Ù¸£´Ù"));
ºñ±³ ¹æ¹ýÀ» ¹Ù²Ù¾úÁö¸¸ °á°ú´Â ¾Õ ¿¹Á¦¿Í °°´Ù. ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â Object Ŭ·¡½º¿¡ Æ÷ÇÔµÈ equals ¸Þ¼µåÀÇ ±âº» µ¿ÀÛÀÌ ´ÙÀ½°ú
°°ÀÌ Á¤ÀǵǾî ÀÖÀ¸¸ç »ç½Ç»ó == ¿¬»êÀÚ¿Í °°±â ¶§¹®ÀÌ´Ù.
public boolean equals(Object obj) {
return
(this == obj);
}
°´Ã¼¸¦ ºñ±³ÇÏ´Â ¹æ¹ýÀº Ŭ·¡½º¸¶´Ù °íÀ¯ÇØ Å¬·¡½º°¡ ½º½º·Î ºñ±³ÇÏ´Â ¹æ½ÄÀ» Á¤ÀÇÇØ¾ß Çϸç ÀÌ ¿ªÇÒÀ» ÇÏ´Â °ÍÀÌ
¹Ù·Î equals ¸Þ¼µåÀÌ´Ù. Á¤È®ÇÑ ºñ±³¸¦ À§ÇØ Object·ÎºÎÅÍ »ó¼Ó¹ÞÀº equals ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿© °´Ã¼ÀÇ
°íÀ¯¼ºÀ» °áÁ¤ÇÏ´Â Çʵ带 ºñ±³ÇØ¾ß ÇÑ´Ù.
humanequals |
|
class Human { int
age; String
name; Human(int
age, String name) { this.age
= age; this.name
= name; } public
boolean equals(Object obj) { if
(obj instanceof Human) { Human
other = (Human)obj; return
(age == other.age && name.equals(other.name)); }
else { return
false; } } } class JavaTest { public
static void main(String[] args) { Human
kim = new Human(29, "±è»óÇü"); Human
lee = new Human(43, "À̽¿ì"); Human
kimcopy = kim; Human
kim2 = new Human(29, "±è»óÇü"); System.out.println("kim.equals(lee)
: " + (kim.equals(lee) ? "°°´Ù":"´Ù¸£´Ù")); System.out.println("kim.equals(kimcopy)
: " + (kim.equals(kimcopy) ? "°°´Ù":"´Ù¸£´Ù")); System.out.println("kim.equals(kim2)
: " + (kim.equals(kim2) ? "°°´Ù":"´Ù¸£´Ù")); } } |
|
½ÇÇà°á°ú |
kim.equals(lee) : ´Ù¸£´Ù kim.equals(kimcopy) : °°´Ù kim.equals(kim2) : °°´Ù |
equals ¸Þ¼µå´Â ºñ±³ ´ë»óÀ»
obj Àμö·Î ¹Þ¾Æ ÀÚ±â ÀÚ½ÅÀÎ this¿Í ºñ±³ÇÑ °á°ú¸¦ ¸®ÅÏÇÑ´Ù. ºñ±³ ´ë»óÀº ´ç¿¬È÷ °°Àº ŸÀÔÀÇ °´Ã¼¿©¾ß Çϴµ¥ È£Ãâ¿ø¿¡¼ ¾û¶×ÇÑ °´Ã¼¸¦ ³Ñ±æ ¼öµµ ÀÖ¾î instanceof ¿¬»êÀڷΠŸÀÔÀ» ¸ÕÀú üũÇÏ´Â ¹æ¾î Äڵ尡 ÇÊ¿äÇÏ´Ù.
Human ŸÀÔÀÇ °´Ã¼°¡ ¾Æ´Ï¶ó¸é ´õ ºñ±³ÇÒ ÇÊ¿äµµ ¾øÀÌ false¸¦ ¸®ÅÏÇÑ´Ù.
ŸÀÔÀÌ ¸Â´Ù¸é obj¸¦ Human ŸÀÔÀ¸·Î
ij½ºÆÃÇÑ ÈÄ À̸§°ú ³ªÀÌ Çʵ带 °¢°¢ ºñ±³ÇÏ¿© ±× °á°ú¸¦ ¸®ÅÏÇÑ´Ù. À̸§°ú ³ªÀÌ°¡ µÑ ´Ù ÀÏÄ¡ÇÏ¸é °°Àº
°´Ã¼ÀÌ¸ç µÑ Áß Çϳª¶óµµ ´Ù¸£¸é °°Àº °´Ã¼°¡ ¾Æ´Ï´Ù. equals¸¦ ÀçÁ¤ÀÇÇÑ ÈÄ ½ÇÇàÇØ º¸¸é kim°ú kim2°¡ °°Àº °´Ã¼·Î Æò°¡µÈ´Ù.
¾î¶² Çʵ带 ºñ±³ÇÒ °ÍÀΰ¡´Â Ŭ·¡½º¸¶´Ù ´Ù¸£´Ù. À̸§°ú ³ªÀ̸¸À¸·Î
µ¿¸íÀÌÀÎÀ» ±¸ºÐÇÒ ¼ö ¾ø¾î °¡±ÞÀû ¸¹Àº Çʵ带 ºñ±³ÇÏ´Â °ÍÀÌ Á¤È®ÇÏ´Ù. Human Ŭ·¡½º¿¡ ¼ºº°, Ç÷¾×Çü, Å° µûÀ§ÀÇ Á¤º¸°¡ ÀÖ´Ù¸é ´Ù ºñ±³ÇØ ºÁ¾ß Á¤È®ÇÏ´Ù.
Ŭ·¡½º¸¶´Ù ÇÊµå ¸ñ·ÏÀÌ °íÀ¯ÇÏ°í »óµî¼ºÀ» ºñ±³ÇÏ´Â ¹æ¹ýÀÌ ´Þ¶ó equals ¸Þ¼µåµµ
Ŭ·¡½º¸¶´Ù °¢°¢ Á¤ÀÇÇØ¾ß ÇÑ´Ù. equals¿¡¼ ¾î¶²½ÄÀ¸·Î »óµî¼ºÀ» ºñ±³ÇÒ °ÍÀΰ¡´Â Ŭ·¡½ºÀÇ ±¸Á¶¿Í
ÇÊµå ¸ñ·Ï¿¡ µû¶ó ÀÚÀ¯·Ó°Ô ¼±ÅÃÇÒ ¼ö ÀÖµÇ ÃÖ¼ÒÇÑ ¼öÇÐÀû º¸Æí¼ºÀº ¸¸Á·ÇØ¾ß ÇÑ´Ù.
l ÀÚ±â ÀڽŰú
ºñ±³ÇÒ ¶§´Â Ç×»ó trueÀÌ´Ù. a.equals(a)´Â ¾ðÁ¦³ª true¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù.
l ±³È¯ ºñ±³
°á°ú°¡ °°¾Æ¾ß ÇÑ´Ù. a.equals(b)´Â b.equals(a)¿Í
°°´Ù.
l ºñ±³ °á°ú°¡
ÀÏ°üµÇ¾ß ÇÑ´Ù. a¿Í b¸¦ ¿©·¯ ¹ø ºñ±³Çصµ Ç×»ó °á°ú°¡
°°¾Æ¾ß ÇÑ´Ù.
l ÀüÀ̼ºÀ»
¸¸Á·ÇØ¾ß ÇÑ´Ù. a¿Í b°¡ °°°í b¿Í c°¡ °°À¸¸é a¿Í cµµ ´ç¿¬È÷ °°´Ù.
l null°ú ºñ±³Çϸé Ç×»ó false¸¦ ¸®ÅÏÇÑ´Ù.
»ó½ÄÀûÀ¸·Î ½±°Ô ÀÌÇصǴ ±ÔÄ¢ÀÌ´Ù. Á¤È®ÇÑ ºñ±³°¡ ÇÊ¿äÇÑ Å¬·¡½º´Â equals ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ°í ¹Ýµå½Ã equals ¸Þ¼µå·Î ºñ±³Çؾß
ÇÑ´Ù. String, Date µîÀÇ Å¬·¡½ºµµ ¸ðµÎ ³»¿ëÀ» ºñ±³Çϵµ·Ï ÀçÁ¤ÀǵǾî ÀÖ´Ù.
stringdate |
|
class JavaTest { public
static void main(String[] args) { String
korea = "´ëÇѹα¹"; String
korea2 = new String("´ëÇѹα¹"); System.out.println("==
ºñ±³ : " + (korea == korea2 ? "°°´Ù":"´Ù¸£´Ù")); System.out.println("equals
ºñ±³: " + (korea.equals(korea2) ? "°°´Ù":"´Ù¸£´Ù")); } } |
|
½ÇÇà°á°ú |
== ºñ±³ : ´Ù¸£´Ù equals ºñ±³: °°´Ù |
µÎ °³ÀÇ ¹®ÀÚ¿ korea¿Í
korea2°¡ ¼±¾ðµÇ¾î ÀÖ°í ³»¿ëÀº °°´Ù. korea2¸¦
new ¿¬»êÀÚ·Î ÃʱâÈÇÑ ÀÌÀ¯´Â ÄÄÆÄÀÏ·¯ÀÇ ÃÖÀûȸ¦ ȸÇÇÇϱâ À§ÇؼÀÌ´Ù. ¸®ÅÍ·²·Î ÃʱâÈÇÒ
½Ã °°Àº ¹®ÀÚ¿¿¡ ´ëÇØ °°Àº ÂüÁ¶¸¦ ¸®ÅÏÇϵµ·Ï µÇ¾î Àִµ¥ korea2¸¦ °Á¦·Î Èü¿¡ »ý¼ºÇϱâ À§ÇØ new ¿¬»êÀÚ¸¦ »ç¿ëÇß´Ù. ¾Æ¹¸µç ³»¿ëÀÌ °°Àº µÎ º¯¼ö¸¦ ¸¸µç ÈÄ == ¿¬»êÀÚ¿Í equals ¸Þ¼µå·Î ºñ±³ÇØ º¸¾Ò´Ù.
korea¿Í korea2¸¦ ==·Î ºñ±³ÇÏ¸é ¸Þ¸ð¸®»óÀÇ À§Ä¡°¡ ´Þ¶ó °°Áö ¾Ê´Ù°í ³ª¿Â´Ù. ÀÌ¿¡
ºñÇØ equals·Î ºñ±³Çϸé À§Ä¡¿¡ »ó°ü¾øÀÌ ³»¿ëÀÌ °°¾Æ °°Àº °´Ã¼¶ó°í ³ª¿Â´Ù. ±×·¡¼ ¹®ÀÚ¿³¢¸® ºñ±³ÇÒ ¶§´Â == ¿¬»êÀÚ°¡ ¾Æ´Ñ equals ¸Þ¼µå·Î ºñ±³ÇØ¾ß ÇÑ´Ù. Ãʺ¸ÀÚ¿¡°Ô´Â ´Ù¼Ò Çò°¥¸®´Â ³»¿ëÀ̸ç
¼÷·ÃÀÚµµ °¡²û Âø°¢ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ¾Õ ¿¹Á¦¿¡¼ name Çʵ带
ºñ±³ÇÒ ¶§µµ equals ¸Þ¼µå¸¦ È£ÃâÇß´Ù.
°Á¦ÀûÀÎ °ÍÀº ¾Æ´ÏÁö¸¸ equals¸¦ ÀçÁ¤ÀÇÇϸé hashCode ¸Þ¼µåµµ °°ÀÌ ÀçÁ¤ÀÇÇÒ °ÍÀ» ±ÇÀåÇÑ´Ù. Çؽô °ªÀ»
°Ë»öÇϴµ¥ »ç¿ëµÇ´Â Å°°ªÀÌ¸ç ³»¿ëÀÌ °°À¸¸é Çؽõµ °°¾Æ¾ß ÇÑ´Ù. ÀϹÝÀûÀÎ ¿ëµµÀÇ Å¬·¡½º¶ó¸é Çؽø¦ Á¤ÀÇÇÏÁö
¾Ê¾Æµµ º° »ó°ü¾øÁö¸¸ Çؽà Ä÷º¼Ç¿¡ ÀúÀåÇÒ ¶§´Â Çؽà Äڵ带 ¹Ýµå½Ã Á¤ÀÇÇØ¾ß ÇÑ´Ù.
getClass ¸Þ¼µå´Â °´Ã¼ÀÇ Å¬·¡½º Á¤º¸¸¦ Á¶»çÇÏ´Â Class °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù. Class °´Ã¼´Â ´ë»ó °´Ã¼ÀÇ Á¤º¸¸¦
±¸ÇÏ´Â ´Ù¼öÀÇ ¸Þ¼µå¸¦ Á¦°øÇÑ´Ù.
¸Þ¼µå |
¼³¸í |
String getName() |
Ŭ·¡½ºÀÇ À̸§À» Á¶»çÇÑ´Ù. |
Field[] getDeclaredFields() |
¼±¾ðµÈ ÇÊµå ¸ñ·ÏÀ» Á¶»çÇÑ´Ù. |
Method[] getDeclaredMethods() |
¼±¾ðµÈ ¸Þ¼µå ¸ñ·ÏÀ» Á¶»çÇÑ´Ù. |
Constructor<?>[] getConstructors() |
»ý¼ºÀÚ ¸ñ·ÏÀ» Á¶»çÇÑ´Ù. |
Class<?>[] getClasses() |
Æ÷ÇÔµÈ Å¬·¡½º ¸ñ·ÏÀ» Á¶»çÇÑ´Ù. |
Field[] getFields() |
»ó¼Ó¹ÞÀº °ÍÀ» Æ÷ÇÔÇÏ¿© °ø°³µÈ ÇÊµå ¸ñ·ÏÀ» Á¶»çÇÑ´Ù. |
Method[] getMethods() |
»ó¼Ó¹ÞÀº °ÍÀ» Æ÷ÇÔÇÏ¿© °ø°³µÈ ¸Þ¼µå ¸ñ·ÏÀ» Á¶»çÇÑ´Ù. |
Class<? super T> getSuperclass() |
½´ÆÛ Å¬·¡½º¿¡ ´ëÇÑ Á¤º¸¸¦ Á¶»çÇÑ´Ù. |
boolean isEnum() |
¿°Å ŸÀÔÀÎÁö Á¶»çÇÑ´Ù. |
boolean isInterface() |
ÀÎÅÍÆäÀ̽ºÀÎÁö Á¶»çÇÑ´Ù. |
boolean isPrimitive() |
±âº» ŸÀÔÀÎÁö Á¶»çÇÑ´Ù. |
Ŭ·¡½ºÀÇ À̸§Àº ¹°·ÐÀÌ°í ÇÊµå ¸ñ·Ï, ¸Þ¼µå ¸ñ·ÏÀ» ÁË´Ù Á¶»çÇÒ ¼ö
ÀÖ´Ù. ¶ÇÇÑ ½´ÆÛ Å¬·¡½º¸¦ Á¶»çÇÏ¿© »ó¼Ó °èÃþÀ» °Å½½·¯ ¿Ã¶ó°¡¸ç ¸ðµç ¼±Á¶¿¡ ´ëÇÑ ¸ñ·Ï±îÁö ¾Ë¾Æ³½´Ù. Class °´Ã¼¸¦ ÅëÇØ ¼Ò½º¿¡¼ »ç¶÷ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ¸ðµç Á¤º¸¸¦ ½ÇÇàÁß¿¡ Á¶»çÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¼Ò½º¿¡¼ ¼±¾ðÇÑ Human Ŭ·¡½ºÀÇ Á¤º¸¸¦ Class °´Ã¼¸¦ ÅëÇØ ½ÇÇàÁß¿¡ Á¶»çÇÏ¿© Ãâ·ÂÇÑ´Ù.
getclass |
|
import java.lang.reflect.*; class Human { int
age; String
name; Human(int
age, String name) { this.age
= age; this.name
= name; } void
intro() { System.out.println("¾È³ç, " + age + "»ì " + name +
"ÀÔ´Ï´Ù."); } } class JavaTest { public
static void main(String[] args) { Human
kim = new Human(29, "±è»óÇü"); Class
cls = kim.getClass(); System.out.println("Ŭ·¡½º
À̸§ = " + cls.getName()); System.out.println("½´ÆÛ
Ŭ·¡½º = " + cls.getSuperclass().getName()); System.out.print("Çʵå : "); Field[]
fields = cls.getDeclaredFields(); for
(Field F : fields) { System.out.print(F.getName()
+ " "); } System.out.println(); System.out.print("¸Þ¼µå : "); Method
methods[] = cls.getDeclaredMethods(); for
(Method M : methods) { System.out.print(M.getName()
+ " "); } } } |
|
½ÇÇà°á°ú |
Ŭ·¡½º À̸§ = Human ½´ÆÛ Å¬·¡½º = java.lang.Object Çʵå : age name ¸Þ¼µå : intro |
Human °´Ã¼ kimÀ»
¼±¾ðÇØ ³õ°í kimÀÇ getClass ¸Þ¼µå¸¦ È£ÃâÇÏ¿© cls °´Ã¼¸¦ ±¸Çß´Ù. °´Ã¼¸¦ »ý¼ºÇØ ³õÁö ¾Ê¾Ò´Ù¸é Ŭ·¡½º À̸§À¸·Î Class °´Ã¼¸¦ ±¸Çϴµ¥ Ŭ·¡½º¸í.class ¶ó´Â Ç¥Çö½ÄÀ» »ç¿ëÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ Å¬·¡½º Á¤º¸¸¦ ±¸Çصµ °á°ú´Â µ¿ÀÏÇÏ´Ù.
Class cls = Human.class;
cls¸¦ ±¸ÇßÀ¸¸é ÀÌ °´Ã¼ÀÇ ¸Þ¼µå¸¦ ÅëÇØ Å¬·¡½ºÀÇ ¸ðµç Á¤º¸¸¦ ³¹³¹ÀÌ
Á¶»çÇÒ ¼ö ÀÖ´Ù. ´ëÇ¥ÀûÀÎ ¸î °¡Áö Á¤º¸¸¸ »Ì¾Æ ÄַܼΠÃâ·ÂÇߴµ¥ ¼Ò½º¿¡ ÀÖ´Â ¸íĪÀÌ ±×´ë·Î º¸ÀδÙ. Ŭ·¡½ºÀÇ À̸§À̳ª ¸â¹öÀÇ À̸§ °°Àº °ÍÀº ÄÄÆÄÀÏ Áß¿¡¸¸ »ç¿ëµÇ°í ÀÌÁø ÆÄÀÏ·Î ¹ø¿ªµÇ¸é ¾Ë¾Æ³¾ ¼ö ¾ø´Â °ÍÀÌ
ÀϹÝÀûÀÌ´Ù.
¿¹¸¦ µé¾î int value = 5; ¶ó´Â ¼±¾ð¹®¿¡ ÀÇÇØ 5¶ó´Â °ªÀ» ½ÇÇàÁß¿¡ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ±× °ªÀ» ÀúÀåÇÑ º¯¼ö À̸§ÀÌ value¿´´ÂÁö´Â
º°·Î Áß¿äÇÏÁö ¾Ê´Ù. ÀÚ¹Ù´Â °¡»ó ¸Ó½ÅÀÌ Å¬·¡½º¸¦ ·ÎµåÇÒ ¶§ ¸ðµç Á¤º¸¸¦ °¡Áö´Â Class °´Ã¼¸¦ ¹Ì¸® »ý¼ºÇØ ³õ±â ¶§¹®¿¡ ÀÌ·± Á¤º¸¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù. ³×ÀÌƼºê
¾ð¾î¿¡¼´Â ²Þµµ ²Ù±â ¾î·Á¿î ±â´ÉÀÌ´Ù.
C++µµ RTTI ±â´ÉÀ¸·Î
½ÇÇàÁß¿¡ Ŭ·¡½º Á¤º¸¸¦ Á¶»çÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö¸¸ ¿É¼ÇÀ» ÄÑ¾ß »ç¿ëÇÒ ¼ö ÀÖ°í ¼º´É °¨¼Ò°¡ ½ÉÇÏ´Ù. C#Àº
¸®Ç÷º¼ÇÀ̶ó´Â À̸§À¸·Î Ŭ·¡½ºÀÇ Á¤º¸ Á¶»ç ±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÚ¹Ùµµ ÀÌ ±â´ÉÀ» ¸®Ç÷º¼ÇÀ̶ó°í ºÎ¸¥´Ù. ¸®Ç÷º¼ÇÀº ÄÚµåÀÇ ½ÇÇຸ´Ù °ü¸®³ª À¯Áö¿¡ ÁÖ·Î »ç¿ëµÈ´Ù.
ÀÌŬ¸³½º´Â ¸®Ç÷º¼ÇÀ» ÅëÇØ °´Ã¼ÀÇ ¸â¹ö ¸ñ·Ï, ¸Þ¼µåÀÇ Àμö ¸ñ·ÏÀ»
¾Ë¾Æ³»°í µµ¿ò¸»À» Á¦°øÇÑ´Ù. ¼Ò½ºÃ¢¿¡¼ kim. ±îÁö¸¸ ÂïÀ¸¸é
¸â¹ö ¸ñ·ÏÀÌ ÁÂ¾Ç ³ª¿µÇ´Âµ¥ ¸®Ç÷º¼Ç¿¡ ÀÇÇØ ½Ç½Ã°£ Á¶»çÇÑ Á¤º¸ÀÌ´Ù.
ÂüÁ¶Çü º¯¼ö³¢¸® ´ëÀÔÇÏ¸é °°Àº ´ë»óÀ» °¡¸®Å°¸ç ÀÌ »óÅ¿¡¼ »çº»À» º¯°æÇÏ¸é ¿øº»µµ °°ÀÌ ¹Ù²ï´Ù. ÀÌ·± Ư¼ºÀº ¾Õ¿¡¼ ¿©·¯ ¹ø »ìÆ캸¾Ò´Âµ¥ µÎ ÂüÁ¶ º¯¼ö°¡ °°Àº ´ë»óÀ» °¡¸®Å°°í Àֱ⠶§¹®ÀÌ´Ù. ¿ÏÀüÈ÷ µ¶¸³ÀûÀÎ »çº»À» ¸¸µé ¶§´Â clone ¸Þ¼µå¸¦ »ç¿ëÇϴµ¥
ÀÌ ¸Þ¼µå´Â ¿ÏÀüÇÑ »çº»À» ¸¸µé¾î ±× º¹»çº»À» ¸®ÅÏÇÑ´Ù.
clone |
½ÇÇà°á°ú |
class JavaTest { public
static void main(String[] args) { int[]
ar = { 1, 2, 3, 4, 5 }; int[]
ar2 = ar.clone(); ar2[0]
= 1000; System.out.println("ar[0]
: " + ar[0]); System.out.println("ar2[0]
: " + ar2[0]); } } |
ar[0] : 1 ar2[0] : 1000 |
¹è¿ÀÇ »çº»À» ¸¸µé±â À§ÇØ ´ëÀÔ ¿¬»êÀÚ ´ë½Å clone ¸Þ¼µå¸¦ È£ÃâÇß´Ù. ÀÌÈÄ ar°ú ar2´Â
¿ÏÀüÈ÷ ºÐ¸®µÇ¾î ¼·ÎÀÇ º¯°æ¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. ar2[0]¿¡ ¹» ´ëÀÔÇÏ´õ¶óµµ ar[0]´Â ¿ø·¡°ªÀÎ 1À» À¯ÁöÇÑ´Ù.
ar2 = ar; ¹®ÀåÀ¸·Î ´ëÀÔÇß´Ù¸é ÇÑÂÊÀ» ¹Ù²Ù¸é ´Ù¸¥Âʵµ °°ÀÌ ¹Ù²ï´Ù.
´ëÀÔ ¿¬»êÀÚ·Î ´ëÀÔÇßÀ» ¶§¿Í clone ¸Þ¼µå·Î »çº»À» ¸¸µé¾úÀ» ¶§ÀÇ
¸Þ¸ð¸® ³»ºÎ ¸ð¾çÀ» ±×·Á º¸ÀÚ. ´ëÀÔÀº ÇϳªÀÇ ¹è¿À» µÎ °³ÀÇ º¯¼ö°¡ °øÀ¯ÇÏÁö¸¸ »çº»À» ¶á °æ¿ì´Â °¢ÀÚÀÇ
¹è¿À» µû·Î °¡Áø´Ù. ±×·¡¼ »çº»À» º¯°æÇصµ ¿øº»ÀÌ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.
¹è¿»Ó¸¸ ¾Æ´Ï¶ó Vector, ArrayList µîÀÇ Ä÷º¼Çµµ clone ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿© °°Àº ¹æ½ÄÀ¸·Î »çº»À» ¸¸µç´Ù. »ç¿ëÀÚ
Á¤ÀÇ Å¬·¡½ºµµ »çº» Á¦ÀÛÀ» Áö¿øÇÏ·Á¸é clone ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿© ÀÚ½ÅÀÇ ¸â¹ö¸¦ º¹»çÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù. Human Ŭ·¡½º¿¡ »çº»À» ÀÛ¼ºÇÏ´Â ±â´ÉÀ» Ãß°¡ÇØ º¸ÀÚ.
humanclone |
½ÇÇà°á°ú |
class Human { int
age; String
name; Human(int
age, String name) { this.age
= age; this.name
= name; } public
Object clone() { return
new Human(age, name); } } class JavaTest { public
static void main(String[] args) { Human
kim = new Human(29, "±è»óÇü"); Human
kim2 = (Human)kim.clone(); kim2.name
= "À̼ø½Å"; System.out.println("kim.name
: " + kim.name); System.out.println("kim2.name
: " + kim2.name); } } |
kim.name : ±è»óÇü kim2.name : À̼ø½Å |
HumanÀÇ clone ¸Þ¼µå¿¡¼ new ¿¬»êÀÚ·Î »õ·Î¿î Human °´Ã¼¸¦ ¸¸µéµÇ ÀÚ½ÅÀÇ age¿Í name °ªÀ» Àü´ÞÇÏ¿© ¶È°°Àº »çº»À» »ý¼ºÇÑ´Ù. »ý¼ºÀÚ°¡ Àß Á¤ÀǵǾî ÀÖ¾î new ¿¬»êÀÚ·Î »õ·Î¿î °´Ã¼¸¦ ¸¸µé±â¸¸
ÇÏ¸é µÈ´Ù. clone ¸Þ¼µå´Â Object ŸÀÔÀ» ¸®ÅÏÇϹǷÎ
¹Þ´Â ÂÊ¿¡¼ ¿øÇϴ ŸÀÔÀ¸·Î ij½ºÆÃÇÏ¿© ´ëÀÔÇÑ´Ù.
kim2 °´Ã¼´Â kim°ú
¶È°°Àº °ªÀ» °¡Áö´Â »çº»ÀÌ¸ç º°µµÀÇ Èü¿¡ ºÐ¸®µÇ¾î ¼·Î µ¶¸³ÀûÀÌ´Ù. »ç¶÷Àº Á¤º¸°¡ ¸¹Áö ¾Ê¾Æ º¹Á¦°¡
°£´ÜÇѵ¥ ´õ º¹ÀâÇÑ Å¬·¡½º´Â º¹»ç¿¡ ²À ÇÊ¿äÇÑ Çʵ常 Ãß·Á ³»°Å³ª ÇöÀç »óűîÁöµµ º¹Á¦Çϴ ó¸®°¡ ÇÊ¿äÇÏ´Ù. À§
¿¹Á¦´Â °³³äÀû ÀÌÇظ¦ À§ÇØ ÀÛ¼ºÇÑ °ÍÀ̸ç Á¤È®ÇÏ°Ô´Â ´ÙÀ½°ú °°ÀÌ ±¸ÇöÇØ¾ß ÇÑ´Ù.
humanclone2 |
class Human implements Cloneable { int
age; String
name; Human(int
age, String name) { this.age
= age; this.name
= name; } public
Object clone() { try
{ return
super.clone(); } catch(CloneNotSupportedException
e) { return
null; } } } class JavaTest { public
static void main(String[] args) { Human
kim = new Human(29, "±è»óÇü"); Human
kim2 = (Human)kim.clone(); kim2.name
= "À̼ø½Å"; System.out.println("kim.name
: " + kim.name); System.out.println("kim2.name
: " + kim2.name); } } |
¾Æ¹«³ª °´Ã¼ÀÇ »çº»À» ¶ß´Â °ÍÀº º¸¾È»ó À§ÇèÇÒ ¼ö ÀÖÀ¸´Ï Ŭ·¡½º Á¦ÀÛÀÚ°¡ »çº» ÀÛ¼ºÀ» Çã¿ëÇØ¾ß ÇÑ´Ù. »çº» ÀÛ¼ºÀÌ °¡´ÉÇÑ Å¬·¡½º¶ó´Â °ÍÀ» ºÐ¸íÈ÷ Ç¥½ÃÇϱâ À§ÇØ Cloneable ÀÎÅÍÆäÀ̽º¸¦
»ó¼Ó¹Þ¾Ò´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â ºñ¾î ÀÖ°í ±¸ÇöÇÒ ¸Þ¼µåµµ ¾øÁö¸¸ º¹Á¦¸¦ Çã¿ëÇÑ´Ù´Â °ÍÀ» ºÐ¸íÈ÷ ÇÑ´Ù. ObjectÀÇ clone ¸Þ¼µå´Â Ŭ·¡½º°¡ Cloneable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö ¾ÊÀ¸¸é ¿¹¿Ü¸¦ ´øÁ® º¹Á¦¸¦ Çã¿ëÇÏÁö ¾Ê´Â´Ù. ³»ºÎ¿¡¼´Â ¾Æ¸¶ ´ÙÀ½°ú °°Àº Á¶°Ç¹®À» »ç¿ëÇÒ °ÍÀÌ´Ù.
if (this instanceof Cloneable)
ÀÎÅÍÆäÀ̽º´Â ¸Þ¼µå ¸ñ·ÏÀ» Á¦°øÇÏ´Â °ÍÀÌ ¿ø·¡ÀÇ ±â´ÉÀÌÁö¸¸ CloneableÀº
¸Þ¼µå ¸ñ·Ïº¸´Ù´Â Ŭ·¡½ºÀÇ Æ¯¼ºÀ» ¹àÈ÷´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÎÅÍÆäÀ̽º »ó¼Ó°ú ½Ç½Ã°£ ŸÀÔ Á¶»ç ¹®¹ýÀÌ Àß
±¸ºñµÇ¾î ÀÖ¾î ÀÌ·± ¸ñÀûÀ¸·Îµµ ÀÎÅÍÆäÀ̽º¸¦ È°¿ëÇÒ ¼ö ÀÖ´Ù.
ÀçÁ¤ÀÇµÈ clone ¸Þ¼µå¿¡¼
superÀÇ cloneÀ» È£ÃâÇÏ¿© »çº»À» ÀÛ¼ºÇ쵂 ¿¹¿Ü°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î try, catch¹®À¸·Î °¨½Ñ´Ù. ObjectÀÇ cloneÀº ÀÚ¹Ù Äڵ尡 ¾Æ´Ï¶ó ¿î¿µÃ¼Á¦ÀÇ Äڵ带 »ç¿ëÇÏ¿© ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í ¸â¹ö¸¦ º¹»çÇÏ´Â ÀÛ¾÷À» °í¼ÓÀ¸·Î
¼öÇàÇÑ´Ù. »ý¼ºÀÚ·Î °´Ã¼¸¦ Á÷Á¢ »ý¼ºÇÏ´Â °Íº¸´Ù ¿ùµîÈ÷ ºü¸£´Ù.
cloneÀÇ ±âº» ±¸ÇöÀº ¸â¹ö³¢¸® ÀÏ´ëÀÏ·Î ´ëÀÔÇϴµ¥ À̸¦ ¾èÀº º¹»ç(shallow copy)¶ó°í ÇÑ´Ù. ¸â¹öÀÇ °ªÀ» ±×´ë·Î º¹»çÇØ ¹ö¸®´Âµ¥
±âº»ÇüÀº °ª º¹»ç·Î ¿ÏÀüÇÑ »çº»À» ¸¸µé ¼ö ÀÖÁö¸¸ ÂüÁ¶ÇüÀº ±×·¸Áö ¾Ê´Ù. Ŭ·¡½º ¾È¿¡ ±âº»°ª¸¸ ÀÖ´Ù¸é
¾èÀº º¹»ç·Îµµ »çº»À» ¸¸µé ¼ö ÀÖÁö¸¸ ÂüÁ¶Çü ¸â¹ö°¡ ÀÖ´Ù¸é ¹®Á¦°¡ ´Þ¶óÁø´Ù.
Human¾È¿¡ Notebook °´Ã¼³ª Car °´Ã¼°¡ ÀÖÀ» °æ¿ì ÂüÁ¶Çü ¸â¹öµµ º°µµÀÇ »çº»À» ¶°¾ß ÇÑ´Ù. °´Ã¼¸¦
³Ö±â´Â ¹ø°Å·Ó°í ¼Ò½º°¡ ±æ¾îÁö¹Ç·Î °£´ÜÇÏ°Ô ¹è¿À» ³Ö¾î º¸ÀÚ. score ¹è¿Àº Å©±â 3ÀÇ Á¡¼ö°ªÀ» °¡Áö´Âµ¥ 1, 2, 3À¸·Î ÃʱâÈÇß´Ù.
deepclone |
½ÇÇà°á°ú |
class Human implements Cloneable { int
age; String
name; int[]
score = new int[] { 1, 2, 3}; Human(int
age, String name) { this.age
= age; this.name
= name; } public
Object clone() { try
{ return
super.clone(); } catch(CloneNotSupportedException
e) { return
null; } } } class JavaTest { public
static void main(String[] args) { Human
kim = new Human(29, "±è»óÇü"); Human
kim2 = (Human)kim.clone(); kim2.score[0]
= 999; System.out.println("kim.score[0]
: " + kim.score[0]); System.out.println("kim2.score[0]
: " + kim2.score[0]); } } |
kim.score[0] : 999 kim2.score[0] : 999 |
clone ¸Þ¼µå´Â »çº»À» º¹»çÇϵµ·Ï Àß ÀÛ¼ºÇØ µÎ¾ú´Ù. main¿¡¼ kim2 »çº»À» ¶ß°í
kim2ÀÇ Á¡¼ö¸¦ º¯°æÇߴµ¥ ¿øº»ÀÎ kimÀÇ Á¡¼öµµ °°ÀÌ ¹Ù²ï´Ù. ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â °´Ã¼ÀÇ ¸â¹ö´Â °ªÀÌ º¹»çµÇÁö¸¸ score ¸â¹ö´Â
¿©ÀüÈ÷ °°Àº ÂüÁ¶¸¦ °¡¸®Å°°í Àֱ⠶§¹®ÀÌ´Ù.
¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é score ÂüÁ¶Çü ¸â¹ö¿¡ ´ëÇؼ´Â º°µµÀÇ »çº»À»
¸¸µé¾î ¸Þ¸ð¸®¸¦ ¿ÏÀüÈ÷ ºÐ¸®ÇØ¾ß ÇÑ´Ù. clone ¸Þ¼µå¸¸ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
deepclone2 |
½ÇÇà°á°ú |
.... public
Object clone() { try
{ Human
other = (Human)super.clone(); other.score
= this.score.clone(); return
other; } catch(CloneNotSupportedException
e) { return
null; } } } .... |
kim.score[0] : 1 kim2.score[0] : 999 |
°´Ã¼ÀÇ »çº»À» ¸ÕÀú ¶ß°í score ¸â¹ö¿¡ ´ëÇØ º°µµÀÇ ¹è¿À» ´õ
¸¸µé¾ú´Ù. ÀÌ·¸°Ô »çº»À» ¶ß¸é ¸Þ¸ð¸®¿¡´Â ´ÙÀ½°ú °°ÀÌ µÎ °´Ã¼°¡ ¿ÏÀüÈ÷ ºÐ¸®µÈ´Ù. ÀÌÁ¦ main¿¡¼ kim2ÀÇ
Á¡¼ö¸¦ Á¶ÀÛÇصµ ¿øº»ÀÇ Á¡¼ö´Â º¯È ¾ø´Ù.
¹è¿À̳ª °´Ã¼´Â ¿ÏÀüÇÑ »çº»À» ¸¸µé¾î¾ß Çϴµ¥ ºñÇØ ¹®ÀÚ¿Àº ÂüÁ¶ÇüÀÌÁö¸¸ °ª¸¸ º¹»çÇصµ »çº»ÀÌ Àß ¸¸µé¾îÁø´Ù. À§ ¿¹Á¦¿¡¼ name Çʵå´Â ¾èÀº º¹»ç¸¦ ÇßÁö¸¸ »çº»ÀÌ Àß ¸¸µé¾îÁö´Âµ¥
ÀÌ´Â ¹®ÀÚ¿ÀÌ º¯°æµÇ´Â Áï½Ã º°µµÀÇ »çº»À» ¸¸µéµµ·Ï ½Ã½ºÅÛÀÌ Æ¯º°È÷ Áö¿øÇϱ⠶§¹®ÀÌ´Ù.
new ¿¬»êÀÚ·Î »ý¼ºÇÑ °´Ã¼´Â Èü¿¡ »ý¼ºµÈ´Ù. ¸Þ¸ð¸®°¡ ¹«ÇÑÇÏÁö ¾Ê¾Æ ´Ù »ç¿ëÇÑ °´Ã¼´Â Á¦°ÅÇØ¾ß Çϴµ¥ °¡ºñÁö Ä÷ºÅÍ°¡ ÁÖ±âÀûÀ¸·Î ¹Ì»ç¿ë °´Ã¼¸¦ ã¾Æ ¸Þ¸ð¸®¸¦
ȸ¼öÇϱ⠶§¹®¿¡ ÀÚ¹Ù¿¡´Â °´Ã¼¸¦ »èÁ¦ÇÏ´Â º°µµÀÇ ¸í·ÉÀÌ ¾ø´Ù. ¸Þ¸ð¸® ȸ¼ö°¡ ÀÚµ¿À¸·Î ¼öÇàµÇ¾î ¸Þ¸ð¸®
´©¼ö¸¦ °ÆÁ¤ÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç °´Ã¼¸¦ »ý¼ºÇؼ »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù.
°¡ºñÁö Ä÷ºÅÍ ±â´ÉÀÌ ¾ø´Â ´Ù¸¥ ¾ð¾î °³¹ßÀÚ ÀÔÀå¿¡¼´Â ¹«Ã´ ºÎ·¯¿î ±â´ÉÀÌ´Ù.
±×·¯³ª ¾²·¹±â ¼öÁý ±â´ÉÀº ¸Þ¸ð¸®¿¡¸¸ ±¹ÇÑµÇ¸ç ±× ¿ÜÀÇ ÀÚ¿øÀº ¼öÀÛ¾÷À¸·Î ÇØÁ¦ÇØ¾ß ÇÑ´Ù. ¿¹¸¦
µé¾î ³×Æ®¿÷¿¡ ¿¬°áÇÏ¿© Åë½ÅÇϴ Ŭ·¡½º¶ó¸é ¿¬°áÇÏ´Â µ¿ÀÛ°ú ¿¬°áÀ» ²÷´Â µ¿ÀÛÀÌ ÇÊ¿äÇÏ´Ù.
finalize |
½ÇÇà°á°ú |
class Network { void
connect() { System.out.println("¿¬°áµÇ¾ú½À´Ï´Ù."); } void
disconnect() { System.out.println("¿¬°áÀÌ
²÷¾îÁ³½À´Ï´Ù."); } } class JavaTest { public
static void main(String[] args) { communication(); } static
void communication() { Network
net = new Network(); net.connect(); //
³×Æ®¿÷ Åë½Å net.disconnect(); } } |
¿¬°áµÇ¾ú½À´Ï´Ù. ¿¬°áÀÌ ²÷¾îÁ³½À´Ï´Ù. |
communication ¸Þ¼µå¿¡¼
Network °´Ã¼¸¦ »ý¼ºÇÏ°í ¿¬°á ¹× ÇØÁ¦Çß´Ù. net °´Ã¼´Â communication ¸Þ¼µåÀÇ Áö¿ªº¯¼ö¿©¼ ÀÌ ¸Þ¼µå°¡ Á¾·áµÉ ¶§ »ç¶óÁø´Ù.
°´Ã¼°¡ ¾ø¾îÁö¸é ´õ ÀÌ»ó Åë½ÅÇÒ ¼ö ¾øÀ¸´Ï ¸®ÅÏÇϱâ Àü¿¡ ¿¬°áÀ» ²÷´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.
disconnect ¸Þ¼µå È£ÃâÀ» ±ô¹Ú Àؾú°Å³ª ¿¹¿Ü°¡ ¹ß»ýÇؼ ÀÌ
¸Þ¼µå°¡ È£ÃâµÇÁö ¾ÊÀ¸¸é ¾î¶»°Ô µÉ±î? net °´Ã¼ ÀÚü´Â °¡ºñÁö Ä÷ºÅÍ¿¡ ÀÇÇØ È¸¼öµÇÁö¸¸ ¿¬°áµÈ Åë½ÅÀº
¾Æ¹«µµ ²÷¾îÁÖÁö ¾Ê¾Æ °è¼Ó ¿¬°áµÈ ä·Î ³²¾Æ Àִ´Ù. ±×·¡¼ ¸Þ¸ð¸® ȸ¼ö¿Í´Â º°µµ·Î Ãß°¡ Á¤¸® Äڵ尡
ÇÊ¿äÇÏ´Ù.
ObjectÀÇ finalize ¸Þ¼µå´Â
°´Ã¼°¡ »ç¶óÁú ¶§ È£ÃâµÇ¸ç µÞÁ¤¸®¸¦ ¼öÇàÇÑ´Ù. ¸Þ¸ð¸® °ü·Ã Á¤¸®´Â ÇÒ ÇÊ¿ä°¡ ¾øÁö¸¸ Åë½Å ¿¬°á, ±ÇÇÑ È¹µæ, DB ¿ÀÇ µîÀÇ Áغñ ÀÛ¾÷À» Çß´Ù¸é °´Ã¼°¡ »ç¶óÁö±â
Àü¿¡ Á¤¸®ÇØ¾ß ÇÑ´Ù. ÀÌ·± Á¤¸® Äڵ带 ÀÛ¼ºÇÏ´Â °÷ÀÌ finalize
¸Þ¼µåÀÌ´Ù.
finalize2 |
class Network { void
connect() { System.out.println("¿¬°áµÇ¾ú½À´Ï´Ù."); } void
disconnect() { System.out.println("¿¬°áÀÌ
²÷¾îÁ³½À´Ï´Ù."); } protected
void finalize() throws Throwable { super.finalize(); disconnect(); } } class JavaTest { public
static void main(String[] args) { communication(); System.gc(); System.runFinalization(); } static
void communication() { Network
net = new Network(); net.connect(); } } |
finalize ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿©
disconnect ¸Þ¼µå¸¦ È£ÃâÇß´Ù. finalize ¸Þ¼µå´Â Äڵ忡¼ È£ÃâÇÏ´Â °ÍÀÌ
¾Æ´Ï¸ç È£ÃâÇؼµµ ¾ÈµÈ´Ù. ½Ã½ºÅÛÀÌ Àû´çÇÑ ¶§¿¡ ¾Ë¾Æ¼ È£ÃâÇϱ⠶§¹®¿¡ publicÀÏ ÇÊ¿ä°¡ ¾øÀ¸¸ç protected ¾×¼¼½º ÁöÁ¤À» ÁÖ¾î¾ß
ÇÑ´Ù. ÀÚ½ÅÀÇ ÀÚ¿øÀ» Á¤¸®Çϱâ Àü¿¡ ºÎ¸ðÀÇ finalize¸¦
È£ÃâÇÏ¿© ºÎ¸ðÀÇ ÀÚ¿øºÎÅÍ Á¤¸®ÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù.
Á¤¸® Äڵ带 ÀÛ¼ºÇØ µÎ¾úÀ¸´Ï °´Ã¼°¡ Á¦°ÅµÉ ¶§ ¿¬°áµµ ÀÚµ¿À¸·Î ²÷¾îÁú °ÍÀÌ´Ù.
±×·¯³ª finalize ¸Þ¼µå¸¦ ÀÛ¼ºÇß´Ù°í Çؼ Äڵ尡 Áï½Ã ½ÇÇàµÇ´Â °ÍÀº ¾Æ´Ï´Ù. °¡ºñÁö Ä÷ºÅÍÀÇ È£Ãâ ½ÃÁ¡Àº °¡»ó ¸Ó½ÅÀÌ °áÁ¤Çϸç ÇÑ°¡ÇÒ ¶§ Á¤¸®ÇÑ´Ù. ÀÌ
¸Þ¼µå°¡ È£ÃâµÇ´Â »óȲÀ» È®ÀÎÇØ º¸·Á¸é System.gc ¸Þ¼µå¸¦ È£ÃâÇÏ¿© °Á¦·Î ¾²·¹±â ¼öÁýÀ» Áö½ÃÇؾß
ÇÑ´Ù.
¾²·¹±â ¼öÁýÀ» °Á¦ Áö½ÃÇÏ¸é °´Ã¼´Â Áï½Ã Á¦°ÅµÈ´Ù. ±×·¯³ª °Á¦·Î
¼öÁýÇ϶ó°í Çصµ finalize ¸Þ¼µå°¡ ¹Ù·Î È£ÃâµÈ´Ù´Â º¸ÀåÀº ¾øÀ¸¸ç ¿©·¯ °¡Áö ³»ºÎÀûÀÎ »çÁ¤¿¡ ÀÇÇØ
À¯º¸µÇ°Å³ª ¿¬±âµÉ ¼öµµ ÀÖ´Ù. Áï½Ã ÀÚ¿øÀ» Á¤¸®ÇÏ·Á¸é
runFinalization ¸Þ¼µåµµ °°ÀÌ È£ÃâÇØ¾ß ÇÑ´Ù. communication ¸Þ¼µå¿¡¼ disconnect ¸Þ¼µå¸¦ È£ÃâÇÏÁö ¾ÊÁö¸¸ Á¤»óÀûÀ¸·Î ¿¬°áÀÌ Àß ²÷¾îÁø´Ù.
ÀÚ¹Ù´Â ¸Þ¸ð¸® °ü¸® ±â´ÉÀÌ ÈǸ¢ÇÏ°í ½Å·Ú¼ºÀÌ ³ô¾Æ Æí¸®ÇÏ´Ù. ºñ¸Þ¸ð¸®
°ü·Ã Á¤¸®´Â µ¿±âÀûÀ¸·Î ¼öÇàÇÒ ÇÊ¿ä°¡ ÀÖ¾î ¾ðÁ¦ È£ÃâµÉÁöµµ ¸ð¸£´Â finalize ¸Þ¼µå¸¦ »ç¿ëÇÏ´Â
°æ¿ì´Â µå¹°´Ù. À§ ¿¹Á¦´Â µ¿ÀÛ ¹æ½ÄÀ» º¸À̱â À§ÇØ ÀǵµÀûÀ¸·Î ÀÛ¼ºÇÑ °ÍÀÏ »Ó ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡¼´Â ¸í½ÃÀûÀÎ
ÀÚ¿ø Á¤¸® ¸Þ¼µå¸¦ ¸¸µé°í ¿¹¿Ü ó¸® ±¸¹® µîÀ» ÅëÇØ Àû±ØÀûÀ¸·Î Á¤¸®ÇÏ´Â ¹æ½ÄÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.