ȨÆäÀÌÁöÁ¦ÀÛ±³½Ç
ȨÆäÀÌÁö Á¦ÀÛ±âÃÊ
±âº»Å±×
ÅÂ±×ÆÁ¸ðÀ½
ű×ÀÚ·á¹æ
Æ÷Åä¼¥°ÁÂ
À¥.°ü·Ã°ÁÂ
PHP°ÁÂ
PHPÆÁ
HTML.CSS
JAVASCRIPT
ASP
JSP
PHP½ÉÈ
C.C++
Ç÷¡½Ã.ActionScript
ÀÚÀ¯°Ô½ÃÆÇ
Áú¹®°Ô½ÃÆÇ
À¯¸Ó°Ô½ÃÆÇ
¿À¶ô½Ç
Tel. 042-353-2371
ÆòÀÏ ¿ÀÀü 9½Ã ~ ¿ÀÈÄ 7½Ã
±â¾÷ÀºÇà
010-8649-6758
¿¹±ÝÁÖ:Á¦ÁÖ»ç¶û(¼ÛÁø¾Æ)
JSP
Ȩ > ȨÆäÀÌÁöÁ¦ÀÛ±³½Ç > JSP
ÀÛ¼ºÀÚ
freeweb
ºñ¹Ð¹øÈ£
Ä«Å×°í¸®
JSP
JAVA
JSTL
JS
Tool
JDBC
Oracle
Ajax
Spring
JSF
Á¦¸ñ
JAVA¸¦ ¹è¿ì´Â »ç¶÷, ¶Ç´Â ÇÁ·Î±×·¡¹Ö¿¡ Á¾»çÇϽô °³¹ßÀÚ ºÐµéÀÌ ´Ù½ÃÇѹø ºÁµµ ±¦ÂúÀ»°Å °°Àº <DIV id=toctitle><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 9pt">¸¶Ä¡ ÀÌ·Ð ½ÃÇè Á÷Àü º¸´Â ÄÁ´×ÆäÀÌÆÛ °°ÀÌ Á¤¸® µÇ¾îÀÖ´Â ÀÚ¹ÙÀÇ ±âº»¿ø¸® ¿¡ °üÇÑ ÀÚ·áÀÔ´Ï´Ù.</SPAN></SPAN></DIV> <DIV id=toctitle><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 9pt">ƯÈ÷ °¢ ÁÖÁ¦¿¡ ¸Â´Â ¸ñÂ÷¿¡´Â ¿¹Á¦°¡ ÀÖ¾î JAVA¸¦ ÀÔ¹®ÇϽô ÃʱÞÇÁ·Î±×·¡¸Ó µé¿¡°Ô´Â ÁÁÀº ÀÚ·á °°½À´Ï´Ù.</SPAN></SPAN></DIV> <DIV id=toctitle><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 9pt">±×·³ ±æ°í±ä ½ºÅ©·Ñ ³»·Á¼ ²À º¸½Ã±æ..</SPAN></SPAN></DIV> <DIV id=toctitle><SPAN class=Apple-style-span style="FONT-WEIGHT: bold; FONT-SIZE: 18px; LINE-HEIGHT: 27px"><BR></SPAN></DIV> <DIV id=toctitle> <H2 style="DISPLAY: inline"><FONT size=4>¸ñÂ÷</FONT></H2></DIV><A class=con_link target=_blank name=toc></A> <DL> <DD> <DL> <DT><A class=con_link id=toc-1 target=_blank name=toc-1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">1</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> °´Ã¼ÁöÇâÀÇ ±¸¸Û static </SPAN> <DD> <DL> <DT><A class=con_link id=toc-1.1 target=_blank name=toc-1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.1" target=_blank>1.1</A> Java´Â °´Ã¼ÁöÇâ ¾ð¾îÀÌ´Ù? <DT><A class=con_link id=toc-1.2 target=_blank name=toc-1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.2" target=_blank>1.2</A> Àü¿ªº¯¼ö </DT></DL> <DT><A class=con_link id=toc-2 target=_blank name=toc-2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">2</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Java´Â Pointer¾ð¾îÀÌ´Ù? (Java¿¡´Â Pointer¹Û¿¡ ¾ø´Ù?) </SPAN> <DD> <DL> <DT><A class=con_link id=toc-2.1 target=_blank name=toc-2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.1" target=_blank>2.1</A> Java´Â primitiveÇüÀ» Á¦¿ÜÇÏ°ï ¸ðµÎ PointerÀÌ´Ù <DT><A class=con_link id=toc-2.2 target=_blank name=toc-2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.2" target=_blank>2.2</A> nullÀº °´Ã¼Àΰ¡? <DT><A class=con_link id=toc-2.3 target=_blank name=toc-2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.3" target=_blank>2.3</A> String¿¡ ´ëÇÏ¿© <DT><A class=con_link id=toc-2.4 target=_blank name=toc-2.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.4" target=_blank>2.4</A> °´Ã¼ÁöÇâÀÇ Ä¸½¶È ÆÄ±« ÁÖÀÇ <DT><A class=con_link id=toc-2.5 target=_blank name=toc-2.5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5" target=_blank>2.5</A> ¹è¿¿¡ ´ëÇÏ¿© <DD> <DL> <DT><A class=con_link id=toc-2.5.1 target=_blank name=toc-2.5.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.1" target=_blank>2.5.1</A> ¹è¿Àº object Àΰ¡? <DT><A class=con_link id=toc-2.5.2 target=_blank name=toc-2.5.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.2" target=_blank>2.5.2</A> ¹è¿ÀÇ length´Â ¿Ö field(member variable)Àΰ¡? <DT><A class=con_link id=toc-2.5.3 target=_blank name=toc-2.5.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.3" target=_blank>2.5.3</A> final°ú ¹è¿¿¡ ´ëÇÏ¿©... <DT><A class=con_link id=toc-2.5.4 target=_blank name=toc-2.5.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.4" target=_blank>2.5.4</A> "Java¿¡¼ÀÇ ´ÙÂ÷¿ø ¹è¿Àº Á¸ÀçÇÏÁö ¾Ê´Â´Ù." </DT></DL> <DT><A class=con_link id=toc-2.6 target=_blank name=toc-2.6></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6" target=_blank>2.6</A> Àμö(parameter/argument)Àü´ÞÀÇ °³³ä <DD> <DL> <DT><A class=con_link id=toc-2.6.1 target=_blank name=toc-2.6.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.1" target=_blank>2.6.1</A> "Java¿¡¼ parameter(argument) Àü´ÞÀº ¹«Á¶°Ç 'call by value' ÀÌ´Ù" <DT><A class=con_link id=toc-2.6.2 target=_blank name=toc-2.6.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.2" target=_blank>2.6.2</A> "C¿Í °°Àº ¾ð¾î´Â static linkingÀÌÁö¸¸, Java´Â dynamic linkingÀÌ´Ù." </DT></DL> <DT><A class=con_link id=toc-2.7 target=_blank name=toc-2.7></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7" target=_blank>2.7</A> GC ¿¡ ´ëÇÏ¿© Àá±ñ! <DD> <DL> <DT><A class=con_link id=toc-2.7.1 target=_blank name=toc-2.7.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7.1" target=_blank>2.7.1</A> "Garbage CollectionÀº ¸¸´ÉÀÌ ¾Æ´Ï´Ù." </DT></DL> <DT><A class=con_link id=toc-2.8 target=_blank name=toc-2.8></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8" target=_blank>2.8</A> Java Pointer °á·Ð <DD> <DL> <DT><A class=con_link id=toc-2.8.1 target=_blank name=toc-2.8.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8.1" target=_blank>2.8.1</A> "°á±¹ Java¿¡´Â pointer°¡ ÀÖ´Â °ÍÀΰ¡, ¾ø´Â °ÍÀΰ¡?" </DT></DL></DD></DL> <DT><A class=con_link id=toc-3 target=_blank name=toc-3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">3</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> »ó¼Ó°ú interfaceÀÇ ¹®Á¦Á¡ </SPAN> <DD> <DL> <DT><A class=con_link id=toc-3.1 target=_blank name=toc-3.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1" target=_blank>3.1</A> »ó¼Ó <DD> <DL> <DT><A class=con_link id=toc-3.1.1 target=_blank name=toc-3.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.1" target=_blank>3.1.1</A> »ó¼Ó¿¡ ÀÖ¾î¼ÀÇ »ý¼ºÀÚ(constructor) <DT><A class=con_link id=toc-3.1.2 target=_blank name=toc-3.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.2" target=_blank>3.1.2</A> "down cast´Â º»ÁúÀûÀ¸·Î ¸Å¿ì À§ÇèÇÏ´Ù" <DT><A class=con_link id=toc-3.1.3 target=_blank name=toc-3.1.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.3" target=_blank>3.1.3</A> "Ãß»óŬ·¡½º¿¡ finalÀÌ ÀÖÀ¸¸é compile errorÀÌ´Ù" </DT></DL> <DT><A class=con_link id=toc-3.2 target=_blank name=toc-3.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2" target=_blank>3.2</A> interface <DD> <DL> <DT><A class=con_link id=toc-3.2.1 target=_blank name=toc-3.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2.1" target=_blank>3.2.1</A> "interface´Â interfaceÀÏ»Ó ´ÙÁß »ó¼ÓÀÇ ´ë¿ëǰÀÌ ¾Æ´Ï´Ù." </DT></DL> <DT><A class=con_link id=toc-3.3 target=_blank name=toc-3.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.3" target=_blank>3.3</A> »ó¼Ó Á¦´ë·Î »ç¿ëÇϱâ </DT></DL> <DT><A class=con_link id=toc-4 target=_blank name=toc-4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">4</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> package¿Í access Á¦¾î¿¡ °üÇÑ ÀÌÇØ </SPAN> <DD> <DL> <DT><A class=con_link id=toc-4.1 target=_blank name=toc-4.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1" target=_blank>4.1</A> package <DD> <DL> <DT><A class=con_link id=toc-4.1.1 target=_blank name=toc-4.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.1" target=_blank>4.1.1</A> "package´Â '°èÃþ±¸Á¶' Àΰ¡?" <DT><A class=con_link id=toc-4.1.2 target=_blank name=toc-4.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.2" target=_blank>4.1.2</A> "compiler °¡ ÀνÄÇÏ´Â class°Ë»ö ¼ø¼(¼Ò½ºÄڵ峻 Ŭ·¡½º°¡ ¹ß°ßµÉ °æ¿ì ±× Ŭ·¡½ºÀÇ À§Ä¡¸¦ ã´Â ¼ø¼)" </DT></DL> <DT><A class=con_link id=toc-4.2 target=_blank name=toc-4.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2" target=_blank>4.2</A> access Á¦¾î <DD> <DL> <DT><A class=con_link id=toc-4.2.1 target=_blank name=toc-4.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.1" target=_blank>4.2.1</A> "interfacde memberÀÇ access Á¦¾î" <DT><A class=con_link id=toc-4.2.2 target=_blank name=toc-4.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.2" target=_blank>4.2.2</A> ±×·¸´Ù¸é interface¸¦ ´Ù¸¥ package¿¡ ´ëÇÏ¿© ¼û±â°í ½ÍÀ¸¸é ¾î¶»°Ô Çϴ°¡? </DT></DL></DD></DL> <DT><A class=con_link id=toc-5 target=_blank name=toc-5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">5</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> ±âŸ Java ±â´É </SPAN> <DD> <DL> <DT><A class=con_link id=toc-5.1 target=_blank name=toc-5.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1" target=_blank>5.1</A> Thread <DD> <DL> <DT><A class=con_link id=toc-5.1.1 target=_blank name=toc-5.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.1" target=_blank>5.1.1</A> "Multi Thread¿¡¼´Â È帧Àº º¹¼öÀÌÁö¸¸ data´Â °øÀ¯µÉ ¼ö ÀÖ´Ù." <DT><A class=con_link id=toc-5.1.2 target=_blank name=toc-5.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.2" target=_blank>5.1.2</A> "Thread´Â °´Ã¼¿Í Á÷±³ÇÏ´Â °³³äÀÌ´Ù." <DT><A class=con_link id=toc-5.1.3 target=_blank name=toc-5.1.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.3" target=_blank>5.1.3</A> "Synchronized ÀÇ ÀÌÇØ" <DT><A class=con_link id=toc-5.1.4 target=_blank name=toc-5.1.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.4" target=_blank>5.1.4</A> "Thread »ç¿ë¹ýÀÇ Á¤¼®Àº?" </DT></DL> <DT><A class=con_link id=toc-5.2 target=_blank name=toc-5.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2" target=_blank>5.2</A> Exception <DD> <DL> <DT><A class=con_link id=toc-5.2.1 target=_blank name=toc-5.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.1" target=_blank>5.2.1</A> "finally ÀýÀº ¹Ýµå½Ã ¾î¶°ÇÑ °æ¿ì¿¡µµ ½ÇÇàµÇ´Â°¡?" <DT><A class=con_link id=toc-5.2.2 target=_blank name=toc-5.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2" target=_blank>5.2.2</A> "¿¹¿ÜÀÇ Á¾·ù 3°¡Áö (Error, RuntimeException, ±×¹ÛÀÇ Exception)" <DD> <DL> <DT><A class=con_link id=toc-5.2.2.1 target=_blank name=toc-5.2.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.1" target=_blank>5.2.2.1</A> Error <DT><A class=con_link id=toc-5.2.2.2 target=_blank name=toc-5.2.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.2" target=_blank>5.2.2.2</A> RuntimeException <DT><A class=con_link id=toc-5.2.2.3 target=_blank name=toc-5.2.2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.3" target=_blank>5.2.2.3</A> ±×¹ÛÀÇ Exception </DT></DL> <DT><A class=con_link id=toc-5.2.3 target=_blank name=toc-5.2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.3" target=_blank>5.2.3</A> "OutOfMemoryError´Â ¾î¶»°Ô ó¸®ÇØ¾ß Çϴ°¡?" </DT></DL> <DT><A class=con_link id=toc-5.3 target=_blank name=toc-5.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3" target=_blank>5.3</A> Object Serialize <DD> <DL> <DT><A class=con_link id=toc-5.3.1 target=_blank name=toc-5.3.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.1" target=_blank>5.3.1</A> "Serialize¸¦ À§Çؼ´Â marker interfaceÀÎ java.io.Serializable interface¸¦ implementsÇØ¾ßÇÑ´Ù." <DT><A class=con_link id=toc-5.3.2 target=_blank name=toc-5.3.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.2" target=_blank>5.3.2</A> "super class´Â SerializableÀÌ ¾Æ´Ñµ¥ sub class¸¸ SerializableÀÎ °æ¿ìÀÇ ¹®Á¦Á¡" <DT><A class=con_link id=toc-5.3.3 target=_blank name=toc-5.3.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.3" target=_blank>5.3.3</A> "transient fieldÀÇ º¹¿ø(?)°ü·Ã" <DT><A class=con_link id=toc-5.3.4 target=_blank name=toc-5.3.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.4" target=_blank>5.3.4</A> "Stack Overflow¿¡ ÁÖÀÇÇ϶ó!" </DT></DL> <DT><A class=con_link id=toc-5.4 target=_blank name=toc-5.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4" target=_blank>5.4</A> "nested class / inner class / ÁßøŬ·¡½º" <DD> <DL> <DT><A class=con_link id=toc-5.4.1 target=_blank name=toc-5.4.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.1" target=_blank>5.4.1</A> "ÁßøŬ·¡½ºÀÇ °³³ä" <DT><A class=con_link id=toc-5.4.2 target=_blank name=toc-5.4.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.2" target=_blank>5.4.2</A> "³»ºÎŬ·¡½º´Â ºÎ¸ðÀÇ ÂüÁ¶¸¦ ¸ô·¡ º¸À¯Çϰí ÀÖ´Ù." <DT><A class=con_link id=toc-5.4.3 target=_blank name=toc-5.4.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.3" target=_blank>5.4.3</A> "local inner class¿¡ ´ëÇÏ¿©" <DT><A class=con_link id=toc-5.4.4 target=_blank name=toc-5.4.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.4" target=_blank>5.4.4</A> "anonymous class(¹«¸íŬ·¡½º)¿¡ ´ëÇÏ¿©" </DT></DL></DD></DL> <DT><A class=con_link id=toc-6 target=_blank name=toc-6></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">6</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> ÀÌ·¡µµ Java°¡ °£´ÜÇѰ¡</SPAN>? <DD> <DL> <DT><A class=con_link id=toc-6.1 target=_blank name=toc-6.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1" target=_blank>6.1</A> method overload ¿¡¼ÀÇ È¥¶õ? <DD> <DL> <DT><A class=con_link id=toc-6.1.1 target=_blank name=toc-6.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.1" target=_blank>6.1.1</A> "overload¶õ À̸§ÀÌ °¡°í Àμö°¡ ´Ù¸¥ method¿¡ compiler°¡ ´Ù¸¥ À̸§À» ºÙÀÌ´Â ±â´É" <DT><A class=con_link id=toc-6.1.2 target=_blank name=toc-6.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.2" target=_blank>6.1.2</A> "±×·¸´Ù¸é overload¿¡¼ ½ÇÁ¦·Î È¥µ¿µÇ´Â ºÎºÐÀº ¹«¾ùÀΰ¡?" <DT><A class=con_link id=toc-6.1.3 target=_blank name=toc-6.1.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.3" target=_blank>6.1.3</A> (Âü°í) ¶Ç´Ù¸¥ È¥µ¿, overloadÇÑ method¸¦ override Çϸé? </DT></DL> <DT><A class=con_link id=toc-6.2 target=_blank name=toc-6.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2" target=_blank>6.2</A> »ó¼Ó/override/ÀºÆó ¿¡¼ÀÇ º¹ÀâÇÔ <DD> <DL> <DT><A class=con_link id=toc-6.2.1 target=_blank name=toc-6.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.1" target=_blank>6.2.1</A> "Java classÀÇ member 4 Á¾·ù" <DT><A class=con_link id=toc-6.2.2 target=_blank name=toc-6.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.2" target=_blank>6.2.2</A> "override½Ã method À̸§¿¡ ´ëÇÑ ÇÔÁ¤" <DT><A class=con_link id=toc-6.2.3 target=_blank name=toc-6.2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.3" target=_blank>6.2.3</A> "¶Ç´Ù¸¥ ³ªÀÇ(?) ½Ç¼ö - ¸»µµ ¾ÈµÇ´Â ¿ÀŸ" <DT><A class=con_link id=toc-6.2.4 target=_blank name=toc-6.2.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.4" target=_blank>6.2.4</A> "static member¸¦ instance¸¦ °æÀ¯ÇÏ¿© ÂüÁ¶Çؼ´Â ¾È µÈ´Ù." <DT><A class=con_link id=toc-6.2.5 target=_blank name=toc-6.2.5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.5" target=_blank>6.2.5</A> "super keyword´Â ºÎ¸ðÀÇ this" </DT></DL> <DT><A class=con_link id=toc-6.3 target=_blank name=toc-6.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.3" target=_blank>6.3</A> »ó¼Ó¿¡ °üÇÑ ¶Ç ´Ù¸¥ ¹®Á¦ <DT><A class=con_link id=toc-6.4 target=_blank name=toc-6.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4" target=_blank>6.4</A> ±×¹ÛÀÇ ÇÔÁ¤ <DD> <DL> <DT><A class=con_link id=toc-6.4.1 target=_blank name=toc-6.4.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.1" target=_blank>6.4.1</A> "»ý¼ºÀÚ¿¡ void ¸¦ ºÙÀδٸé?" <DT><A class=con_link id=toc-6.4.2 target=_blank name=toc-6.4.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.2" target=_blank>6.4.2</A> "if / switch ÀÇ ÇÔÁ¤" </DT></DL></DD></DL> <DT><A class=con_link id=toc-7 target=_blank name=toc-7></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">7</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Java ±â´É Àû¿ë ¸î°¡Áö </SPAN> <DD> <DL> <DT><A class=con_link id=toc-7.1 target=_blank name=toc-7.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1" target=_blank>7.1</A> ´ë±Ô¸ð °³¹ß¿¡¼ interface ºÐ¸®Çϱâ <DD> <DL> <DT><A class=con_link id=toc-7.1.1 target=_blank name=toc-7.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1.1" target=_blank>7.1.1</A> "interface ºÐ¸®ÀÇ Çʿ伺" </DT></DL> <DT><A class=con_link id=toc-7.2 target=_blank name=toc-7.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.2" target=_blank>7.2</A> Java¿¡¼ÀÇ ¿°ÅÇü <DT><A class=con_link id=toc-7.3 target=_blank name=toc-7.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.3" target=_blank>7.3</A> Debug write </DT></DL> <DT><A class=con_link id=toc-8 target=_blank name=toc-8></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">8</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Java 5.0 Tiger ¿¡ ´ëÇÏ¿© </SPAN> <DD> <DL> <DT><A class=con_link id=toc-8.1 target=_blank name=toc-8.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.1" target=_blank>8.1</A> Working with java.util.Arrays <DT><A class=con_link id=toc-8.2 target=_blank name=toc-8.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.2" target=_blank>8.2</A> Using java.util.Queue interface <DT><A class=con_link id=toc-8.3 target=_blank name=toc-8.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.3" target=_blank>8.3</A> java.lang.StringBuilder »ç¿ëÇϱâ <DT><A class=con_link id=toc-8.4 target=_blank name=toc-8.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.4" target=_blank>8.4</A> Using Type-Safe Lists <DT><A class=con_link id=toc-8.5 target=_blank name=toc-8.5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.5" target=_blank>8.5</A> Writing Generic Types <DT><A class=con_link id=toc-8.6 target=_blank name=toc-8.6></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.6" target=_blank>8.6</A> »õ·Î¿î static final enum <DT><A class=con_link id=toc-8.7 target=_blank name=toc-8.7></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.7" target=_blank>8.7</A> Using java.util.EnumMap <DT><A class=con_link id=toc-8.8 target=_blank name=toc-8.8></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.8" target=_blank>8.8</A> Using java.util.EnumSet <DT><A class=con_link id=toc-8.9 target=_blank name=toc-8.9></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.9" target=_blank>8.9</A> Convert Primitives to Wrapper Types <DT><A class=con_link id=toc-8.10 target=_blank name=toc-8.10></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.10" target=_blank>8.10</A> Method Overload resolution in AutoBoxing <DT><A class=con_link id=toc-8.11 target=_blank name=toc-8.11></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.11" target=_blank>8.11</A> °¡º¯ÀûÀÎ argument °³¼ö <STRONG>...</STRONG> <DT><A class=con_link id=toc-8.12 target=_blank name=toc-8.12></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.12" target=_blank>8.12</A> The Three Standard Annotation <DT><A class=con_link id=toc-8.13 target=_blank name=toc-8.13></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.13" target=_blank>8.13</A> Creating Custom Annotation Types </DT></DL> <DT><A class=con_link id=toc-9 target=_blank name=toc-9></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">9</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> The for/in Statement </SPAN> <DD> <DL> <DT><A class=con_link id=toc-9.1 target=_blank name=toc-9.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9.1" target=_blank>9.1</A> for/in ÀÇ ÀÚÁÖ »ç¿ëµÇ´Â ÇüÅ </DT></DL> <DT><A class=con_link id=toc-10 target=_blank name=toc-10></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">10</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Static Import </SPAN> <DD> <DL> <DT><A class=con_link id=toc-10.1 target=_blank name=toc-10.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10.1" target=_blank>10.1</A> static member/method import </DT></DL> <DT><A class=con_link id=toc-11 target=_blank name=toc-11></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-11" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">11</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> References </SPAN></DT></DL> <DIV><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"><BR></SPAN></DIV></DD></DL> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV>===============================================================<BR> <DIV> <H2><A class=con_link id=s-1 target=_blank name=s-1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>1</FONT></A> </SPAN>°´Ã¼ÁöÇâÀÇ ±¸¸Û static <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-1.1 target=_blank name=s-1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>1.1</A> </SPAN>Java´Â °´Ã¼ÁöÇâ ¾ð¾îÀÌ´Ù? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.1" target=_blank>#</A></H3> <DIV>"Java´Â ¿ÏÀüÇÑ °´Ã¼ÁöÇâ ¾ð¾îÀÌ´Ù" ¶ó´Â ÁÖÀåÀ» ÀÚÁÖ Á¢ÇÏ°Ô µÈ´Ù. ¸¸ÀÏ À̰ÍÀÌ »ç½ÇÀ̶ó¸é Java¸¦ »ç¿ëÇÏ´Â ÇÑ "±âÁ¸ÀÇ ÀýÂ÷ÁöÇâ ÇÁ·Î±×·¡¹ÖÀ» ÀüÇô ÇÒ¼ö ¾øÀ»°Í °°Áö¸¸ ±×·¸Áö ¾Ê´Ù. ºüÁ®³ª°¥ ±¸¸ÛÀÌ ÀÖ´Â °ÍÀÌ´Ù. staticÀ» ÀÌ¿ëÇÏ¸é ºñ °´Ã¼ÁöÇâ ¾ð¾îó·³ ÄÚµùÇÒ ¼ö ÀÖ´Ù.</DIV><BR> <DIV>static method´Â instance°¡ ¾Æ´Ñ Ŭ·¡½º¿¡ ¼ÓÇÏ´Â method·Î, class method¶ó°í ºÎ¸¥´Ù. ¹Ý´ë·Î staticÀÌ ¾Æ´Ñ method´Â instance method¶ó°í ºÎ¸¥´Ù.</DIV><BR> <DIV>static method´Â this°¡ ¾ø´Ù. instance method¿¡´Â ¼û°ÜÁø ÆÄ¶ó¹ÌÅÍ·Î this°¡ °Ç³×Áø´Ù. (¾Æ·¡ "°´Ã¼ÁöÇâ¿¡ ÈçÈñ ÀÖ´Â ¿ÀÇØ" Âü°í) ÇÏÁö¸¸ static method´Â ÀýÂ÷ÁöÇâÀÇ ÇÔ¼ö¿Í µ¿ÀÏÇϹǷΠ¼û°ÜÁø ÆÄ¶ó¹ÌÅÍ this´Â ¾ø´Ù. ±×·¡¼ static method¿¡¼´Â Àü´ÞÇÑ this°¡ ¾øÀ¸¹Ç·Î instance method¸¦ È£ÃâÇϰųª instance field¸¦ ÂüÁ¶ÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù.</DIV><BR> <DIV>(Âü°í) °´Ã¼ÁöÇâ¿¡ ÈçÈ÷ ÀÖ´Â ¿ÀÇØ</DIV><BR> <DIV> <UL> <LI>¿ÀÇØ1. "°´Ã¼ÁöÇâ¿¡¼´Â °´Ã¼³¢¸® ¼·Î ¸Þ¼¼Áö¸¦ ÁÖ°í ¹ÞÀ¸¸ç µ¿ÀÛÇÑ´Ù." ¶ó´Â ¸»À» µè°í ´ÙÀ½°ú °°ÀÌ »ý°¢ÇÒ ¼ö ÀÖ´Ù. "°´Ã¼ÁöÇâ¿¡¼´Â °´Ã¼°¡ °¢°¢ µ¶¸³ÇÏ¿© ¿òÁ÷Àδٴ °ÍÀΰ¡, ±×·¯¸é °¢ °´Ã¼¿¡ µ¶¸³µÈ thread°¡ ÇÒ´çµÇ¾î ÀÖ´Ü ¸»Àΰ¡?" ±×·¸Áö ¾Ê´Ù. "¸Þ¼¼Áö¸¦ º¸³½´Ù"¶ó´Â °ÍÀº ´Ü¼øÈ÷ °¢ °´Ã¼ÀÇ ÇÔ¼ö È£Ãâ¿¡ ºÒ°úÇÏ´Ù. <LI>¿ÀÇØ2. "°´Ã¼ÁöÇâ¿¡¼´Â method°¡ class¿¡ ºÎ¼ÓµÇ¾î ÀÖ´Ù"´Â ¸»À» µè°í ´ÙÀ½°ú °°ÀÌ »ý°¢ÇÒ ¼ö ÀÖ´Ù. "±×·¯¸é instanceº°·Î methodÀÇ ½ÇÇàÄڵ尡 º¹Á¦µÇ°í ÀÖ´Â °ÍÀÌ ¾Æ´Ñ°¡?" ¹°·Ð À̰͵µ ¿ÀÇØ´Ù. methodÀÇ ½ÇÇàÄÚµå´Â Á¾·¡ÀÇ ÇÔ¼ö¿Í µ¿ÀÏÇÑ ¾îµò°¡ ´Ù¸¥°÷(JVMÀÇ class area)¿¡ Á¸ÀçÇÏ¸ç ±× Ã¹¹øÂ° ÆÄ¶ó¹ÌÅÍ·Î °´Ã¼ÀÇ Æ÷ÀÎÅÍ this°¡ °Ç³×Áú »ÓÀÌ´Ù. <LI>¿ÀÇØ3. "±×·¸´Ù¸é °¢ instance°¡ methodÀÇ ½ÇÇàÄڵ带 Åë°·Î °®°í ÀÖÁö ¾Ê´Â °ÍÀº È®½ÇÇÏÁö¸¸, methodÀÇ ½ÇÇà ÄÚµåÀÇ Æ÷ÀÎÅÍ´Â °¢ instanceº°·Î º¸°üÇϰí Àִ°ÍÀÌ ¾Æ´Ñ°¡?" À̰ÍÀº ¾à°¡ ¾Ö¸ÅÇÑ ¿ÀÇØÀ̱ä ÇÏ´Ù. JVM ½ºÆå¿¡¼´Â class¿µ¿ª¿¡ ½ÇÇàÄڵ带 °®°í ÀÖÀ¸¸ç, method È£Ãâ½Ã º°µµÀÇ stack frameÀÌ »ý¼ºµÇ¾î ½ÇÇàµÇ°í ½ÇÇà ¿Ï·á½Ã º¹±Í ÁÖ¼Ò¸¦ Àü´ÞÇÑ´Ù. </LI></UL></DIV></DIV> <DIV> <H3><A class=con_link id=s-1.2 target=_blank name=s-1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>1.2</A> </SPAN>Àü¿ªº¯¼ö <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.2" target=_blank>#</A></H3> <DIV>static¿¡¼ public field´Â Àü¿ªº¯¼ö(global variable, ±Û·Î¹ú º¯¼ö)ÀÌ´Ù. ¿©±â¼ "±Û·Î¹ú º¯¼ö´Â ¿Ö ¾È µÇ´Â°¡"¿¡ ´ëÇØ Àá±ñ »ý°¢ÇØ º»´Ù. ¿ì¸®´Â ÈçÈ÷ "±Û·Î¹ú º¯¼ö´Â µÉ¼öÀÖ´ÂÇÑ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù"¶ó°í ÇÑ´Ù. ±× ÀÌÀ¯´Â ±Û·Î¹ú º¯¼ö´Â ¾îµð¼µç ÂüÁ¶ÇÒ ¼ö ÀÖ°í °ªÀ» º¯°æÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ ÆÄ¶ó¹ÌÅͳª ¸®ÅϰªÀ¸·Î ±³È¯ÇØ¾ß ÇÒ Á¤º¸¸¦ ±Û·Îº° º¯¼ö¸¦ °æÀ¯(»ç¿ë)ÇÏ¿© °Ç³×ÁÖ¸é ÇÔ¼öÀÇ ¿ªÇÒÀÌ ºÒºÐ¸í ÇØÁö°í È帧µµ ¾Ö¸ÅÇØ Áø´Ù. ¸¶Áö¸· ÀÌÀ¯·Î´Â "±Û·Î¹ú º¯¼ö´Â Çϳª¹Û¿¡ ¾ø´Ù"´Â °ÍÀÌ´Ù. ÀÌ´Â ¾îµð¼ À̰ªÀ» º¯°æÇß´ÂÁö ¾Ë ¼ö ¾ø°Ô ÇÏ´Â Áö¸§±æÀÌ°í ½Ç¹«¿¡¼µµ °£È¤ ¹ß»ýÇϱä ÇÏÁö¸¸, ÀÌ Çϳª¹Û¿¡ ¾ø´Â º¯¼ö°¡ ¹öÀü¾÷À¸·Î µÎ°³°¡ ÇÊ¿äÇÏ°Ô µÇ¾úÀ»¶§ È®Àåµµ ´ëÇü ÇÁ·ÎÁ§Æ®¿¡¼´Â Èûµé¾îÁø´Ù.</DIV><BR> <DIV>µû¶ó¼ static¿¡¼ publicÀº finalÀ» ºÙ¿© »ó¼ö·Î »ç¿ëÇØ¾ßÁö ±× ¿ÜÀÇ ¿ëµµ´Â ÀÚÁ¦ÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù.</DIV><BR> <DIV> <UL> <LI>(Âü°í) final ÃʱâÈ¿¡¼ÀÇ ÁÖÀÇÁ¡. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº Äڵ带 º¸¾ÒÀ»¶§ ¿ì·ÁµÇ´Â Á¡Àº ¹«¾ùÀΰ¡? </LI></UL><PRE class=wiki>public final static Color WHITE = new Color(255, 255, 255);</PRE></DIV><BR> <DIV>À§ÀÇ ÄÚµå´Â java.awt.Color¿¡¼ ¹ßÃéÇÑ °ÍÀε¥, final º¯¼ö´Â Çѹø ÃʱâÈ µÇ¸é º¯°æÀÌ ºÒ°¡´ÉÇѵ¥ object·Î ÃʱâÈ ÇÒ °æ¿ì WHITE¶ó´Â Çʵ尡 º¯°æµÉ ¼ö ¾ø´Â °ÍÀÌÁö ±×°ÍÀÌ °¡¸®Å°´Â °´Ã¼´Â ¾Æ´Ï¶ó´Â Á¡ÀÌ´Ù.</DIV><BR> <DIV>°ú°Å ½Å±Ô ¼ºñ½º °³¹ß½Ã final º¯¼ö Çʵ忡 ¼³Á¤ÆÄÀÏÀ» Àоî cacheÇÏ´Â singleton classÀÇ Æ¯Á¤ member ¸¦ ÀÌ¿ëÇÏ¿© ÃʱâÈ ÇÒ °æ¿ì ÀÌ ¸â¹ö°ªÀÌ º¯°æµÇ¸é final º¯¼öÀÇ °ªÀÌ º¯°æµÇ¾ú´Âµ¥ ÇÁ·Î±×·¥¿¡¼´Â ÀÌ»óÇÑ ÁþÀ» ÇÏ´Â ¿øÀÎÀ» ã±â°¡ »ó´çÈ÷ ¾î·Á¿ü´ø °æÇèÀ» ÇÏ°í ³ ÈÄ ºÎÅÍ ÀÌ·± ÄÚµå´Â ³¿»õ³ª´Â ÄÚµå·Î ¿©°ÜÁö°Ô µÇ¾ú´Ù.</DIV><BR> <DIV>staticÀº ±Û·Î¹úº¯¼ö¿Í µ¿ÀÏÇϹǷΠ³²¹ßÇØ¼´Â ¾ÈµÈ´Ù. staticÀ» »ç¿ëÇÒ °æ¿ì ´ÙÀ½ µÎ°¡Áö´Â ÃÖ¼ÒÇÑ ±â¾ïÇÑ´Ù.</DIV><BR> <DIV> <OL type=1> <LI>static field´Â finalÀÇ °æ¿ì¿Í ´Þ¸® Á¤¸» "Çϳª¿©µµ µÇ´ÂÁö" ¿©ºÎ¸¦ Àß »ý°¢ÇØ¾ß ÇÑ´Ù. <LI>static method´Â ÁÖÀúÇÏÁö ¸»°í ¾²µÇ ´ÙÀ½ µÎ°¡ÁöÀÇ °æ¿ì ¸Å¿ì Ȱ¿ëÀûÀÌ´Ù. <OL type=1> <LI>´Ù¸¥ ¸¹Àº Ŭ·¡½º¿¡¼ »ç¿ëÇÏ´Â Utility Method ±ºÀ» ¸¸µå´Â °æ¿ì. (ÁÖ·Î Utility ClassÀÇ method) <LI>Ŭ·¡½º ¾È¿¡¼¸¸ »ç¿ëÇÏ´Â "ÇÏû ¸Þ¼Òµå(private method)". ÀÌÀ¯¸¦ ¿¹¸¦ µé¾î ¼³¸íÇϸé, ¾Æ·¡¿Í °°Àº Á¶±ÝÀº °úÀåµÈ Ŭ·¡½º°¡ ÀÖ´Ù°í ÇÏÀÚ. </LI></OL></LI></OL><PRE class=wiki>public class T .. private int a; private int b; private int c; private int calc(){ c = a + b; return c * c; } ....other method or getter/setter...</PRE></DIV><BR> <DIV>À§ÀÇ Å¬·¡½º TÀÇ °æ¿ì ³»ºÎ¿¡¼ calc¶ó´Â instance ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µÇ¸é c ÀÇ °ªÀÌ ¸Å¹ø º¯ÇÏ°Ô µÈ´Ù. ÀÌ´Â ¹«½ÉÄÚ ÇÏ´Â ½Ç¼ö·Î Ŭ·¡½º³»¿¡¼ private method´Â ¸ðµç ¸â¹ö instance º¯¼ö¿¡ Á¢±Ù °¡´ÉÇÏ°Ô µÇ¸é¼ ¹ß»ýÇÑ´Ù. cÀÇ °ªÀÌ º¯ÇÏÁö ¾Ê±â¸¦ ¹Ù¶ö¼ö ÀÖ´Ù. À̶§ ¾ÈÀüÇÑ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ calc ÇÏû ¸Þ¼Òµå¸¦ static method·Î ¼öÁ¤ÇÏ¸é ¾ÈÀüÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>private static int calc(int a, int b){ int c = a + b; return c * c; }</PRE></DIV><BR> <DIV>¿©±â¼ a¿Í b´Â ¸â¹ö º¯¼ö¸¦ Á¢±ÙÇÒ¼ö ¾ø¾î Àü´ÞÇØ¾ßÇÑ´Ù.(static¿¡´Â this°¡ ¾ø¾î instance field¸¦ ÂüÁ¶ÇÒ ¼ö ¾ø´Ù´Â °ÍÀº ÀÌ¹Ì À§¿¡¼ ¼³¸íÇß´Ù.) ¶ÇÇÑ cµµ °°Àº ÀÌÀ¯·Î »ç¿ëÇÒ ¼ö ¾ø¾î ·ÎÄà º¯¼ö·Î ¼±¾ðÇÏ°í »ç¿ëÇϰí ÀÖ´Ù. ÀÌ·² °æ¿ì ¸Þ¼Òµå°¡ ¾à°£ Ä¿Áú¼ö ÀÖÁö¸¸ instance member º¯¼ö¸¦ ¾ÈÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. À̰ÍÀº staticÀ» ´Ù½ÃÇѹø »ý°¢ÇÏ°Ô ÇÏ´Â ÁÁÀº ¿¹°¡ µÇ¾úÀ» °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H2><A class=con_link id=s-2 target=_blank name=s-2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>2</FONT></A> </SPAN>Java´Â Pointer¾ð¾îÀÌ´Ù? (Java¿¡´Â Pointer¹Û¿¡ ¾ø´Ù?) <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-2.1 target=_blank name=s-2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.1</A> </SPAN>Java´Â primitiveÇüÀ» Á¦¿ÜÇÏ°ï ¸ðµÎ PointerÀÌ´Ù <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.1" target=_blank>#</A></H3> <DIV>"Java¿¡´Â Æ÷ÀÎÅͰ¡ ¾ø´Ù" ¶ó°í JavaÀÇ ÀåÁ¡ À̶ó°í »ý°¢ÇÏ´Â °ÍÀº ÀÔ¹®ÀÚµµ ¿Ü¿ì°í ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ºÎºÐÀº ÀǿܷΠJava¸¦ È¥¶õ½º·´°Ô ÇÏ´Â ÁÖ¹üÀ̶ó°í »ý°¢ÇÑ´Ù. Java¿¡ Æ÷ÀÎÅͰ¡ ¾ø±â´Â Ä¿³ç primitive(int, short, char, long...µî JVMÀÇ Heap¿¡ object·Î »ý¼ºµÇÁö ¾Ê´Â°Íµé)¸¦ Á¦¿ÜÇϸé "Æ÷ÀÎÅÍ ¹Û¿¡ ¾ø´Â ¾ð¾îÀÌ´Ù"¶ó´Â ¸íÁ¦°¡ ¼º¸³µÇ°Ô µÈ´Ù. »ç½Ç ¿©±â¼ Æ÷ÀÎÅͶó°í ÇÔÀº C ÀÇ ±×°Í°ú´Â Á¶±Ý ´Ù¸¥ reference(ÂüÁ¶)À̱ä ÇÏÁö¸¸...</DIV><BR> <DIV>"Áï, ÀÚ¹ÙÀÇ Å¬·¡½ºÇüÀÇ º¯¼ö´Â ¸ðµÎ Æ÷ÀÎÅÍÀÌ´Ù." <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.2 target=_blank name=s-2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.2</A> </SPAN>nullÀº °´Ã¼Àΰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.2" target=_blank>#</A></H3> <DIV>Java¿¡¼ °øÂüÁ¶(Èü¿¡ ½ÇÁ¦·Î ÂüÁ¶µÇ´Â object°¡ ¾ø´Â ÂüÁ¶)ÀÇ °æ¿ì´Â ´ç¿¬È÷ °´Ã¼°¡ ºÙ¾î ÀÖÁö ¾Ê´Ù. ±×·¯³ª, Java API ·¹ÆÛ·±½ºÀÇ NullPointerException Ç׿¡´Â ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù.</DIV><BR> <DIV>"object°¡ ÇÊ¿äÇÑ °æ¿ì applicationÀÌ nullÀ» »ç¿ëÇÏ·Á°í Çϸé throwµÈ´Ù. °¡·É ´ÙÀ½°ú °°Àº °æ¿ìÀÌ´Ù." <UL> <LI>null objectÀÇ instance method È£Ãâ <LI>null objectÀÇ field(member variables)¿¡ ´ëÇÑ ¾×¼¼½º ¶Ç´Â ±× °ªÀÇ º¯°æ <LI>nullÀÇ ±æÀ̸¦ ¹è¿Ã³·³ ÃëµæÇÒ °æ¿ì <LI>nullÀÇ slotÀ» ¹è¿Ã³·³ ¾×¼¼½º ¶Ç´Â ¼öÁ¤ <LI>nullÀ» Throwableó·³ throw ÇÒ °æ¿ì </LI></UL>À§¿¡¼ null object¶ó´Â ¸»ÀÌ µîÀåÇϴµ¥ ÀÌ´Â °øÂüÁ¶¿¡ °´Ã¼°¡ ºÙ¾î ÀÖÁö ¾ÊÀº °ÍÀÌ ¾Æ´Ï¶ó nullÀ» °¡¸®Å°´Â °´Ã¼¶ó°í º¼¼ö ÀÖ´Ù. Áï, °øÂüÁ¶¶ó´Â °ÍÀº JVM¿¡¼ ºÃÀ»¶§ ¾Æ¹«°Íµµ ÂüÁ¶ÇÏÁö ¾Ê´Â°ÍÀÌ ¾Æ´Ï¶ó nullÀ̶ó°í ÇÏ´Â object¸¦ ÂüÁ¶Çϰí Àִ°ÍÀÌ´Ù. ±×·¯³ª JSL 4.3.1¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ³ª¿ÍÀÖ´Ù.</DIV><BR> <DIV>"ÂüÁ¶°ª(reference)Àº ÀÌ·¯ÇÑ °´Ã¼ÀÇ Æ÷ÀÎÅͳª ¾î¶² °´Ã¼µµ ÂüÁ¶ÇÏÁö ¾Ê´Â Ư¼öÇÑ nullÂüÁ¶°¡ µÈ´Ù"</DIV><BR> <DIV>Áï, °øÂüÁ¶´Â ¾î¶² °´Ã¼µµ ÂüÁ¶ÇÏÁö ¾Ê´Â´Ù°í ´ÜÁ¤Çϰí ÀÖ´Ù. ÇÏÁö¸¸ '==' ¿¬»ê¿¡ ÀÖ¾î µÎ°³ÀÇ °´Ã¼°¡ ¸ðµÎ nullÀ̰ųª µ¿ÀÏÇÑ °´Ã¼ ¶Ç´Â ¹è¿ ÂüÁ¶ÀÇ °æ¿ì true¶ó°í µÇ¾îÀִ°ÍÀ¸·Î ºÁ¼ ¼·Î ´Ù¸¥ µÎ °´Ã¼°¡ µ¿ÀÏÇÑ nullÀ» ÂüÁ¶Çϰí ÀÖÀ¸¹Ç·Î true°¡ µÈ°ÍÀÌ ¾Æ´Ñ°¡ ÇÏ´Â »ý°¢À» ÇÒ ¼ö ÀÖ´Ù.</DIV><BR> <DIV>Áï, nullÀÌ ObjectÀÇ instance ÇüÅ´ ¾Æ´ÏÁö¸¸ °³³äÀûÀ¸·Î ºÃÀ»¶§ nullµµ object¶ó°í ºÁ¾ß ÇÏÁö ¾ÊÀ»±î? <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.3 target=_blank name=s-2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.3</A> </SPAN>String¿¡ ´ëÇÏ¿© <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.3" target=_blank>#</A></H3> <DIV>String Object¿¡ ´ëÇÑ »ý°¢.</DIV><BR> <DIV><PRE class=wiki>String str = "111222"; String a = "111"; String b = "222"; String c = "111"; String d = b; String t = str.substring(0,3); //111</PRE></DIV><BR> <DIV>À§ÀÇ ¼Ò½º¸¦ º¸°í ´ÙÀ½ÀÌ ÂüÀÎÁö »ý°¢ÇØ º¸ÀÚ. (==¿¬»êÀÚ´Â Æ÷ÀÎÅÍÀÇ ºñ±³ÀÌÁö °ªÀÇ ºñ±³°¡ ¾Æ´Ô)</DIV><BR> <DIV> <OL type=1> <LI>str == (a + b) ==> À̰ÍÀº µÎ°³ÀÇ ÂüÁ¶¿Í ÇϳªÀÇ ÂüÁ¶¸¦ ºñ±³ÇßÀ¸¹Ç·Î ´ç¿¬È÷ falseÀÌ´Ù. <LI>a == b ==> À̰ÍÀº ´ç¿¬È÷ false <LI>d == b ==> À̰ÍÀº µ¿ÀÏÇÑ referenceÀ̹ǷΠtrue <LI>a == t ==> a ¿Í t ´Â µÑ´Ù °ªÀÌ "111"ÀÌ´Ù. ÇÏÁö¸¸ À̰ÍÀº ¼·Î ´Ù¸¥ ÂüÁ¶¸¦ °¡Á® falseÀÌ´Ù. ±×·¸´Ù¸é ´ÙÀ½ 5¹øµµ falseÀϱî? <LI>a == c ==> À̰ÍÀº trueÀÌ´Ù. ¾Æ.. 4¹ø°ú È¥¶õ½º·´´Ù. À̰ÍÀÌ ÂüÀÎ ÀÌÀ¯´Â? ==> À̰ÍÀÇ ÇØ´äÀº JSR 3.10.5¿¡ ´ÙÀ½°ú °°ÀÌ ³ª¿Í Àֱ⠶§¹®ÀÌ´Ù. </LI></OL>"µ¿ÀÏÇÑ ³»¿ëÀÇ ¹®ÀÚ¿ ¸®ÅÍ·²¿¡ °üÇØ¼´Â ÀνºÅϽº¸¦ Çϳª¹Û¿¡ »ý¼ºÇÏÁö ¾Ê´Â´Ù."</DIV><BR> <DIV>Áï, À§ÀÇ a¿Í c ´Â '=' ¸¦ ÀÌ¿ëÇÏ¿© ¹®ÀÚ¿ ¸®ÅÍ·²À» »ý¼ºÇÏ°Ô µÇ´Âµ¥ a ¿¡¼ ÀÌ¹Ì ¸¸µé¾î ³õ¾ÒÀ¸¹Ç·Î c¿¡¼´Â ±×°ÍÀ» ÂüÁ¶ÇÑ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.4 target=_blank name=s-2.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.4</A> </SPAN>°´Ã¼ÁöÇâÀÇ Ä¸½¶È ÆÄ±« ÁÖÀÇ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.4" target=_blank>#</A></H3> <DIV>"object pointer¸¦ ¹ÝȯÇÏ´Â getter method´Â °´Ã¼ÁöÇâÀÇ Ä¸½¶È°¡ ÆÄ±«µÉ °¡´É¼ºÀÌ ÀÖ´Ù." ÀÌ´Â objectÇüÀÇ field(member variable)ÀÇ getter¿¡¼ ÀÌ object¸¦ ±×³É ¹ÝȯÇϸé ÀÌ object¸¦ ¹ÞÀºÂÊÀ̳ª ÂüÁ¶Çϰí ÀÖ´Â ´Ù¸¥ÂÊ¿¡¼ ÀÌ objectÀÇ ³»¿ëÀ» º¯°æÇÏ°Ô µÇ¹Ç·Î »ç½Ç ĸ½¶È(Àº´Ð)´Â ÀÌ·ç¾î ÁöÁö ¾Ê¾Ò´Ù°í ºÁ¾ßÇÑ´Ù.</DIV><BR> <DIV>"ÀÌ·² °æ¿ì object¸¦ clone(º¹Á¦) ÇÏ¿© ¹ÝȯÇÏÁö ¾Ê¾Æµµ µÇ´ÂÁö¸¦ ¹Ýµå½Ã »ý°¢ÇØ º»´Ù."</DIV><BR> <DIV>objectÀÇ º¹»ç¿¡´Â shallow copy¿Í deep copy°¡ ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>//(Âü°í)Member¿¡´Â µÎ°³ÀÇ field(Identity Class ÇüÀÇ ID¿Í Family Class ÇüÀÇ family)°¡ ÀÖ´Ù. /** shallow copy */ Member shallowCopy(){ Member newer = new Member(); newer.id = this.id; newer.family = this.family; return newer; } /** deep copy */ Member deepCopy(){ Member newer = new Member(); newer.id = new Idetity(this.id.getId(), this.id.getName()); newer.family = new Family(this.family.getFamilyName(), this.family.getFamilyInfo()); return newer; }</PRE></DIV><BR> <DIV>À§ ¼Ò½º¿¡¼ º¸µíÀÌ shallowCopy ´Â object¸¦ º¹»çÇÏ¿© ¹ÝȯÇÑ°Í Ã³·³ º¸ÀÌÁö¸¸, »ç½ÇÀº Member object¸¸ »õ·Î »ý¼ºµÇ¾úÀ»»Ó MemberÀÇ field´Â newer¿Í this µÑ´Ù ¼·Î°°Àº ÈüÀÇ id¿Í family¸¦ ÂüÁ¶ÇÑ´Ù. ÇÏÁö¸¸ µÎ¹øÂ° methodÀÎ deepCopyÀÇ °æ¿ì MemberÀÇ field¸¦ »õ·Î »ý¼ºÇÏ¿© º¹»çÇϹǷΠ¼·Î ´Ù¸¥ id¿Í familyÀÌ´Ù.</DIV><BR> <DIV>"Java¿¡¼´Â cloneÀ̶ó´Â method°¡ ÁغñµÇ¾î »ç¿ëµÇ´Âµ¥ ÀÌ´Â ±âº»ÀÌ shallow copyÀÓÀ» ¸í½ÉÇØ¾ß ÇÑ´Ù. deep copy¸¦ »ç¿ëÇϱâ À§Çؼ´Â clone method¸¦ overloadÇϰųª µû·Î ¸¸µé¾î Á÷Á¢ ±â¼úÇØ¾ß ÇÑ´Ù." <DIV class=indent> </DIV>(Âü°í) object¸¦ immutable(º¯ÇÏÁö ¾Ê´Â, ºÒº¯ÀÇ °´Ã¼)·Î ¸¸µå´Â ¿ä·É <OL type=1> <LI>¸ðµç field(member variable)¸¦ »ý¼ºÀÚ(constructor)¸¦ ÀÌ¿ëÇÏ¿© ÃʱâÈ ÇÑ´Ù. <LI>¸ðµç field´Â privateÀ¸·Î ¼±¾ðÇϰí, getter method´Â ¸¸µéµÇ setter´Â ±â¼úÇÏÁö ¾Ê´Â´Ù. </LI></OL>Áï, °ªÀ» º¯°æÇϱâ À§Çؼ´Â object¸¦ ´Ù½Ã ¸¸µé¾î¾ß¸¸ ÇÏ´Â ºÒÆíÀº ÀÖÁö¸¸ ¾ÈÀüÇÏ°Ô »ç¿ëÇÏ·Á ÇÒ¶§ À¯¿ëÇÏ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.5 target=_blank name=s-2.5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5</A> </SPAN>¹è¿¿¡ ´ëÇÏ¿© <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.5.1 target=_blank name=s-2.5.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.1</A> </SPAN>¹è¿Àº object Àΰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.1" target=_blank>#</A></H4> <DIV>JVM¿¡¼ ¹è¿Àº object·Î Ãë±ÞµÇ¾î object¿Í °°ÀÌ aload, astore¿Í °°ÀÌ bytecode·Î ±â¼úµÇ¾î Áø´Ù. int[] iarr = new int10; ¿¡¼ º¸´Â°Í°ú °°ÀÌ new·Î Heap ¿µ¿ª¿¡ object¸¦ »ý¼ºÇϹǷΠobjectÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-2.5.2 target=_blank name=s-2.5.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.2</A> </SPAN>¹è¿ÀÇ length´Â ¿Ö field(member variable)Àΰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.2" target=_blank>#</A></H4> <DIV>StringÀÇ ±æÀ̸¦ ±¸ÇÒ¶§´Â length()¿Í °°ÀÌ method¸¦ ÀÌ¿ëÇϴµ¥ ¹è¿Àº objectÀÓ¿¡µµ ºÒ±¸Çϰí legth¿Í °°ÀÌ Çʵå·Î µÇ¾îÀÖ´Ù. 'ÀÌ·¡µµ Java°¡ ¿ÏÀüÇÑ °´Ã¼ÁöÇâ ¾ð¾îÀΰ¡' ¶ó´Â ÀǽÉÀÌ µé°Ô ÇÑ´Ù. ±×·¸´Ù¸é length°¡ publicÀ̹ǷΠarray.length = 100; °ú °°ÀÌ ÇÏ¸é ¹è¿ Å©±â°¡ º¯°æµÇ³ª?</DIV><BR> <DIV>À̰ÍÀº ÄÄÆÄÀÏ ¿À·ù°¡ ³´Ù. length´Â finalÀÌ¶ó °ªÀ» º¯°æ ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ±×·¸´Ù¸é final field·Î ÇÑ ÀÌÀ¯´Â ¹«¾ùÀ̳Ĵ Java News Group¿¡ ã¾Æº¸¸é ´ëºÎºÐÀÌ "È¿À²À» À§Çؼ"¶ó°í µÇ¾î ÀÖ´Ù. JIT compiler¸¦ »ç¿ëÇÏÁö ¾Ê´ÂÇÑÀº methodº¸´Ù´Â field°¡ ºü¸¥°Ç ´ç¿¬ÇÑ °ÍÀÌ´Ù.</DIV><BR> <DIV>±×·±µ¥ Á¤¸» ¾Ë¼ö ¾ø´Â°ÍÀº byte code¿¡¼´Â arraylength¶ó´Â Àü¿ë¸í·ÉÀ¸·Î ÄÄÆÄÀÏ µÈ´Ù. Áï, length´Â JavaÀÇ ¹®¹ýÀÌ ¾îÂîµÇ¾úµç JVM·¹º§¿¡¼´Â field°¡ ¾Æ´Ñ°ÍÀÌ ºÐ¸íÇÏ´Ù. ±×·¸´Ù¸é È¿À²À» À§Çؼ field·Î Çß´Ù´Â °ÍÀº µµµ¥Ã¼ ¹«½¼ ¼Ò¸®Àΰ¡?</DIV><BR> <DIV>Àü¹®°¡µéÀÇ ´ë´ä¿¡´Â À̰ÍÀº JavaÀÇ ¼ö¼ö²²³¢ Áß Çϳª¶ó°í ´ë´äÇÏ´Â »ç¶÷ÀÌ ¸¹´Ù°í ÇÑ´Ù.^^;</DIV></DIV> <DIV> <H4><A class=con_link id=s-2.5.3 target=_blank name=s-2.5.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.3</A> </SPAN>final°ú ¹è¿¿¡ ´ëÇÏ¿©... <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.3" target=_blank>#</A></H4> <DIV>¿ì¸®°¡ ÈçÈñ ¾Õ¿¡¼µµ ³ª¿Â¹Ù ÀÖÁö¸¸ finalÀº °ªÀ» º¯°æÇÒ ¼ö ¾ø´Â °ÍÀ̶ó°í¸¸ »ý°¢ÇÏÁö object·Î µÇ¾î ÀÖÀ» °æ¿ì ±× object´Â º¯°æ °¡´ÉÇÏ´Ù´Â °ÍÀ» ÀذïÇÑ´Ù. ¹è¿µµ objectÀ̹ǷΠ¸¶Âù°¡Áö´Ù.</DIV><BR> <DIV>final int[] iarr = new int[5]; Àϰæ¿ì iarr = null; Àº ¿¡·¯°¡ ³ªÁö¸¸ iarr[3] = 5; ´Â ¿¡·¯°¡ ³ªÁö ¾Ê´Â´Ù. Áï, finalÀÌ ÁöÁ¤µÇ¾î Àִ°ÍÀº iarrÀÌÁö iarrÀÌ °¡¸®Å°´Â °÷ ¹è¿ÀÇ ¿ä¼Ò°¡ ¾Æ´Ñ °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-2.5.4 target=_blank name=s-2.5.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.4</A> </SPAN>"Java¿¡¼ÀÇ ´ÙÂ÷¿ø ¹è¿Àº Á¸ÀçÇÏÁö ¾Ê´Â´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.4" target=_blank>#</A></H4> <DIV>°¡·É 2Â÷¿ø ¹è¿ ó·³ º¸ÀÌ´Â int[][] iarr ¶Ç´Â int[] iarr[] Àº ÀÏÂ÷¿ø ¹è¿ µÎ°³ÀÌÁö 2Â÷¿ø Çà¿ ±¸Á¶°¡ ¾Æ´Ñ°ÍÀÌ´Ù. Áï, µÎ°³ÀÇ ¹è¿Àº °¢°¢ÀÌ ¹è¿·Î µÇ¾î ÀÖ´Â °ÍÀÌÁö Å×À̺í(Çà¿)ÇüŰ¡ ¾Æ´Ï´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-2.6 target=_blank name=s-2.6></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.6</A> </SPAN>Àμö(parameter/argument)Àü´ÞÀÇ °³³ä <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.6.1 target=_blank name=s-2.6.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.6.1</A> </SPAN>"Java¿¡¼ parameter(argument) Àü´ÞÀº ¹«Á¶°Ç 'call by value' ÀÌ´Ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.1" target=_blank>#</A></H4> <DIV>primitive typeÀÇ °æ¿ì È£ÃâÇÑ ÂÊÀÇ º¯¼ö°ªÀº È£Ãâ ¹ÞÀº method³»¿¡¼ °ªÀÌ º¯°æµÇ¾îµµ º¯°æµÇÁö ¾Ê´Â´Ù. reference typeÀÇ °æ¿ìµµ referenceµÇ´Â object¿¡ ´ëÇØ¼´Â ÇÔ²² º¯°æµÇÁö¸¸ reference pointer´Â call by valueÀÌ´Ù. object¸¦ °¡¸®Å°´Â pointer´Â call by value·Î º¯°æµÇÁö¸¸ HeapÀÇ ½ÇÁ¦ object³»¿ëÀº º¯°æµÇÁö ¾Ê´Â´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-2.6.2 target=_blank name=s-2.6.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.6.2</A> </SPAN>"C¿Í °°Àº ¾ð¾î´Â static linkingÀÌÁö¸¸, Java´Â dynamic linkingÀÌ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.2" target=_blank>#</A></H4> <DIV>µû¶ó¼ Java´Â Class ÆÄÀÏÀÌ Ã³À½¿¡ ÇѲ¨¹ø¿¡ memory¿¡ ÀÐÇôÁö´Â °ÍÀÌ ¾Æ´Ï¶ó ·±Å¸Àӽÿ¡ ±×°ÍÀÌ ÇÊ¿äÇØ Á³À»¶§ ÀÐÇôÁö°í ¸µÅ·µÈ´Ù. static fieldÀÇ ¿µ¿ªµµ Class°¡ ÀÐÇôÁö´Â ½ÃÁ¡¿¡ ºñ·Î¼ È®º¸µÈ´Ù. ÀÌ·¸°Ô µÇ¸é ÃÖÃÊ °¡µ¿½Ã°£ÀÌ ´ÜÃàµÇ°í ³¡±îÁö »ç¿ëÇÏÁö ¾Ê´Â ClassÀÇ °æ¿ì ½Å°æ¾µ Çʿ䰡 ¾ø¾îÁö°Ô µÈ´Ù.</DIV><BR> <DIV>µû¶ó¼ static field´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀ۵Ǿî ÇØ´ç Class°¡ ÇÊ¿äÇØ Á³À»¶§ JVMÀÌ ¾Ë¾Æ¼ load/link ÇØ ÁØ´Ù. Áï, static field´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â ½ÃÀÛÇÒ ¶§ºÎÅÍ ³¡³¯¶§±îÁö °è¼ÓÇØ¼ Á¸ÀçÇÏ´Â °ÍÀ̶ó°í º¸¸é µÈ´Ù. <DIV class=indent> </DIV>(Âü°í) ¸µÅ·(linking)ÀÇ ÀǹÌ</DIV><BR> <DIV>linkµÈ´Ù´Â °ÍÀº Class°¡ memory¿¡ loadingµÉ ¶§ ƯÁ¤ ¸Þ¸ð¸® ¹øÁö¿¡ loadingµÇ´Âµ¥ ÀÌ ¸Þ¸ð¸® ¹øÁö´Â loadingµÉ¶§ ¸¶´Ù ´Ù¸¥ ¹øÁö¼ö¿¡ loadingµÈ´Ù. À̶§ÀÇ ¸Þ¸ð¸® ÁÖ¼Ò°ª(Java¿¡¼´Â ½ÇÁ¦ ¸Þ¸ð¸® °ªÀÌ ¾Æ´Ò ¼ö ÀÖ´Ù)À» ÇöÀç ½ÇÇàÁßÀÎ ÇÁ·Î±×·¥¿¡¼ ¾Ë ¼ö ÀÖµµ·Ï ÇÏ¿© ÇØ´ç Class¿¡ ´ëÇÑ ÂüÁ¶°¡ °¡´ÉÇϵµ·Ï ¿¬°áÇÏ´Â °úÁ¤ÀÌ´Ù.</DIV><BR> <DIV>Á¤Àû(static) link¶ó´Â °ÍÀº ÀÌ·¯ÇÑ ¸Þ¸ð¸®¿¡ ´ëÇÑ ÁÖ¼Ò Á¤º¸¸¦ ÄÄÆÄÀÏ ½Ã¿¡ compiler°¡ ¹Ì¸® °áÁ¤ÇÏ´Â °ÍÀ̰í, µ¿Àû(dynamic) link¶ó´Â °ÍÀº ÇÁ·Î±×·¥ ¼öÇà Áß °áÁ¤µÇ´Â °ÍÀ» ÀǹÌÇÑ´Ù. Á¤ÀûÀÎ linkÀÇ °æ¿ì Á÷Á¢ÀûÀ¸·Î ¸Þ¸ð¸®ÀÇ ¹øÁö°ªÀÌ ÇÒ´ç µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó offset°ª(±âÁØÀ§Ä¡·Î ºÎÅÍÀÇ index°ª)À¸·Î ¿¬°á½ÃŲ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-2.7 target=_blank name=s-2.7></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.7</A> </SPAN>GC ¿¡ ´ëÇÏ¿© Àá±ñ! <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.7.1 target=_blank name=s-2.7.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.7.1</A> </SPAN>"Garbage CollectionÀº ¸¸´ÉÀÌ ¾Æ´Ï´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7.1" target=_blank>#</A></H4> <DIV>Java¿¡´Â free°¡ ¾ø´Ù. GC°¡ ¾Ë¾Æ¼ ÇØÁØ´Ù. ÇÏÁö¸¸ GC ¼öÇàÁß¿¡´Â ÇÁ·Î±×·¥ÀÌ ¸ØÃß´Â °Í°ú µ¿ÀÏÇÑ Áõ»óÀÌ ³ªÅ¸³ª±â ¶§¹®¿¡ GC°¡ ÀÚÁÖ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÁ·Î±×·¥ ÇØ¾ß ÇÑ´Ù. ¼ºñ½º µÇ°í ÀÖ´Â ½Ã½ºÅÛ¿¡¼µµ °¡²û ½Ã½ºÅÛÀÌ ÀÀ´äÀÌ ´Ê¾îÁö´Â ½ÃÁ¡ÀÌ Àִµ¥, ÀÌ´Â GC°¡ ¼öÇàµÇ°í ÀÖ´Â ÁßÀÌ ´ëºÎºÐÀÌ´Ù.</DIV><BR> <DIV>±×·¸´Ù¸é GC°¡ ÀÚÁÖ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇØ¾ß Çϴµ¥ °¡ÀåÁÁÀº ¹æ¹ýÀº ¹«¾ùÀϱî? ±×°ÍÀº ¹Ù·Î ºÒÇÊ¿äÇÑ °´Ã¼¸¦ »ý¼ºÇÏÁö ¾Ê´Â °ÍÀÌ ¾Æ´Ò±î?</DIV><BR> <DIV>°³ÀÎÀûÀ¸·Î Java¿¡ free°¡ ¾ø´Â°ÍÀÌ ³Ê¹«³ª µçµçÇÏ°Ô ´À²¸Áø´Ù. ÀÌÀ¯´Â µÎ°³ÀÇ º¯¼ö°¡ Heap³»ÀÇ ÇϳªÀÇ object¸¦ referenceÇϰí ÀÖÀ» °æ¿ì ½Ç¼ö·Î ÇϳªÀÇ º¯¼ö¸¸ freeÇØ ¹ö¸®¸é ³ª¸ÓÁö Çϳª´Â dangling pointer¶óÇÏ¿© reference pointer°¡ ¸ð¸£´Â »çÀ̵¥ »ç¶óÁ® ¹ö·Á °ï°æ¿¡ óÇÏ´Â °ÍÀ» ¿¹¹æÇØ Áֱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>Âü°í·Î Object class¿¡´Â finalizer¶ó´Â method°¡ ÀÖ¾î GC ¼öÇà½ÃÁ¡¿¡ È£ÃâµÇ´Â method°¡ ÀÖÁö¸¸ À̰ÍÀº GC°¡ ¾ðÁ¦ ¼öÇàµÉÁö ¾Ë ¼ö ¾øÀ¸¹Ç·Î °ú½ÅÇÏÁö ¸»¾Æ¾ß ÇÒ °ÍÀÌ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-2.8 target=_blank name=s-2.8></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.8</A> </SPAN>Java Pointer °á·Ð <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.8.1 target=_blank name=s-2.8.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.8.1</A> </SPAN>"°á±¹ Java¿¡´Â pointer°¡ ÀÖ´Â °ÍÀΰ¡, ¾ø´Â °ÍÀΰ¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8.1" target=_blank>#</A></H4> <DIV>Java´Â Heap³»ÀÇ Object¸¦ ÂüÁ¶(reference)Çϰí ÀÖ°í, ÂüÁ¶´Â °á±¹ °³³äÀÌ Æ÷ÀÎÅÍ¿Í °°Àº °ÍÀ̹ǷÎ, "Java¿¡´Â pointer°¡ ¾ø´Ù"´Â °ÍÀº ¾îºÒ¼º¼³ÀÌ´Ù.<BR>// À̺κп¡ ´ëÇØ Object¸¦ ÀÌÇØÇϽøé Á·È÷ ÀÌ·± ¹®Á¦´Â »ç¶óÁú°ÍÀ¸·Î º¾´Ï´Ù.<BR>// Ŭ·¡½º¿¡ ´ëÇÑ ÀνºÅϽº(object)µéÀº reference·Î ¹Û¿¡ °¡Áú(ÂüÁ¶µÉ)¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù.<BR>// ÄÄÆÄÀÏ·¯ ÀÔÀåÀÌ ¾Æ´Ñ ¾ð¾î ÀÚüÀÇ »ç»óÀ» °¡Áö°í ½±°Ô ÀÌÇØ½ÃŰ´Â °ÍÀÌ ÁÁÀ»°Í °°½À´Ï´Ù.</DIV><BR> <DIV>JSR 4.3.1À» º¸¸é ´ÙÀ½°ú °°Àº ¸»ÀÌ ³ª¿Â´Ù.</DIV><BR> <DIV>"ÂüÁ¶°ª(reference)Àº °´Ã¼ÀÇ pointerÀ̰ųª, ¶Ç´Â ¾î¶°ÇÑ °´Ã¼µµ ÂüÁ¶ÇÏÁö ¾Ê´Â Ư¼öÇÑ null ÂüÁ¶°¡ µÈ´Ù"</DIV><BR> <DIV>¶ÇÇÑ java.sun.comÀÇ Java programmer's FAQ¿¡ "Java´Â pointer°¡ ¾ø´Ù°í Çϴµ¥, linked list´Â ¾î¶»°Ô ¸¸µé¾î¾ß Çϳª?"¶ó´Â Áú¹®¿¡ ´ÙÀ½°ú °°ÀÌ ´äº¯ÀÌ ³ª¿ÍÀÖ´Ù.</DIV><BR> <DIV>(´äº¯) Java¿¡ °üÇÑ ¸¹Àº ¿ÀÇØÁß¿¡¼ À̰ÍÀÌ °¡Àå ½É°¢ÇÑ °ÍÀÌ´Ù. Æ÷ÀÎÅͰ¡ ¾ø±â´Â Ä¿³ç Java¿¡ ÀÖ¾î °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹ÖÀº ¿À·ÎÁö pointer¿¡ ÀÇÇØ ÇàÇØÁø´Ù. ´Ù½Ã ¸»»õ °´Ã¼´Â Ç×»ó Æ÷ÀÎÅ͸¦ °æÀ¯Çؼ¸¸ accessµÇ¸ç °áÄÚ Á÷Á¢ÀûÀ¸·Î accessµÇÁö ¾Ê´Â´Ù. pointer´Â reference(ÂüÁ¶)¶ó°í ºÒ¸®¸ç ´ç½ÅÀ» À§ÇØ ÀÚµ¿À¸·Î ÂüÁ¶µÈ´Ù.</DIV><BR> <DIV>"Java¿¡´Â pointer°¡ ¾ø°í ÁÖÀåÇÏ´Â ¸ðµç ¼Àû°ú ±ÛµéÀº JavaÀÇ reference»ç¾ç¿¡ ¸ð¼øµÈ´Ù°í ºÁ¾ß ÇÒ °ÍÀÌ´Ù."</DIV></DIV> <DIV> <H2><A class=con_link id=s-3 target=_blank name=s-3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>3</FONT></A> </SPAN>»ó¼Ó°ú interfaceÀÇ ¹®Á¦Á¡ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-3.1 target=_blank name=s-3.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1</A> </SPAN>»ó¼Ó <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-3.1.1 target=_blank name=s-3.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1.1</A> </SPAN>»ó¼Ó¿¡ ÀÖ¾î¼ÀÇ »ý¼ºÀÚ(constructor) <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.1" target=_blank>#</A></H4> <DIV>"childÀÇ default »ý¼ºÀÚ°¡ ÀÖÀ¸¸é ±× »ý¼ºÀÚ¿¡´Â parentÀÇ »ý¼ºÀÚ(super()) È£ÃâÀÌ compile½Ã ÀÚµ¿ »ðÀԵȴÙ." µû¶ó¼ super() ÀÌÀü¿¡ ´Ù¸¥ Äڵ尡 ÀÖÀ¸¸é object°¡ »ý¼ºµÇ±â ÀÌÀüÀ̹ǷΠ¿À·ù¸¦ ¹ß»ýÇÏ°Ô µÈ´Ù.</DIV></DIV> <DIV> <H4><A class=con_link id=s-3.1.2 target=_blank name=s-3.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1.2</A> </SPAN>"down cast´Â º»ÁúÀûÀ¸·Î ¸Å¿ì À§ÇèÇÏ´Ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.2" target=_blank>#</A></H4> <DIV>down cast - childÀÇ typeÀ¸·Î parent¸¦ casting - ´Â parent ÇüÅÂÀÇ typeÀÌ Á¤¸» child typeÀÎÁö compile½Ã¿¡´Â ¾Ë ¼ö ¾ø´Ù. ½ÇÇà½Ã¿¡ type check°¡ ÀÌ·ç¾î Áö¹Ç·Î runtime½Ã¿¡ ClassCastExceptionÀÌ ¹ß»ýÇÒ °¡´É¼ºÀÌ Ä¿Áø´Ù.</DIV><BR> <DIV>"ÇÁ·Î±×·¡¹Ö½Ã ¿À·ù´Â °¡´ÉÇÑÇÑ compile½Ã¿¡ ó¸®Çϴ°ÍÀÌ ÁÁ´Ù."</DIV></DIV> <DIV> <H4><A class=con_link id=s-3.1.3 target=_blank name=s-3.1.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1.3</A> </SPAN>"Ãß»óŬ·¡½º¿¡ finalÀÌ ÀÖÀ¸¸é compile errorÀÌ´Ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.3" target=_blank>#</A></H4> <DIV>abstract method°¡ Àִ Ŭ·¡½º´Â Ãß»ó Ŭ·¡½ºÀ̰í Ãß»óŬ·¡½º´Â »ó¼ÓµÇÁö ¾ÊÀ¸¸é ¾Æ¹«·± Àǹ̰¡ ¾ø±â ¶§¹®ÀÌ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-3.2 target=_blank name=s-3.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.2</A> </SPAN>interface <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-3.2.1 target=_blank name=s-3.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.2.1</A> </SPAN>"interface´Â interfaceÀÏ»Ó ´ÙÁß »ó¼ÓÀÇ ´ë¿ëǰÀÌ ¾Æ´Ï´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2.1" target=_blank>#</A></H4> <DIV>interface¸¦ method signature - Ãß»óŬ·¡½º¿Í °°ÀÌ ±¸ÇöºÎ´Â ¾øÀÌ ¼±¾ðºÎ¸¸ ÀÖ´Â method - ÀÇ ¿ëµµ·Î »ý°¢Çϴ°ÍÀÌ Java¿¡¼´Â ¿Ç´Ù. Áï, interface´Â final field¿Í abstract method°¡ Àִ Ŭ·¡½º¿Í µ¿ÀÏÇϱä ÇÏÁö¸¸ »ó¼ÓÀÇ Àǹ̿ʹ ±× ¿ëµµ°¡ ´Ù¸£´Ù. °øÅëµÈ typeÀ» Á¤ÀÇÇϴ°ÍÀ¸·Î º¸´Â°ÍÀÌ ¸Â´Â ÀǹÌÀÏ °ÍÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ interface´Â Ŭ·¡½º¸¦ ÀçÀÌ¿ëÇϱâ À§ÇØ »ó¼ÓÀ» »ç¿ëÇÏ¿© ĸ½¶ÈÀÇ ÆÄ±«¸¦ ¼ö¹ÝÇÏ´Â °ÍÀ» ¹æÁöÇÏ´Â ±â´ÉÀÌÀÖ´Ù. »ó¼ÓÀ» »ç¿ëÇÏ¸é ¸ðµÎ ±¸ÇöÈÄ ¸¶Ä¡ ¼Ò½º Äڵ尡 ¿©±âÀú±â õ Á¶°¢À» ÁÖ¿ö ¸ð¾Æ ¸¸µç '´©´õ±â'°°ÀÌ º¸ÀÌ´Â °Í¿¡ ÇѼûÀ» ½® °æÇèÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ºÎºÐÀ» interface·Î ±¸ÇöÇÏ¸é º¸´Ù ±ò²ûÇÑ Äڵ尡 ³ª¿À°Ô µÈ´Ù. ¹°·Ð public°ú protected¸¦ ÀûÀýÈ÷ Àß »ç¿ëÇØµµ µÇ±ä ÇÏÁö¸¸ ¸»ÀÌ´Ù.</DIV><BR> <DIV>ÇÏÁö¸¸ »ó¼ÓÀº ¸Þ¼Òµå ¿À¹ö¶óÀ̵åÇÑ °æ¿ì Ŭ·¡½º¸¦ ¸¶À½´ë·Î °³Á¶ÇØ ¹ö¸° ¼ÀÀÌ µÇ¹Ç·Î ¾îµð¼±°¡ ¹¦ÇÑ ¸ð¼øÀÌ ¹ß»ýÇÏ°Ô µÉ °¡´É¼ºµµ ³ô¾ÆÁú»Ó ¾Æ´Ï¶ó Ãß»óŬ·¡½ºÀÇ °æ¿ì ½ÇÁ¦ ±¸ÇöºÎ°¡ ¾îµð¿¡ À§Ä¡ÇÏ´ÂÁöµµ ¿¡¸ÅÇÏ°Ô ´À²¸Áú ¼ö ÀÖ¾î ºÒ¾ÈÇÑ Äڵ尡 µÇ°í ¸¸´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-3.3 target=_blank name=s-3.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.3</A> </SPAN>»ó¼Ó Á¦´ë·Î »ç¿ëÇϱâ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.3" target=_blank>#</A></H3> <DIV>"±×·¸´Ù¸é Á¦´ë·Î µÈ »ó¼ÓÀº ¾î¶»°Ô ÆÇ´ÜÇÒ ¼ö ÀÖÀ»±î?"</DIV><BR> <DIV>»ó¼ÓÀº 'is a'°ü°è°¡ ¼º¸³ÇØ¾ß ¿Ã¹Ù¸£´Ù. Áï '¼ºêŬ·¡½º(ÀÚ½Ä) is a ½´ÆÛŬ·¡½º(ºÎ¸ð)'°¡ ¼º¸³ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é Red is a Color´Â ¿Ã¹Ù¸¥ ¸íÁ¦ÀÌÁö¸¸ Engine is a Car´Â 'has a'°ü°èÀ̹ǷΠ»ó¼ÓÀ̶ó°í º¼ ¼ö ¾ø´Ù. <DIV class=indent> </DIV>"µû¶ó¼ 'has a'°ü°è´Â »ó¼ÓÀÌ ¾Æ´Ï¹Ç·Î composition°ú delegationÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù."</DIV><BR> <DIV>compositionÀº '°´Ã¼¸¦ field°¡ °®°Ô ÇÏ´Â ¹æ¹ý'À» ÀÇÇϹǷΠ'has a'°ü°è°¡ Á¤È®È÷ ¼º¸³ÇÑ´Ù. <DIV class=indent> </DIV>"»ó¼Ó ´ë½Å composition°ú delegation(Á¶ÀÛÀ̳ª 󸮸¦ ´Ù¸¥ °´Ã¼¿¡ À§ÀÓ)À» »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀÌÁ¡ÀÌ ÀÖ´Ù."</DIV><BR> <DIV> <OL type=1> <LI>»ó¼Ó¿¡¼´Â ½´ÆÛŬ·¡½º°¡ Çã¿ëÇϰí ÀÖ´Â Á¶ÀÛÀ» ¼ºêŬ·¡½º¿¡¼ ¸ðµÎ Çã¿ëÇØ¾ß ÇÏÁö¸¸, composition°ú delegation¿¡¼´Â Á¶ÀÛÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. <LI>Ŭ·¡½º´Â °áÄÚ º¯°æÇÒ ¼ö ¾øÁö¸¸, compositionÇϰí ÀÖ´Â °´Ã¼´Â ÀÚÀ¯·Ó°Ô º¯°æÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é Çлý Ŭ·¡½º°¡ ¿µ¿øÀÌ ÇлýÀÌ ¾Æ´Ï¶ó ³ªÁß¿¡ ÃëÁ÷À» ÇÏ¿© Á÷ÀåÀΠŬ·¡½º°¡ µÉ¼ö ÀÖ´Ù. <DIV class=indent> </DIV></LI></OL>»ó¼ÓÀ» composition°ú delegationÀ¸·Î º¯°æÇÏ´Â ¿ä·ÉÀº? ¿©±â¼ Shape¸¦ »ó¼ÓÇÑ Polyline°ú CircleÀ» º¯°æÇÑ´Ù¸é ´ÙÀ½°ú °°´Ù. <OL type=1> <LI>Shape(ºÎ¸ð)ÀÇ °øÅëµÈ ³»¿ëÀ» ±¸ÇöÇÑ ±¸Çö Ŭ·¡½º(ShapeImpl)¸¦ ¸¸µç´Ù. <LI>Polyline°ú Circle Ŭ·¡½º¿¡¼ ShapeImplÀ» compositionÇÏ°í ºÎ¸ð¿Í °øÅëµÇÁö ¾Ê´Â method¸¦ °¢°¢ À§ÀÓ ¹Þ´Â´Ù. <LI>ShapeImpl Ŭ·¡½ºÀÇ method¸¦ ÃßÃâÇÑ ShapeIF interface¸¦ ÀÛ¼ºÇϰí Polyline°ú Circle¿¡¼´Â implements ÇÑ´Ù. </LI></OL></DIV></DIV> <DIV> <H2><A class=con_link id=s-4 target=_blank name=s-4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>4</FONT></A> </SPAN>package¿Í access Á¦¾î¿¡ °üÇÑ ÀÌÇØ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-4.1 target=_blank name=s-4.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.1</A> </SPAN>package <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-4.1.1 target=_blank name=s-4.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.1.1</A> </SPAN>"package´Â '°èÃþ±¸Á¶' Àΰ¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.1" target=_blank>#</A></H4> <DIV>óÀ½ Java¸¦ Á¢ÇÏ¸é¼ package¿¡ ´ëÇØ ÀÌÇØÇÒ¶§ ¸¶Ä¡ ÆÄÀϽýºÅÛ°ú °°Àº °èÃþ±¸Á¶¶ó°í ÀÌÇØÇÏ°Ô µÇ¾î ' import /test/*.class '´Â ¿Ö ¾ÈµÇ´ÂÁö ÀǾÆÇØ Çß´ø ±â¾ïÀÌ ÀÖ´Ù. ±×¸®°í ºÎ¸ð directory¿¡ Àִ Ŭ·¡½º¿¡¼ ¿Ö ÀÚ½Ä directory¿¡ ÀÖ´Â Class¸¦ import¾øÀÌ »ç¿ëÇÒ ¼ö ¾ø´ÂÁöµµ ÀÌ»óÇß´Ù.</DIV><BR> <DIV>Áï, package¿¡¼ µ¿ÀÏ ºÎ¸ð¶óµµ ¼·Î ´Ù¸¥ package´Â ¿ÏÀüÈ÷ º°°³ÀÇ package¿´´ø °ÍÀÌ´Ù. ÀÌ ºÎºÐ¿¡ °üÇØ¼´Â JLS 7.1 ¿¡¼ ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù°í ÇÑ´Ù.</DIV><BR> <DIV>"package°¡ °èÃþÀûÀÎ À̸§ ±¸Á¶·Î µÇ¾î ÀÖ´Â °ÍÀº °ü·ÃµÈ package¸¦ ÀÏÁ¤ ±Ô¾à¿¡ µû¶ó ü°èÈÇϱâ À§ÇؼÀ̰í, package ¾È¿¡¼ ¼±¾ðµÇ¾î ÀÖ´Â top-levelÇü°ú µ¿ÀÏÇÑ À̸§À» °¡Áø ¼ºê package¸¦ °®´Â °ÍÀÌ ±ÝÁöµÇ¾î ÀÖ´Â Á¡À» Á¦¿ÜÇÏ¸é Æ¯º°ÇÑ Àǹ̴ ¾ø´Ù."</DIV><BR> <DIV>Áï, Java¿¡¼´Â packageÀ̸§À» °èÃþÀûÀ¸·Î ¸í¸íÇÒ ¼ö ÀÖÀ»»Ó package±¸Á¶ ÀÚü¿¡´Â ¾î¶² °èÃþÀûÀÎ ÀÇ¹Ì ºÎ¿©µµ ÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù. ´Ù½Ã ¸»Çؼ Java¿¡¼´Â packageÀ̸ªÀ» °èÃþÀûÀ¸·Î ¸í¸íÇÒ ¼ö ÀÖÀ» »Ó ±¸Á¶ÀÚü´Â ÆòÆòÇÑ °ÍÀÌ´Ù. ½ÇÁ¦·Î ¹ÙÀÌÆ® ÄÚµåÀÇ ³»¿ëÀ» º¸¸é ±ú¾îÁø ³»¿ëÁß¿¡ java/lang/String°ú °°ÀÌ ¿ÏÀüÇÑ ÇÑÁ¤À̸§À» classÀ̸§À¸·Î »ç¿ëµÊÀ» ¾Ë ¼ö ÀÖ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-4.1.2 target=_blank name=s-4.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.1.2</A> </SPAN>"compiler °¡ ÀνÄÇÏ´Â class°Ë»ö ¼ø¼(¼Ò½ºÄڵ峻 Ŭ·¡½º°¡ ¹ß°ßµÉ °æ¿ì ±× Ŭ·¡½ºÀÇ À§Ä¡¸¦ ã´Â ¼ø¼)" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.2" target=_blank>#</A></H4> <DIV> <OL type=1> <LI>±× classÀڽŠ<LI>´ÜÀÏÇü½ÄÀ¸·Î ÀÓÆ÷Æ®µÈ class <LI>µ¿ÀÏÇÑ ÆÐŰÁö¿¡ Á¸ÀçÇÏ´Â ´Ù¸¥ class <LI>¿Âµð¸àµå Çü½Ä(..* ÇüÅÂ) ÀÓÆ÷Æ® ¼±¾ðµÈ class </LI></OL></DIV></DIV> <DIV> <H3><A class=con_link id=s-4.2 target=_blank name=s-4.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.2</A> </SPAN>access Á¦¾î <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2" target=_blank>#</A></H3> <DIV>publicÀº ´Ù¸¥ package¿¡¼ ÂüÁ¶ °¡´ÉÇϰí, ¹«ÁöÁ¤ÇÒ °æ¿ì µ¿ÀÏÇÑ package³»¿¡¼¸¸ ÂüÁ¶ °¡´ÉÇÏ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-4.2.1 target=_blank name=s-4.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.2.1</A> </SPAN>"interfacde memberÀÇ access Á¦¾î" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.1" target=_blank>#</A></H4> <DIV>interfaceÀÇ member field/method´Â ¸ðµÎ publicÀÌ´Ù. interface member¿¡ protected³ª privateÀ» ÁöÁ¤ÇÒ ¼ö´Â ¾ø´Ù. ¶ÇÇÑ publicÀ» ÁöÁ¤ÇÒ Çʿ䵵 ¾ø´Ù. ÁöÁ¤Çصµ »ó°ü¾øÁö¸¸ JLS 9.4¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ¸í½ÃµÇ¾î ÀÖ´Ù.</DIV><BR> <DIV>"interfaceÀÇ method¿¡ ´ëÇÏ¿© public ¼ö½ÄÀÚ¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ Çã¿ëµÇ°í ÀÖÁö¸¸, style·Î¼´Â ÀüÇô ±ÇÀåÇÒ ¼ö ¾ø´Ù."</DIV><BR> <DIV>Áï, interface member´Â ¸ðµÎ publicÀ̶ó µÇ¾î ÀÖ´Â °ÍÀÌ´Ù. ¶ÇÇÑ James Goslingµµ ÁýÇÊ¿¡ Âü°¡ÇÑ 'ÇÁ·Î±×·¡¹Ö ¾ð¾î Java 3ÆÇ'¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù°í ÇÑ´Ù.</DIV><BR> <DIV>"publicÀÌ ¾Æ´Ñ member¸¦ interface¿¡°Ô °®°Ô ÇÏ´Â °ÍÀº ¾Æ¹«·± Àǹ̰¡ ¾ø´Ù. interfaceÀÇ member¿¡ ´ëÇÑ accessÁ¦¾î¿¡ interface ÀÚ½ÅÀÇ access Á¦ÇÑÀ» Àû¿ëÇÏ´Â °ÍÀ̹ǷΠÀ̰ÍÀº ¾Æ¹«·± Àǹ̰¡ ¾ø´Ù."</DIV></DIV> <DIV> <H4><A class=con_link id=s-4.2.2 target=_blank name=s-4.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.2.2</A> </SPAN>±×·¸´Ù¸é interface¸¦ ´Ù¸¥ package¿¡ ´ëÇÏ¿© ¼û±â°í ½ÍÀ¸¸é ¾î¶»°Ô Çϴ°¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.2" target=_blank>#</A></H4> <DIV>±×°ÍÀº interface ÀÚü ¼±¾ð¿¡ publicÀÌ ¾Æ´Ñ °ÍÀ» Àû¿ëÇÏ¸é µÇ´Â °ÍÀÌ´Ù. memberº°·Î Á¦¾îÇÒ ¼ö ¾ø¾î ºÒÆíÇÑ ¸éµµ ÀÖÁö¸¸, ³ª¸§´ë·Î ±×·² µíÇÑ ±ÔÄ¢ÀÌ´Ù. ÇÏÁö¸¸ À̰ÍÀº Á¤¸» ÀÌ»óÇÑ ³í¸®°¡ ¾Æ´Ò¼ö ¾ø´Ù. publicÀÌ ¾Æ´Ñ interface¿¡ public method°¡ ¹«½¼ Àǹ̰¡ ÀÖ´ÂÁö ¾Ë ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ÀÌ interface¸¦ ±¸ÇöÇÑ Å¬·¡½º¿¡¼µµ method´Â ¸ðµÎ publicÀÌ µÇ¾î¾ß Çϴµ¥, À̰͵µ ¾Æ¹«·¡µµ ÀÌ»óÇÏ´Ù.</DIV></DIV> <DIV> <H2><A class=con_link id=s-5 target=_blank name=s-5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>5</FONT></A> </SPAN>±âŸ Java ±â´É <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-5.1 target=_blank name=s-5.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1</A> </SPAN>Thread <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-5.1.1 target=_blank name=s-5.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.1</A> </SPAN>"Multi Thread¿¡¼´Â È帧Àº º¹¼öÀÌÁö¸¸ data´Â °øÀ¯µÉ ¼ö ÀÖ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.1" target=_blank>#</A></H4> <DIV>Multi processing¿¡¼´Â È帧Àº º¹¼öÀÌÁö¸¸ data´Â µ¶¸³µÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ Multi Thread¿¡¼´Â Heap°ú static¿µ¿ª¿¡ °üÇÑ ÇÑ 2°³ ÀÌ»óÀÇ Thread »çÀÌ¿¡ °øÀ¯°¡ ÀÌ·ç¾î Áø´Ù. µû¶ó¼ 2°³ ÀÌ»óÀÇ Thread¿¡¼´Â µ¿ÀÏÇÑ static field¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ°í, µ¿ÀÏÇÑ °´Ã¼¿¡ Á¢±ÙÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª stack¸¸Àº Threadº°·Î µ¶¸³µÇ¾î ÀÖ´Ù. stackÀº method¿¡ µé¾î°¡´Â ½ÃÁ¡¿¡ È®º¸µÇ°í ºüÁ® ³ª¿À´Â ½ÃÁ¡¿¡ È®º¸µÇ°í ºüÁ® ³ª¿À´Â ½ÃÁ¡¿¡ Free µÇ¹Ç·Î 2°³ ÀÌ»óÀÇ Thread¿¡¼ °øÀ¯ÇÒ ¼ö´Â ¾ø´Â °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.1.2 target=_blank name=s-5.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.2</A> </SPAN>"Thread´Â °´Ã¼¿Í Á÷±³ÇÏ´Â °³³äÀÌ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.2" target=_blank>#</A></H4> <DIV>Multi Thread´Â ¾îµð±îÁö³ª Thread¶ó´Â ó¸® È帧ÀÌ ¿©·¯ °³ Á¸ÀçÇÒ ¼ö ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. ¿ä¾àÇÏ¸é ´ÙÀ½ 3°¡Áö ÀÌ´Ù. <OL type=1> <LI>Multi Thread¿¡¼´Â Thread¶ó´Â ó¸® È帧ÀÌ 2°³ ÀÌ»ó Á¸ÀçÇÒ ¼ö ÀÖ´Ù. <LI>¾î¶² Thread¿¡¼ ¿òÁ÷À̱⠽ÃÀÛÇÑ method°¡ ´Ù¸¥ method¸¦ È£Ãâ ÇßÀ»¶§ È£ÃâµÈ ÃøÀÇ method´Â È£ÃâÇÑ ÃøÀÇ method¿Í µ¿ÀÏÇÑ Thread¿¡¼ µ¿ÀÛÇÑ´Ù. <LI>ThreadÀÇ °æ°è¿Í °´Ã¼ÀÇ °æ°è´Â ÀüÇô °ü°è°¡ ¾ø´Ù. Áï, Thread¿Í °´Ã¼´Â Á÷±³Çϰí ÀÖ´Ù. <DIV class=indent> </DIV></LI></OL></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.1.3 target=_blank name=s-5.1.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.3</A> </SPAN>"Synchronized ÀÇ ÀÌÇØ" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.3" target=_blank>#</A></H4> <DIV>Multi Thread ±â¹ÝÀÇ programming½Ã¿¡ synchronized¸¦ ³õÃÄ ÀÚÁÖ´Â ÀϾÁö ¾ÊÀ¸³ª ¹º°¡ À߸øµÇ¾î °¡´Â°ÍÀ» °æÇèÇÑ ÀûÀÌ ÀÖ´Ù. Áï, À̰ÍÀÌ ¿øÀÎÀÌ µÇ¾î ¹ö±×°¡ ¹ß»ýÇÑ °æ¿ì ±× ¹ö±×´Â ÀçÇö¼ºÀÌ Áö±ØÈ÷ ³·¾ÆÁö±â ¶§¹®¿¡ ²Ï °í»ýÀ» ÇÏ°Ô µÈ´Ù. ÀÌ·± »çŰ¡ ¹ß»ýÇÏ°Ô µÇ¸é ¹ö±×ÀÇ ¿øÀÎÀ» ã±â°¡ ¾î·Æ°Ô µÇ°í ÇØ´ç applicationÀº ¾ðÁ¦ ¹ß»ýÇÒÁöµµ ¸ð¸£´Â ¿À·ù°¡ ÀÖ´Â »óÅ ±×´ë·Î ¿î¿µµÇ±â ¶§¹®¿¡ ½É°¢¼ºÀÌ ³»Æ÷µÇ¾î ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Ù.</DIV><BR> <DIV>ÀÌ·¯ÇÑ »çŸ¦ ¹æÁöÇϱâ À§Çؼ´Â critical sectionÀ» 2°³ ÀÌ»óÀÇ Thread°¡ µ¿½Ã¿¡ ½ÇÇàµÇÁö ¾Êµµ·Ï '¹èŸ Á¦¾î'¸¦ ÇØ¾ßÇÑ´Ù. ±× Ű¿öµå°¡ ¹Ù·Î synchronizedÀÌ´Ù.</DIV><BR> <DIV>synchronized¿¡´Â synchronized(obj){} ÇüÅÂ¿Í method¿¡ synchronized ¸¦ ºÙÀÌ´Â µÎ°¡Áö ¹æ¹ýÀÌ Àִµ¥, ÀÌ µÑÀº ¹üÀ§¸¸ °°´Ù¸é °°Àº ÀǹÌÀÌ´Ù. ¿¹¸¦ µé¾î ¼³¸íÇϸé, ¾Æ·¡ÀÇ ¼Ò½º¿¡¼ method1()°ú method2()´Â µ¿ÀÏÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>synchronized void method1(){ ... } void method2(){ synchronized(this){ ... } }</PRE></DIV><BR> <DIV>ÀÌ·¸°Ô µ¿ÀÏÇÑ Àǹ̸¦ µÎ°¡Áö·Î ¸¸µç°ÍÀº method´ÜÀ§·Î synchronized¸¦ °É ÀÏÀÌ ±×¸¸Å ¸¹´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¸¹ÀÌµé ¿ÀÇØÇϰí ÀÖ´Â ºÎºÐÀÌ À§ÀÇ ¼Ò½º¿¡¼ ¾Ë¼ö ÀÖµíÀÌ method¿¡ synchronized¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀº '±× °´Ã¼¿¡ ÇØÇÑ Á¶ÀÛÀº µ¿½Ã¿¡ ÇϳªÀÇ Thread¶ó´Â °ÍÀÌÁö method È£ÃâÀÌ ÇϳªÀÇ Thread°¡ ¾Æ´Ñ°ÍÀÌ´Ù'</DIV><BR> <DIV>±×·¸´Ù¸é, Thread A°¡ objÀÇ LockÀ» ¼³Á¤Çϰí ÀÖ´Â »óÅ¿¡¼ ´Ù½Ã Çѹø Thread A ÀÚ½ÅÀÌ objÀÇ LockÀ» ¼³Á¤ÇÏ¸é ¾î¶»°Ô µÉ±î? ÀÌ °æ¿ì Thread A´Â ÀÌ¹Ì ÀÌ obj¿¡ ´ëÇÏ¿© LockÀ» º¸À¯Çϰí ÀÖÀ¸¹Ç·Î ±â´Ù¸®Áö´Â ¾Ê¾Æµµ µÈ´Ù. À§ÀÇ ¼Ò½º¿¡¼ method1¿¡¼ method2¸¦ È£ÃâÇÑ´Ù¸é?</DIV><BR> <DIV>method1¿¡¼ ÀÌ¹Ì objÀÇ LockÀ» º¸À¯ ÇßÀ¸¹Ç·Î method2ÀÇ synchronized(this) ºÎºÐ¿¡¼´Â LockÀ» ±â´Ù¸®Áö ¾Ê¾Æµµ µÈ´Ù.</DIV><BR> <DIV>Áï, LockÀÇ ±âÁØÀÌ Æ¯Á¤Thread¿¡ ÀÖ¾î¼ LockÀÇ ±âÁØÀÌ method°¡ ¾Æ´Ñ objectÀÎ °ÍÀÌ´Ù. ÀÌ ±ÔÄ¢ ´öºÐ¿¡ synchronized methodµµ Àç±ÍÈ£ÃâÀÌ °¡´ÉÇØÁö°í, synchronized method°¡ µ¿ÀÏÇÑ instanceÀÇ synchronized method¸¦ È£ÃâÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù.</DIV><BR> <DIV>ÁÖÀÇÇÒ Á¡Àº static method¿¡ synchronized°¡ ÀÖ´Ù¸é staticÀº thisÂüÁ¶°¡ ¾ø´Ù°í À§¿¡¼ ¼³¸íÇÏ¿´À¸¹Ç·Î, ÀÌ Å¬·¡½ºÀÇ Class °´Ã¼¸¦ LockÇÏ°Ô µÈ´Ù. ±âÁØÀÌ xx.Class°¡ µÇ´Â °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.1.4 target=_blank name=s-5.1.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.4</A> </SPAN>"Thread »ç¿ë¹ýÀÇ Á¤¼®Àº?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.4" target=_blank>#</A></H4> <DIV>Thread »ç¿ë¹ý¿¡´Â ´ÙÀ½ µÎ°¡ÁöÀÇ Á¤¼®ÀÌ ÀÖ´Ù. <OL type=1> <LI>RunnableÀ» implementsÇϰí ThreadÀÇ ÂüÁ¶¸¦ º¸À¯(composition) ÇÏ´Â ¹æ¹ý. À̰æ¿ì´Â ´ÜÁö Runnable¸¸ implementÇÔÀ¸·Î¼ ÇØ°áµÇ´Â °æ¿ì°¡ ´ëºÎºÐÀ̱ä ÇÏÁö¸¸, ±× class ³»¿¡¼ ÇØ´ç classÀÇ Thread¸¦ Á¶ÀÛÇÏ°Ô µÈ´Ù¸é compositionÇÑ Thread °´Ã¼¿¡ delegationÇÏ¸é µÈ±â ¶§¹®ÀÌ´Ù. <LI>Thread class¸¦ »ó¼ÓÇÏ´Â ¹æ¹ý. JDKÀÇ ¼Ò½º¸¦ º¸¸é Thread class¿¡´Â RunnableÀ» implements Çϰí ÀÖ´Ù. ±×¸®°í run method´Â native methodÀÌ´Ù. µû¶ó¼ Thread¸¦ »ó¼ÓÇÑ ¸ðµç Ŭ·¡½º´Â »ç½Ç RunnableÀ» implementsÇϰí ÀÖ´Â °ÍÀÌ´Ù. run method´Â abstract°¡ ¾Æ´Ï¹Ç·Î ±¸ÇöµÇ¾î ÀÖ°í ¿ì¸®´Â À̸¦ ¿À¹ö¶óÀ̵åÇÏ¿© »ç¿ëÇϰí ÀÖ´Ù. ÀÌ ¹æ½ÄÀ» »ç¿ëÇϸé ThreadÀÇ method¸¦ ¾ÈÆÅÀ¸·Î ÀÚÀ¯·Ó°Ô È£ÃâÇÒ ¼ö ÀÌÁö¸¸, ÀÌ¹Ì ´Ù¸¥ class¸¦ »ó¼ÓÇϰí ÀÖ´Ù¸é ÀÌ ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö´Â ¾ø´Ù. <DIV class=indent> </DIV></LI></OL>JDK API ReferenceÀÇ Runnable¿¡ °úÇÑ ¼³¸íÁß¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀÌ ÀÖ´Ù.</DIV><BR> <DIV>"Thread classÀÇ methodÁß run method¸¸À» ¿À¹ö¶óÀ̵åÇÏ¿© »ç¿ëÇÏ´Â °æ¿ì´Â Runnable interface¸¸ implementsÇÏ¿© »ç¿ëÇÏ¸é µÈ´Ù. ¿Ö³ÄÇϸé, classÀÇ ±âº»ÀûÀÎ µ¿ÀÛÀ» ¼öÁ¤ ¶Ç´Â È®ÀåÇÏÁö ¾Ê´ÂÇÑ ±× class¸¦ sub classÈ ÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù."</DIV><BR> <DIV>±×·¸´Ù¸é À§¿¡¼ ¾ðÁ¦³ª 1)¹ø ¹æ½ÄÀ» »ç¿ëÇÏ¸é µÇ´Â °Í ¾Æ´Ñ°¡ ¶ó´Â Àǹ®ÀÌ »ý±â°Ô µÈ´Ù. ¿Ö ±ÍÂú°Ô 2)ÀÇ ¹æ¹ýÀ» °í¹ÎÇÏ´Â °ÍÀΰ¡, ±Ø´ÜÀûÀ̱ä ÇÏÁö¸¸ ¸¸ÀÏ¿¡ »çÅ¿¡ ÀÌ Å¬·¡½º°¡ ´Ù¸¥ Ŭ·¡½º¸¦ »ó¼Ó¹Þ°Ô µÇ´Â °æ¿ìµµ ÀÖÀ»¼ö Àִµ¥.</DIV><BR> <DIV>ÇÏÁö¸¸ À̰ÍÀº ¾Æ´Ò°ÍÀÌ´Ù. ¸¸¾à ÀÌ·¸´Ù¸é Thread class°¡ RunnableÀ» implementsÇÒ Çʿ䰡 ¾ø¾úÀ» °ÍÀ̱⠶§¹®ÀÌ´Ù. ¶ÇÇÑ Thread´Â »ý¼ºÀÚÀÇ Àμö·Î RunnableÀÇ reference¸¦ ÃëµæÇÑ ÈÄ °è¼ÓÇØ¼ ±×°ÍÀ» º¸À¯ÇÑ´Ù´Â °Íµµ ÀÌ»óÇÏ´Ù. Thread¿¡ ÀÖ¾î RunnableÀÌ ÇÊ¿äÇÑ °ÍÀº start() ¶§ »ÓÀ̹ǷΠstart()ÀÇ Àμö·Î RunnableÀ» °Ç³×Á൵ ÁÁÀ» °ÍÀÌ´Ù.</DIV><BR> <DIV>±×·³¿¡µµ ºÒ±¸ÇÏ°í ±»ÀÌ Thread¿¡¼ °è¼ÓÀûÀ¸·Î RunnableÀ» º¸À¯Çϰí ÀÖ´Â °ÍÀº Runnable°´Ã¼¿Í Thread¸¦ °ÇÏ°Ô °áÇÕ½ÃŰ·Á´Â Àǵµ ¶§¹®ÀÌ´Ù. À̰ÍÀº ÀǵµÀûÀ¸·Î À§ÀÇ 2)ÀÇ ¹æ¹ýÀ» ±ÇÀåÇÏ´Â µíÇÑ ´À³¦À» ¹Þ°Ô Çϴµí ÇÏ´Ù.</DIV><BR> <DIV>±×·¸´Ù¸é API ReferenceÀÇ ¸»Àº ´ÜÁö »ó¼ÓÀ» ÇÇÇ϶ó´Â Àǹ̸¸ ÀÖ´Â °ÍÀΰ¡? ¸¶Áö¸·À¸·Î ÇѰ¡Áö ÃßÁ¤ÀÌ µÇ´Â ºÎºÐÀº Thread¿¡´Â suspend()³ª stop()µî°ú °°Àº method°¡ ÇöÀç ¸ðµÎ deprecateµÇ¾ú´Ù. ¶ÇÇÑ sleep()À̳ª yield()´Â ¸ðµÎ static methodÀ̹ǷΠ±»ÀÌ Thread °´Ã¼¸¦ º¸À¯ÇÒ Çʿ䰡 ¾ø´Ù.</DIV><BR> <DIV>±×·¸´Ù¸é À§ÀÇ 1)ÀÇ ¹æ¹ý¿¡¼ Thread°´Ã¼¸¦ compositionÇÒ Çʿ䰡 ¾ø¾îÁø´Ù.</DIV><BR> <DIV>"±×·¸´Ù¸é Thread¸¦ ¾Æ¹«µµ º¸À¯ÇÏÁö ¾Ê°í Runnable¸¸ implementsÇÑ ¹æ½ÄÀÌ ÃÖ¼±Àΰ¡?"</DIV><BR> <DIV>¹«¾ùÀÌ Á¤´äÀÎÁö µµ¹«Áö ¾Ë±æÀÌ ¾ø´Ù. ^^; <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-5.2 target=_blank name=s-5.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2</A> </SPAN>Exception <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-5.2.1 target=_blank name=s-5.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.1</A> </SPAN>"finally ÀýÀº ¹Ýµå½Ã ¾î¶°ÇÑ °æ¿ì¿¡µµ ½ÇÇàµÇ´Â°¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.1" target=_blank>#</A></H4> <DIV>try ~ catch ¹®ÀÇ finally ÀýÀº 'loop¶ó¸é break, method¶ó¸é return Àý'À» ¸¸³ªµµ µÚ¿¡ ÀÖ´Â finallyÀýÀº ¼öÇàµÈ´Ù. ÇÏÁö¸¸ ´ÙÀ½ÀÇ °æ¿ì´Â ±×·¸Áö ¾Ê´Ù.</DIV><BR> <DIV><PRE class=wiki>try{ ... System.exit(1); }catch(...){ }finally{ ... //ÀÌ ºÎºÐÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù. }</PRE> <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.2.2 target=_blank name=s-5.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2</A> </SPAN>"¿¹¿ÜÀÇ Á¾·ù 3°¡Áö (Error, RuntimeException, ±×¹ÛÀÇ Exception)" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2" target=_blank>#</A></H4></DIV> <DIV> <H5><A class=con_link id=s-5.2.2.1 target=_blank name=s-5.2.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2.1</A> </SPAN>Error <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.1" target=_blank>#</A></H5> <DIV>ÀÌ¿¡ °üÇØ¼± JLS 11.2.1¿¡ ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù. "üũµÇÁö ¾Ê´Â ¿¹¿Ü Ŭ·¡½º(Error¿Í ±× Sub class)´Â ÇÁ·Î±×·¥¾ÈÀÇ ´Ù¾çÇÑ À§Ä¡¿¡¼ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖÀ¸¸ç, ȸº¹ÀÌ ºÒ°¡´ÉÇϱ⠶§¹®¿¡ ÄÄÆÄÀϽà üũµÇÁö ¾Ê´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¿¹¿Ü¸¦ ÇÁ·Î±×·¥¿¡¼ ¼±¾ðÇÑ´Ù°í ÇØµµ ³ÀâÇÏ°í ¹«ÀǹÌÇÑ °ÍÀÌ µÉ »ÓÀÌ´Ù."</DIV><BR> <DIV>JavaÀÇ Å¬·¡½º librury¿¡¼ ErrorÀÇ sub class¸¦ »ìÆìºÁµµ AWTError, LinkageError, ThreadDeath, VirtualMachineError µî 'catchÇØµµ ¼Ò¿ë ¾øÀ» °Í' µé »ÓÀÌ´Ù. (OutOfMemoryError´Â VirtualMachineError ¾Æ·¡¿¡ À§Ä¡ÇÑ´Ù.) <DIV class=indent> </DIV></DIV></DIV> <DIV> <H5><A class=con_link id=s-5.2.2.2 target=_blank name=s-5.2.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2.2</A> </SPAN>RuntimeException <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.2" target=_blank>#</A></H5> <DIV>À§ÀÇ Error ÀÌ¿ÜÀÇ ExceptionµéÀº application¿¡¼ catchÇÒ °¡´É¼ºÀÌ ÀÖ´Â ¿¹¿ÜµéÀÌ´Ù.(¹ö±×°¡ ¾øÀ¸¸é ¹ß»ýÇÏÁö ¾Ê´Â ¿¹¿Üµé) ±×¸®°í RuntimeExceptionÀº '¾îµð¼µç ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ´Â ¿¹¿Ü'ÀÌ´Ù. RuntimeExceptionÀÇ sub class·Î´Â NullPointerException, ArrayIndexOutOfBoundException, ClassCastException µîÀ» µé ¼ö ÀÖ´Ù. 'ÀÌ·¯ÇÑ ¿¹¿Ü´Â ¹ö±×°¡ ¾ø´Â ÇÑ ¹ß»ýÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÏÀÏÀÌ throws ¸¦ ÀÛ¼ºÇÏÁö ¾Ê¾Æµµ µÈ´Ù.'</DIV><BR> <DIV>ÇÁ·Î±×·¥¿¡ ¹ö±×°¡ ¾ø´Â ÇÑ ¹ß»ýÇÒ ¼ö ¾ø´Â ¿¹¿Ü°¡ ¹ß»ýÇÑ °æ¿ì C ¾ð¾î¿Í °°ÀÌ ¿µ¿ª ÆÄ±«°¡ ÀϾ±â ½¬¿î ¾ð¾î¶ó¸é ÇÁ·Î±×·¥ Àüü¸¦ Á¾·á½ÃŰ´Â °ÍÀÌ Á¤´äÀ̰ÚÁö¸¸, Java¿Í °°ÀÌ ¿µ¿ªÆÄ±«°¡ ÀϾÁö ¾Êµµ·Ï ½ÇÇà½Ã üũ(JVM ClassloaderÀÇ formal verification process)¸¦ ÇÏ°í µ¿ÀûÀ¸·Î ÇÁ·Î±×·¥À» loadÇÏ´Â ¾ð¾î¿¡¼´Â ±¹¼ÒÀûÀÎ NullPointerException ¶§¹®¿¡ ÇÁ·Î±×·¥ Àüü¸¦ ÁßÁö½ÃÄѼ´Â ¾È µÉ °ÍÀÌ´Ù.</DIV><BR> <DIV>µû¶ó¼, RuntimeExceptionÀº catchÇÏÁö ¾Ê´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù. ¹ö±×°¡ ÀÖ´Â ÇÁ·Î±×·¥Àº ½Å¼ÓÈ÷ Á¾·á½ÃŰ´Â °ÍÀÌ ´ëºÎºÐÀÇ °æ¿ì ÃÖ¼±ÀÇ ¹æÃ¥À̶ó »ý°¢Çϱ⠶§¹®ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H5><A class=con_link id=s-5.2.2.3 target=_blank name=s-5.2.2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2.3</A> </SPAN>±×¹ÛÀÇ Exception <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.3" target=_blank>#</A></H5> <DIV>À§ÀÇ RuntimeExceptionÀÌ¿ÜÀÇ ExceptionÀÇ sub class´Â »ç¿ëÀÚÀÇ À߸øµÈ Á¶ÀÛ µîÀ¸·Î ÀÎÇØ ÇÁ·Î±×·¥¿¡ ¹ö±×°¡ ¾ø¾îµµ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ°í ±×¿¡ ´ëÇÏ¿© ÇÁ·Î±×·¥ÀÌ È®½ÇÈ÷ ´ëÀÀÇØ¾ß ÇÏ´Â °æ¿ì¿¡ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¸é FileNotFoundExceptionµîÀÌ´Ù.</DIV><BR> <DIV>±×·±µ¥ °³¹ßÇÏ´Ù º¸¸é ÀÌ»óÇϰí ÀǾÆÇÑ °ÍÀÌ Çϳª ÀÖ´Ù. ¼ýÀÚ ºÎºÐ¿¡ ¹®ÀÚ¸¦ ³Ö¾úÀ»¶§ ¹ß»ýÇÏ´Â NumberFormatExceptionÀÌ´Ù. À̰ÍÀº ÀÌ»óÇϰԵµ RuntimeExceptionÀÇ sub classÀÌ´Ù. À̰ÍÀº RuntimeExceptionÀÌ ¾Æ´Ï¾úÀ¸¸é Çϴµ¥ NumberFormatüũ´Â Runtime½Ã¿¡¸¸ °¡´ÉÇÑ ¸ð¾çÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.2.3 target=_blank name=s-5.2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.3</A> </SPAN>"OutOfMemoryError´Â ¾î¶»°Ô ó¸®ÇØ¾ß Çϴ°¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.3" target=_blank>#</A></H4> <DIV>¿¹Àü¿¡ Swing¿¡¼ Tree±¸Á¶¸¦ ÀÌ¿ëÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ÇÑÀûÀÌ ÀÖ´Ù. À̶§ Tree¿¡ branch¿Í node°¡ ¹«¼öÈ÷ »ý±âÀÚ JVMÀº OutOfMemoryError¸¦ ³»¹ñ¾ú´Ù. ÀÌ¿¡ ±ÞÇÑ ¸¶À½¿¡ OutOfMemoryError¸¦ catchÇÏ¿© »ç¿ëÀÚ¿¡°Ô Àç½ÃÀÛÀ» ¿äûÇÏ´Â Dialog¸¦ ¶ç¿ìµµ·Ï ¼öÁ¤ÇÏ¿´´Ù¸é ÀÌ Dialog°¡ °ú¿¬ ¶¸À»±î? ÇöÀç ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ ÆÇ¿¡ Dialog¸¦ ¶ç¿ï ¸Þ¸ð¸®°¡ ³²¾ÆÀÖÁú ¾Ê¾Ò´ø °ÍÀÌ´Ù. ´ÙÇàÈ÷ Dialog°¡ ¶¹¾îµµ ÀÛ¾÷Àº °è¼ÓµÇÁö ¸øÇßÀ» °ÍÀÌ´Ù. NullPointerException°¡ ³ª±â ¶§¹®ÀÌ´Ù.</DIV><BR> <DIV>¿øÀÎÀº ³ªÁß¿¡ ã¾Ò´Âµ¥, Tree±¸Á¶¿¡¼ ºÎ¸ðºÎÅÍ ÀڽĵéÀ» ºÙÀÌ´Â ¼øÀ¸·Î Tree¸¦ ±¸¼ºÇϴµ¥ ÀڽĵéÀ» ÁÙÁÙÀÌ ºÙ¿©³ª°¡´Ù°¡ ¸Þ¸ð¸® ºÎÁ·Çö»óÀÌ ¹ß»ýÇÏ¿´°í NullPointerExceptionÀº ÀÚ½ÄÀÌ ¾øÀ¸´Ï Ŭ¸¯ÇÏ´Â ¼ø°£ nullÀ» ¹ÝȯÇÏ¿© ¹ß»ýÇÏ¿´´ø °ÍÀÌ´Ù.</DIV><BR> <DIV>OutOfMemoryErrorÀÇ °¡Àå ÁÁÀº ÇØ°áÃ¥Àº ºÒÇÊ¿äÇÑ °´Ã¼¸¦ ¸¸µéÁö ¾Ê´Â °ÍÀ̾ú´Ù. ±×¸®°í Tree»ý¼º½Ã¿¡µµ ÀڽĺÎÅÍ ¸¸µé°í ºÎ¸ð¸¦ ¸¸µå´Â ¼ø¼·Î ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ Á¤»óÀûÀ¸·Î ¸¶Ä¥¼ö ÀÖ¾ú´Ù.</DIV><BR> <DIV>¸¶Áö¸·¿¡ µå´Â ½ÉÁ¤Àº ÇÁ·Î±×·¥ÀÌ OutOfMemoryError¸¦ ÀÏÀ¸Å°´Â ¿øÀÎÀÌ °ú¿¬ ÀÌ·¸°Ô ±¸¼ºµÇ¾î ¹ß»ýÇß´ÂÁö ¾î¶»°Ô ¾Ë¼ö ÀÖÀ»±î ÇÏ´Â Àǹ®ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-5.3 target=_blank name=s-5.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3</A> </SPAN>Object Serialize <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3" target=_blank>#</A></H3> <DIV>Java¿¡¼´Â ObjectOutputStreamÀÇ writeObject() method¿¡ µ¥ÀÌŸ ±¸Á¶ ÀúÀå¼ÒÀÇ ÂüÁ¶¸¸ °Ç³×Áֱ⸸ ÇÏ¸é ±× ¾È¿¡ ÀÖ´Â ¸ðµç °´Ã¼¸¦ 1Â÷¿ø streamÀ¸·Î Ãâ·ÂÇØ ÁØ´Ù. (ÆÄÀÏÀ̳ª ByteArrayOutputStreamÀ» ÀÌ¿ëÇÑ ¸Þ¸ð¸®·Î) ´Ü, static field´Â SerializeµÇÁö ¾Ê´Âµ¥ ÀÌ´Â SerializeÀÇ ´ë»óÀÌ instance °´Ã¼»ÓÀ̱⠶§¹®ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.1 target=_blank name=s-5.3.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.1</A> </SPAN>"Serialize¸¦ À§Çؼ´Â marker interfaceÀÎ java.io.Serializable interface¸¦ implementsÇØ¾ßÇÑ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.1" target=_blank>#</A></H4> <DIV>¿©±â¼ marker interface´Â java.lang.Cloneable°ú °°ÀÌ method¿Í fieldÀÇ Á¤ÀÇ´Â ¾øÁö¸¸ °´Ã¼ TypeÀ» À§ÇÑ interfaceÀÌ´Ù. ¿¹Àü¿¡ Serialize¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌŸ¸¦ À¯ÁöÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ÇÑ ÀûÀÌ Àִµ¥ ±×¶§ »ý°¢Çß´ø°ÍÀÌ '¸ðµç classµéÀÌ ±âº»ÀûÀ¸·Î SerializableÀ» implementsÇϰí ÀÖÀ¸¸é ÆíÇÒÅÙµ¥..'¶ó´Â »ý°¢À̾ú´Ù. ÇÏÁö¸¸ À̰ÍÀº »ó´çÈ÷ À§ÇèÇÑ ¹ß»óÀ̾ú´Ù.</DIV><BR> <DIV>SerializableÀÌ ±âº»À¸·Î implementsµÇ¾î ÀÕÀ¸¸é ¾û¶×ÇÑ °´Ã¼±îÁö SerializeµÇ°í ±×°ÍÀ» ¾Ë¾ÆÃ¤Áöµµ ¸øÇÏ´Â »çŰ¡ ÀϾ °¡´É¼ºÀÌ ³ô´Ù. SerializableÀÌ optionalÀÎ ÀÌÀ¯´Â ÀÌ·¯ÇÑ ÀÌÀ¯ ¶§¹®À̸®¶ó.. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.2 target=_blank name=s-5.3.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.2</A> </SPAN>"super class´Â SerializableÀÌ ¾Æ´Ñµ¥ sub class¸¸ SerializableÀÎ °æ¿ìÀÇ ¹®Á¦Á¡" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.2" target=_blank>#</A></H4> <DIV>SerializeÀ» ÀÌ¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ ÇÒ¶§ ÇѹøÂë ½Ç¼öÇÒ ¼ö ÀÖ´Â ºÎºÐÀÌ »ó¼ÓµÈ classÀÇ SerializeÀÌ´Ù. ÄÄÆÄÀÏ ¿¡·¯µµ ¾ø°í Deserializeµµ Àß µÇ¾ú´Ù. ÇÏÁö¸¸ ۰¡ µÇ´Â °ªÀÌ null°ú 0À̾ú´Ù. ¿µ¹®À» ¸ô¶ó ´Ù¸¥°÷À» Çì¸Å¿©µµ º¸´Ù°¡ °á±¹ ãÀº ¿øÀÎÀº ºÎ¸ðÀÇ field´Â SerializeµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë°Ô µÇ¾ú´Ù. transient¿Í ¸¶Âù°¡Áö·Î Çü½Äº° default °ªÀ¸·Î ä¿öÁ³¾ú´Ù. ÀÌ´Â ÄÄÆÄÀϰú ½ÇÇà½Ã ¾Æ¹«·± ¿À·ù¾øÀÌ ½ÇÇàµÇ¾î ³ª¸¦ Èûµé°Ô ÇÏ¿´±â¿¡ Java°¡ ¿ø¸Á½º·¯¿ü´ø ±âºÐÁÁÀº Ãß¾ïÀÌ´Ù. ^^; <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.3 target=_blank name=s-5.3.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.3</A> </SPAN>"transient fieldÀÇ º¹¿ø(?)°ü·Ã" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.3" target=_blank>#</A></H4> <DIV>Serialize¸¦ ÀÌ¿ëÇÑ ÇÁ·ÎÁ§Æ®¸¦ ÇÒ¶§´Â writeObject¿Í readObject¸¦ ÀÌ¿ëÇÏ¿© ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â Serialize¸¦ customizingÇÒ¼öÀÖ´Ù.</DIV><BR> <DIV>Serializable¿¡ ´ëÇÑ API reference¿¡µµ ´ÙÀ½°ú °°ÀÌ ³ª¿ÍÀÖ´Ù.</DIV><BR> <DIV>"Serialize¿Í Deserialize¿¡ ´ëÇÑ Æ¯º°ÇÑ handlingÀ» À§Çؼ´Â ´ÙÀ½ µÎ°³ÀÇ Æ¯º°ÇÑ ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ¸é µÈ´Ù."</DIV><BR> <DIV><PRE class=wiki>private void writeObject(java.io.ObjectOutputStream out) throws IOException; private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;</PRE></DIV><BR> <DIV>ÀÌ µÎ method°¡ privateÀ¸·Î µÇ¾î ÀÖ´Â °ÍÀ» º¸°í óÀ½¿¡´Â ÀǾÆÇØ Çß¾ú´ø ±â¾ïÀÌ ÀÖ´Ù. À̸¦ protected³ª publicÀ¸·Î Çϸé Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ÀÌ´Â override°¡ À̴ϱ⠶§¹®ÀÌ´Ù. »ç½ÇÀº ¼Ó¿¡¼ reflectiondÀ» ÀÌ¿ëÇÏ¿© °Á¦ÀûÀ¸·Î È£ÃâµÇ°í Àִ°ÍÀÌ´Ù. reflection¿¡¼´Â private method±îÁö ãÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ privateÀ¸·Î ÇÑ °¡Àå Å« ÀÌÀ¯´Â Serialize¸¦ °´Ã¼ÀÚ½ÅÀÌ Á÷Á¢ ÇØ¾ß ¾ÈÀüÇÏ´Ù´Â Àǹ̵µ ÀÖÁö ¾ÊÀ»±î ÇÏ´Â »ý°¢µµ µç´Ù. ´Ù½Ã º»·ÐÀ¸·Î µé¾î°¡¼ transient¸¦ º¹¿øÇÏ´Â °Í¿¡ ¾ê±â¸¦ ÇÏÀÚ¸é, »ç½Ç transient´Â Serialize´ë»ó¿¡¼ Á¦¿ÜµÇ´Â °ÍÀε¥ º¹¿øÀ» ÇÒ ¼ö ÀÖ´Ù´Â ¸»ÀÌ ¾ÈµÈ´Ù. ÇÏÁö¸¸ ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Ù º¸¸é logic»ó °¡´ÉÇÑ °æ¿ì°¡ ¸¹ÀÌ ÀÖ´Ù.</DIV><BR> <DIV>Áï, ¸ðµç field¸¦ SerializeÇÏÁö ¾Ê°í ÇÊ¿äÇÑ °Í¸¸ ÇÏ°í Æ¯Á¤ field´Â SerializeÇÑ fieldµéÀ» ÀÌ¿ëÇÏ¿© º¹¿øÇÏ´Â ¹æ¹ýÀÌ´Ù. ¶ÇÇÑ Serialize´ç½ÃÀÇ °´Ã¼ »óÅÂ¿Í Deserialize½ÃÀÇ °´Ã¼»óŰ¡ ¼·Î ´Ù¸¦ ¼ö ÀÖ´Â fieldµµ ±×°Í¿¡ ÇØ´çµÈ´Ù. cafeid¸¸À¸·Î ³ª¸ÓÁö field´Â DB¿¡¼ Àоî¿À°Ô ÇÑ´Ù¸é ³ª¸ÓÁö field´Â transient·Î ó¸®Çϰí Deserialize½Ã readObject()¿¡¼ º¹¿øÇÏ´Â °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.4 target=_blank name=s-5.3.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.4</A> </SPAN>"Stack Overflow¿¡ ÁÖÀÇÇ϶ó!" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.4" target=_blank>#</A></H4> <DIV>Serialize¸¦ ÇÏ´Ùº¸¸é ÂüÁ¶·Î ¿¬°áµÈ °´Ã¼¸¦ recursiveÇÏ°Ô °Å½½·¯ ¿Ã¶ó°¡¸ç À̰ÍÀÌ ³Ê¹« ±í¾îÁö¸é Stack Overflow°¡ ¹ß»ýÇÑ´Ù. °¡·É linked list°°Àº °æ¿ìÀÌ´Ù. À̰ÍÀ» SerializeÇÏ¸é ±× ¿ä¼Ò¼ö¸¸Å recursive È£ÃâÀÌ ¹ß»ýÇÑ´Ù. °ú°Å(JDK1.3.0½ÃÀý) ÇÁ·ÎÁ§Æ® ´ç½Ã JVMÀÌ 5111¿¡¼ Stack Overflow°¡ ¹ß»ýÇß´ø ±â¾ïÀÌ ÀÖ´Ù.</DIV><BR> <DIV>¹°·Ð ½ÇÇà½Ã java option¿¡ -Xss ¸¦ ÀÌ¿ëÇÏ¿© statck ũ۸¦ Á¶ÀýÇÒ ¼ö ÀÖÁö¸¸ À̰ÍÀº °³¹ßÀÚ°¡ ¾Æ´Ñ ½ÇÇàÇÏ´Â »ç¶÷µé¿¡°Ô ºÎ´ãÀ̾ú´Ù. JDKÀÇ LinkedList classÀÇ ¼Ò½º¸¦ º¸¸é writeObject()¿Í readObject()¸¦ ´ÙÀ½°ú °°ÀÌ º¯°æÇϰí ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>private synchronized void writeObject(java.io.ObjectOutputStream s) throws IOException { s.defaultWrtieObject(); //ÀÌ ÄÚµå´Â ¹«Á¶°Ç µé¾î°¡°Ô µÇ´Âµ¥ À̰÷ ¼Ò½ºÀÇ System.arraycopy()¿¡¼ overflow¹ß»ýÇÑ´Ù. s.writeInt(size); //À̺κÐÀÌ ½ÇÁ¦ Ãß°¡µÇ¾î Stack Overflow¸¦ ¿¹¹æÇÑ´Ù. for(Entry e = ...) s.writeObject(e.element); } ... } //readObject()µµ ÀÌ¿Í °°Àº °³³äÀ¸·Î º¯°æµÇ¾î ÀÖ´Ù.</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-5.4 target=_blank name=s-5.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4</A> </SPAN>"nested class / inner class / ÁßøŬ·¡½º" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-5.4.1 target=_blank name=s-5.4.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.1</A> </SPAN>"ÁßøŬ·¡½ºÀÇ °³³ä" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.1" target=_blank>#</A></H4> <DIV>°³ÀÎÀûÀ¸·Î ÁßøŬ·¡½º¸¦ ¾î¶°ÇÑ °æ¿ì´Â »ç¿ëÇÏÁö ¾ÊÀ¸·Á ÇÑ´Ù. »ç¿ëÇϱⰡ ¸¸¸¸Ä¡ ¾Ê°í ÄÚµå ÀбⰡ Èûµé¾î Áö±â¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ '¾î¶² Ŭ·¡½º ³»¿¡¼ ÀºÆóÇÒ ¸ñÀûÀ¸·Î »ç¿ëÇϴ Ŭ·¡½º°¡ ÀÖ´Ù¸é À̰ÍÀ» »ç¿ëÇØ¾ß ÇÑ´Ù' ½ÇÁ¦·Î JavaÀÇ AWT Ŭ·¡½º Event Handler¸¦ ºñ·ÔÇÏ¿© ¸¹Àº Ŭ·¡½º¿¡¼ ÁßøŬ·¡½º¸¦ »ç¿ëÇϰí ÀÖ´Ù. ¶ÇÇÑ ³»ºÎ class´Â ±×°ÍÀ» µÑ·¯½Î´Â classÀÇ instance(enclosing object¶ó°í ÇÏ´Â)ÀÇ field¸¦ ÂüÁ¶ ÇÒ¼ö Àִ°͵µ ÀåÁ¡ÀÌ´Ù. ÇÏÁö¸¸ ÀÌ´Â ³»ºÎŬ·¡½º°¡ ¾Æ´Ò°æ¿ì ºÎºÎ Ŭ·¡½º¸¦ newÇØ¼ »ç¿ëÇϴ°Ͱú º°¹Ý ´Ù¸¦²² ¾øÁö ¾ÊÀº°¡.</DIV></DIV> <DIV> <H4><A class=con_link id=s-5.4.2 target=_blank name=s-5.4.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.2</A> </SPAN>"³»ºÎŬ·¡½º´Â ºÎ¸ðÀÇ ÂüÁ¶¸¦ ¸ô·¡ º¸À¯Çϰí ÀÖ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.2" target=_blank>#</A></H4> <DIV>³»ºÎ Ŭ·¡½ºÀÇ instance´Â ºÎ¸ðÀÇ instance¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¸ô·¡ º¸À¯Çϰí Àֱ⠴빮¿¡ À§¿¡¼ ¾ê±âÇÑ ºÎ¸ðÀÇ field¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î static method¿¡¼´Â ³»ºÎŬ·¡½º¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù. ´ÙÀ½ ¿¹¸¦ º¸¸é ¹Ù·Î ¾Ë¼ö ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>class Test{ class InnerClass { int i; ... } public static void main(String[] args){ InnerClass icls = new InnerClass(); ... } }</PRE></DIV><BR> <DIV>ÀÌ ¼Ò½º¸¦ compileÇÏ¸é ´ÙÀ½ÀÇ ¿À·ù°¡ ¹ß»ýÇÑ´Ù. "non-static variable this cannot be referenced from a static context..." main method´Â staticÀ̹ǷΠthis¸¦ ÂüÁ¶ÇÒ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â InnerClass°¡ new µÇ¸é¼ ¿ÜºÎ Ŭ·¡½º TestÀÇ this¸¦ º¸À¯ÇØ¾ß Çϴµ¥ ¿©±â¼ staticÀ» ¸¸³ª´Ï ¿À·ù¸¦ Ç¥Ãâ½ÃŲ°ÍÀÌ´Ù. ¹°·Ð ÀÏ¹Ý instance method¿¡¼´Â ¿À·ù°¡ ³ªÁö ¾Ê´Â´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.4.3 target=_blank name=s-5.4.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.3</A> </SPAN>"local inner class¿¡ ´ëÇÏ¿©" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.3" target=_blank>#</A></H4> <DIV>local inner class¶ó ÇÔÀº method³»¿¡¼ ¼±¾ðµÈ inner classÀÌ´Ù.</DIV><BR> <DIV><PRE class=wiki>public class OuterClass { public int get(){ int i = 9; int id = 99; int id2 = 99; final int id3 = 100000; class LocalInnerClass { int id = 100; LocalInnerClass(){ System.out.println("LocalInnerClass"); } int getId(){ return id3 + id; } } LocalInnerClass lic = new LocalInnerClass(); return id + lic.getId(); } public static void main(String[] args){ OuterClass outer = new OuterClass(); System.out.println("id = " + outer.get()); //°á°ú °ªÀº "100000(id3) + 100(LocalInnerClass.id) + 99(OuterClass.get())" ÀÎ 100199°¡ ³ª¿Â´Ù. } }</PRE></DIV><BR> <DIV>À§ ¼Ò½ºÀÇ LocalInnerClass´Â get() À̶ó´Â method¿¡¼¸¸ º¸ÀÌ´Â classÀÌ´Ù. ±×¸®°í ƯÀÌÇÒ ¸¸ÇÑ ºÎºÐÀÌ OuterClassÀÇ get() method¿¡¼ final·Î ¼±¾ðµÈ id3ÀÌ LocalInnerClass¿¡¼ ÂüÁ¶ °¡´ÉÇØ Áø´Ù. id2¸¦ ÂüÁ¶Çϸé compile error°¡ ³ªÁö¸¸ final·Î ¼±¾ðµÈ °ÍÀº ¿À·ù°¡ ³ªÁö ¾Ê´Â´Ù.</DIV><BR> <DIV>ÀÌ´Â local variableÀº method¿¡¼ ³ª¿À´Â ¼ø°£ »ç¶óÁö´Âµ¥, local inner class´Â local variableº¸´Ù ¼ö¸íÀÌ Á¶±Ý´õ ±æ±â ¶§¹®¿¡ final¸¸ Çã¿ëÇÑ °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.4.4 target=_blank name=s-5.4.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.4</A> </SPAN>"anonymous class(¹«¸íŬ·¡½º)¿¡ ´ëÇÏ¿©" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.4" target=_blank>#</A></H4> <DIV>¹«¸í Ŭ·¡½º´Â ¸»±×´ë·Î À̸§ÀÌ ¾ø´Â Ŭ·¡½ºÀÌ´Ù.</DIV><BR> <DIV><PRE class=wiki>class AnonymousTest { private interface Printable { void print(); } static void doPrint(Printable p){ p.print(); } public static void main(String[] args){ doPrint( new Printable(){ public void print(){ System.out.println("this is new Printable print()"); } }); } }</PRE></DIV><BR> <DIV>À§ ¼Ò½ºÀÇ "doPrint( new Printable(){" ºÎºÐÀÌ ¹«¸íŬ·¡½º ÀÌ´Ù. compileÀ» ¼öÇàÇϸé AnonymousTest$Printable.class, AnonymousTest$1.class, AnonymousTest.class ¼¼°³ÀÇ Å¬·¡½º°¡ »ý±ä´Ù. ¿©±â¼ AnonymousTest$Printable.class´Â Printable interfaceÀ̰í AnonymousTest$1.classÀÌ ¹«¸íŬ·¡½ºÀÌ´Ù.</DIV><BR> <DIV>ÀÌ ¼Ò½º¸¦ º¸¸é óÀ½¿¡ µå´Â ÀǽÉÀÌ Printable interface¸¦ new Çß´Ù´Â °ÍÀÌ´Ù. ¿©±â¼ ±»ÀÌsuper class(ÀÌ ¼Ò½º¿¡¼´Â interface)¸¦ ÀúÁ¤ÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â ¾Æ¹«°Íµµ »ó¼ÓÇÏÁö ¾Ê´Â ¹«¸í Ŭ·¡½ºÀÇ instance¸¦ ¸¸µé¾î ºÁ¾ß Àǹ̰¡ ¾ø±â ¶§¹®¿¡ ÀÌ·¸°Ô ÇѵíÇÏ´Ù.</DIV><BR> <DIV>"¹«¸íŬ·¡½º´Â ¾î¶² class³ª interface¸¦ »ó¼Ó/±¸Çö ÇØ¾ß¸¸ ±× instance¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù" <DIV class=indent> </DIV>ÀÌó·³ ¹«¸í Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ¾î¶² ÀýÂ÷(¼öÇà)¸¦ ´Ù¸¥ methodÀÇ Àμö·Î °Ç³×ÁÙ ¼ö ÀÖ°Ô µÈ´Ù. ÇÏÁö¸¸ °£´ÜÇÑ ·ÎÁ÷¸¸ ±¸Çöó¸®ÇØ¾ß ÇÑ´Ù.</DIV><BR> <DIV>"¹«¸íŬ·¡½º´Â Á¶±Ý¸¸ º¹ÀâÇØÁ®µµ ±Þ°ÝÈ÷ ¼Ò½ºÀÇ °¡µ¶¼ºÀÌ ¶³¾îÁö°Ô µÇ¹Ç·Î ³²¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù" <DIV class=indent> </DIV></DIV></DIV> <DIV> <H2><A class=con_link id=s-6 target=_blank name=s-6></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>6</FONT></A> </SPAN>ÀÌ·¡µµ Java°¡ °£´ÜÇѰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-6.1 target=_blank name=s-6.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1</A> </SPAN>method overload ¿¡¼ÀÇ È¥¶õ? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-6.1.1 target=_blank name=s-6.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1.1</A> </SPAN>"overload¶õ À̸§ÀÌ °¡°í Àμö°¡ ´Ù¸¥ method¿¡ compiler°¡ ´Ù¸¥ À̸§À» ºÙÀÌ´Â ±â´É" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.1" target=_blank>#</A></H4> <DIV>overload¸¦ ±¸ÇöÇϸé bytecode·Î º¯È¯½Ã ´Ù¸¥ À̸§À¸·Î method°¡ º¯È¯µÇ¾î º°°³ÀÇ method·Î 󸮵ȴÙ. À̸¦ JVM¿¡¼ method descripter¶ó ÇÏ¿© Oolong asembler·Î º¯È½Ã ´Ù¸¥ ÇüÅÂÀÇ method°¡ µÈ´Ù. ¿¹¸¦ µé¾î "void get(double d, long l)" Àº "get(DJ)V"·Î º¯°æµÈ´Ù. ¿©±â¼ D´Â double, J´Â long, V´Â void¸¦ ÀǹÌÇÑ´Ù.</DIV><BR> <DIV>±×·±µ¥ ¿©±â¼ "get(DJ)" ºÎºÐ¸¸ method À̸§À̹ǷΠreturn typeÀÌ ´Ù¸¥ µ¿ÀÏ method´Â overload ÇÒ ¼ö ¾ø´Ù. µû¶ó¼ overload´Â Á¤Àû(compile½Ã °áÁ¤)À̶ó´Â ¸íÁ¦°¡ ¼º¸³´Ï´Ù. ±×·¡¼ µ¿ÀûÀ¸·Î »ç¿ëµÇ¸é compile½Ã ¿À·ù¸¦ Ç¥ÃâÇÑ´Ù. ¾Æ·¡ÀÇ ¼Ò½º¸¦ º¸ÀÚ. ¿©±â¿¡´Â IFS¶ó´Â interface¿Í À̸¦ implementsÇÑ Impl1, Impl2 ¶ó´Â class°¡ ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>//IFS.java interface IFS { public String getName(); } //Impl1.java class Impl1 implements IFS { public String getName(){ return "Impl1"; } } //Impl2.java class Impl2 implements IFS { public String getName(){ return "Impl2"; } } //mainÀÌ ÀÖ´Â OverloadTest.java public class OverloadTest { static void pr(int i){ System.out.println("pr_int : " + i); } static void pr(String s){ System.out.println("pr_string : " + s); } static void pr(IFS ifs){ System.out.println("pr_string : " + ifs.getName()); } static void pr_run(Impl1 i1){ System.out.println("pr_run : " + i1.getName()); } static void pr_run(Impl2 i2){ System.out.println("pr_run : " + i2.getName()); } public static void main(String[] args){ OverloadTest test = new OverloadTest(); test.pr(10); test.pr("Jeid"); IFS ifs1 = new Impl1(); test.pr(ifs1); IFS ifs2 = new Impl2(); test.pr(ifs2); //pr_run(ifs1); //pr_run(ifs2); } }</PRE></DIV><BR> <DIV>À§ÀÇ ¼Ò½º¸¦ ¼öÇàÇϸé Á¤»óÀûÀ¸·Î compileÀÌ µÉ°ÍÀΰ¡?</DIV><BR> <DIV>´ç¿¬È÷ Àß µÈ´Ù. pr()Àº overload¸¦ Àß ±¸ÇöÇß´Ù. ÇÏÁö¸¸ ¼Ò½º ÇÏ´ÜÀÇ µÎ ÁÖ¼®¹®À» Ç®¸é ¾î¶»°Ô µÉ±î? ÀÌ´Â compile¿À·ù¸¦ ³½´Ù.</DIV><BR> <DIV><PRE class=wiki>OverloadTest.java:36: cannot resolve symbol symbol : method pr_run (IFS) location: class OverloadTest pr_run(ifs1); ^ OverloadTest.java:37: cannot resolve symbol symbol : method pr_run (IFS) location: class OverloadTest pr_run(ifs2); ^ 2 errors</PRE></DIV><BR> <DIV>½ÇÁ¦ À§ µÑÀÇ pr_run method´Â bytecode·Î º¯È¯½Ã "pr_run(Lpackage_name.IFS)V"·Î µ¿ÀÏÇÏ°Ô »ý¼ºµÈ´Ù. µû¶ó¼ compile½Ã¿¡ ¿À·ù¸¦ Ç¥ÃâÇÑ´Ù. ÀÌ ¼Ò½º¸¦ º¸¸é ¾Ë ¼ö ÀÖµíÀÌ "method overload´Â Á¤Àû(compile½Ã)À¸·Î ¹Ì¸® °áÁ¤µÇ¸ç, µ¿Àû(½ÇÇà½ÃÆÇ´Ü)À¸·Î »ç¿ëÇÒ¼ö ¾ø´Ù." <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.1.2 target=_blank name=s-6.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1.2</A> </SPAN>"±×·¸´Ù¸é overload¿¡¼ ½ÇÁ¦·Î È¥µ¿µÇ´Â ºÎºÐÀº ¹«¾ùÀΰ¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.2" target=_blank>#</A></H4> <DIV>´ÙÀ½ ¼Ò½º¸¦ º¸°í ½ÇÁ¦·Î ¼öÇàµÇ´Â method¸¦ ã¾Æº¸¶ó.</DIV><BR> <DIV><PRE class=wiki>class OverloadTest2 { static int base(double a, double b){ ... } //method A static int count(int a, int b){ ... } //method B static int count(double a, double b){ ... } //method C static int sum(int a, double b){ ... } //method D static int sum(double a, int b){ ... } //method E }</PRE></DIV><BR> <DIV> <UL> <LI>base(3,4) ¸¦ È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => ´ç¿¬È÷ method A (3°ú 4´Â Á¤¼ö¶óµµ doubleÀÌ µÇ¹Ç·Î Á¤»óÀûÀ¸·Î ¼öÇàµÊ) <LI>count(3,4) ¸¦ È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => B¿Í CÁß °¥µîÀÌ »ý±ä´Ù. ÀÌ·²°æ¿ì JVMÀº °¡Àå ÇÑÁ¤Àû(more specific)ÇÑ method¸¦ ã´Â´Ù. ¿©±â¼ 3°ú 4´Â Á¤¼öÇü¿¡ °¡±î¿ì¹Ç·Î method B °¡ È£ÃâµÈ´Ù. <LI>count(3, 4.0) À» È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => À̰ÍÀº 4.0 ÀÌ doubleÀ̹ǷΠmethod C °¡ ´õ ÇÑÁ¤ÀûÀ̹ǷΠmethod C °¡ È£ÃâµÈ´Ù. <DIV class=indent> </DIV> <LI>sum(3,4.0) À» È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => À̰ÍÀº ´ç¿¬È÷ typeÀÌ ÀÏÄ¡ÇÏ´Â method D. <DIV class=indent> </DIV> <LI>sum(3,4) ¸¦ È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â?? => ÀÌ·± Äڵ尡 ¼Ò½º³»¿¡ ÀÖÀ¸¸é ´ÙÀ½°ú °°Àº compile ¿À·ù¸¦ Ç¥ÃâÇÑ´Ù. </LI></UL><PRE class=wiki>OverloadTest.java:48: reference to sum is ambiguous, both method sum(int,double) in OverloadTest and method sum(double,int) in OverloadTest match System.out.println("sum(3,4) = " + sum(3,4)); ^ 1 error</PRE></DIV><BR> <DIV>method D¿Í method E°¡ ¾Ö¸ÅÇÏ´Ù´Â compile ¿À·ùÀÌ´Ù. À̰ÍÀº µÑÁß ¾î´À°ÍÀÌ ´õ ÇÑÁ¤ÀûÀÎÁö ãÀ» ¼ö ¾øÀ¸¹Ç·Î bytecode ¸¦ »ý¼º ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù.</DIV><BR> <DIV>"ÀÌ·¸µí compiler¿¡°Ô ºÒÇÊ¿äÇÑ ¿ÀÇØ(È¥µ¿)¸¦ ÃÊ·¡ÇÏ´Â overload´Â »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù. °³ÀÎÀûÀ¸·Î overload¸¦ °¡´ÉÇÑ »ç¿ëÇÏÁö ¾ÊÀ¸·Á Çϰí ÇÊ¿äÇÏ´Ù¸é ÀμöÀÇ °³¼ö°¡ ´Ù¸¥ overload¸¦ »ç¿ëÇÏ´Â ÆíÀÌ´Ù." <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.1.3 target=_blank name=s-6.1.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1.3</A> </SPAN>(Âü°í) ¶Ç´Ù¸¥ È¥µ¿, overloadÇÑ method¸¦ override Çϸé? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.3" target=_blank>#</A></H4> <DIV>overload¶õ compiler°¡ bytecodeº¯È¯½Ã ´Ù¸¥ À̸§À» ºÙÀÌ´Â ±â´ÉÀ̶ó´Â °ÍÀ» À§¿¡¼ ¼³¸íÇß´Ù. µû¶ó¼ super class¿¡¼ overloadÇÑ method¸¦ »ó¼ÓÇÏ¿© overrideÇÏ¸é ¿ÏÀü º°°³ÀÇ method¸¦ overrideÇѰÍó·³ JVMÀº ÆÇ´ÜÇÑ´Ù. Áï, overload¿Í override´Â Á÷±³(ÀüÇô»ó°ü¾ø´Â)ÇÏ´Â °³³äÀÌ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-6.2 target=_blank name=s-6.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2</A> </SPAN>»ó¼Ó/override/ÀºÆó ¿¡¼ÀÇ º¹ÀâÇÔ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-6.2.1 target=_blank name=s-6.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.1</A> </SPAN>"Java classÀÇ member 4 Á¾·ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.1" target=_blank>#</A></H4> <DIV> <OL type=1> <LI>instance field <LI>instance method <LI>static field <LI>static method <DIV class=indent> </DIV></LI></OL>¿©±â¼ »ó¼ÓÀ» ÇÏ¿´À» °æ¿ì runtime½Ã °´Ã¼ÀÇ Çü½Ä¿¡ µû¶ó ¼±ÅõǴ °ÍÀº? 2¹ø instance method »ÓÀÌ´Ù. Áï, µ¿¸íÀÇ member¸¦ sub class¿¡¼ ¼±¾ðÇßÀ» ¶§ instance method¸¸ override µÇ°í ³ª¸ÓÁö´Â ¿ÏÀü º°°³ÀÇ member°¡ µÈ´Ù. µû¶ó¼ À§ÀÇ 1,3,4´Â sub class¿¡¼ µ¿ÀÏÇÏ°Ô ¼±¾ðÇßÀ» °æ¿ì º°°³ÀÇ °ÍÀ¸·Î ÀνĵǸç compile½Ã¿¡ ¹«¾ùÀ» access ÇÒÁö °áÁ¤µÈ´Ù.</DIV><BR> <DIV>Áï, instance method´Â overrideµÇÁö¸¸ instance field/static field´Â ÀºÆóµÈ´Ù. override´Â ½ÇÇà½Ã °´Ã¼ÀÇ Çü½Ä¿¡ µû¶ó ó¸® ÇÒ´çµÇÁö¸¸, ÀºÆóÀÇ °æ¿ì´Â compile½Ã¿¡ °áÁ¤µÇ°í ¸¸´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.2 target=_blank name=s-6.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.2</A> </SPAN>"override½Ã method À̸§¿¡ ´ëÇÑ ÇÔÁ¤" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.2" target=_blank>#</A></H4> <DIV>°ú°Å¿¡ ÄÚµùÀ» ÇÏ´øÁß Á¤¸»ÀÌÁö ¾îó±¸´Ï ¾ø´Â °æ¿ì¸¦ ´çÇß´Ù. override ÇÏ´Â methodÀ̸§À» À߸ø½á¼ Ȳ´çÇÑ(?) °í»ýÀ» ÇÑÀûÀÌ ÀÖ´Ù. super classÀÇ writable()À̶ó´Â method¸¦ writeable()À̶ó°í override(?)ÇÏ¿´´Âµ¥ ÇÁ·Î±×·¥ ¼öÇà Áß¿¡ writable()ÀÌ Ç×»ó false°¡ ³ª¿À´Â °ÍÀÌ ¾Æ´Ñ°¡? ±×·¡¼ ¼Ò½º¸¦ ÃßÀûÃßÀû ÇÏ´Ù ¸î½Ã°£À» ÇãºñÇß¾ú´ø ±â¾ïÀÌ ÀÖ´Ù.</DIV><BR> <DIV>java¸¦ Á¢ÇÑÁö ¾ó¸¶µÇÁö ¾Ê¾Ò°í ¿äÁò°°ÀÌ eclipse°°Àº ¿¡µðÅ͵µ ¾øÀÌ ¸Þ¸ðÀå¿¡¼ ÄÚµùÇÏ´ø ½ÃÀýÀ̶ó ´õ¿í °í»ýÇß´ø°Í °°´Ù. ÇÑÂü ÈÄ¿¡¾ß ¿ì¿¬È÷ ½ºÆç¸µÀÌ À߸øµÈ°É ¾Ë°í ¾ó¸¶³ª Ȳ´çÇß´øÁö... Áö±Ý »ý°¢Çϸé À̰͵µ ÁÁÀº Ãß¾ïÀ̸®¶ó.</DIV><BR> <DIV>¹«Á¶°Ç override Àß µÇ¾úÀ»°Å¶ó »ý°¢ Çß´ø ³ªÀÇ ºÒÂûµµ ÀÖ¾úÁö¸¸ compile¶§³ª runtime½Ã ¾Æ¹«·± ¹ÝÀÀÀ» º¸ÀÌÁö ¾Ê´ø Javaµµ ¿ø¸Á½º·¯¿ü´Ù. 2003³âµµ¿¡ C#À¸·Î ÇÁ·ÎÁ§Æ®¸¦ Çߴµ¥ C#Àº »ó¼ÓÀÇ override¿¡ ´ëÇÏ¿© "override void writalbe().."°ú °°ÀÌ Á¤Àǽà override¸¦ ¸í½ÃÇØ¾ß µÈ´Ù´Â °ÍÀ» º¸°í »ó´çÈ÷ ¸¶À½¿¡ µé¾î Çß´ø ±â¾ïÀÌ ÀÖ´Ù. °¡µ¶¼ºµµ ¶Ù¾î³¯ »Ó´õ·¯ ³ªÀÇ ¸î½Ã°£µ¿¾ÈÀÇ Çì¸ÞÀÓµµ ¾øÀ» °ÍÀ̱⠶§¹®´Ù. Javaµµ ÀÌ·¸°Ô È®½ÇÇÑ ¸í¼¼¿´À¸¸é Á¤¸» ÁÁ°Ú´Ù.</DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.3 target=_blank name=s-6.2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.3</A> </SPAN>"¶Ç´Ù¸¥ ³ªÀÇ(?) ½Ç¼ö - ¸»µµ ¾ÈµÇ´Â ¿ÀŸ" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.3" target=_blank>#</A></H4> <DIV>À§ÀÇ methodÀ̸§À» À߸ø½á¼ °í»ýÇϱâ ÀÌÀü¿¡ ¾ÆÁÖ ºñ½ÁÇÑ °í»ýÀ» ÇÑÀûÀÌ ÀÖ´Ù.</DIV><BR> <DIV>'³ Á¤¸» ¹Ùº¸Àΰ¡'¶ó´Â »ý°¢À» µé°Ô Çß´ø ¹®Á¦¿´´Ù. Ãʺ¸ ½ÃÀý¿¡´Â ¿ÖÀ̸®µµ ¿ÀŸ°¡ ¸¹ÀÌ ³ª´øÁö... ¿äÁòÀº ´ëÃæ Űº¸µå µÎµå·Áµµ ¿ÀŸ°¡ Àß ¾È³ª´Âµ¥ ±× ½ÃÀý¿¡ ¿ÀŸ ¶§¹®¿¡ ´À¸° CPU¿¡¼ ÄÄÆÄÀÏÀ» ¸î¹øÀ» Çß´ÂÁö... <DIV class=indent> </DIV>±â¾ïÀ» µÇ»ì¸®¸é ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>public class Member { private int memberNo; public int getMemberNo(){ return this.memberNo; } public void setMemberNo(int menberNo){ this.memberNo = memberNo; } ...... }</PRE></DIV><BR><BR> <DIV>À§ ¼Ò½ºÀÇ Member¿¡´Â ´Ù¸¥ ¿©·¯°¡Áö member field°¡ Àִµ¥ DBÀÇ member table¿¡ memberid Ä÷³ÀÌ memberno·Î º¯°æµÇ¸é¼ Member classÀÇ memberId¸¦ memberNo·Î º¯°æÇÏ°Ô µÇ¾ú´Ù. À§¿Í °°ÀÌ ¼öÁ¤ÇÏ¿© ¹èÆ÷ÇØ³õ°í Å×½ºÆ®¸¦ Çϴµ¥ ½Ã½ºÅÛÀÌ ¿ÏÀüÈ÷ µÚÁ×¹ÚÁ×À¸·Î µ¹¾Æ¹ö¸®´Â °ÍÀÌ ¾Æ´Ñ°¡. ÀÌ °æ¿ìµµ method À̸§Ã³·³ ¸î½Ã°£À» Çì¸Å¾ú´Ù.</DIV><BR> <DIV>À̹ø¿¡ argumentÀÇ ¿ÀŸ·Î ÀÎÇÑ ¾îó±¸´Ï ¾ø´Â ½Ç¼ö¿´´Ù. setMemberNo(int menberNo)¿¡¼ ¹®Á¦°¡ ¹ß»ýµÇ¾ú´ø °ÍÀÌ´Ù. ÀμöÀÇ memberNo¸¦ menberNo·Î À߸øÄ£°ÍÀÌ´Ù. ±×·¡¼ memberNo¿¡´Â ÇØ´ç memberÀÇ memberno°¡ ¾Æ´Ñ 0ÀÌ ¸ðµÎ µé¾î°¬¾î´ø °ÍÀÌ´Ù. ½Ã½ºÅÛÀº memberno¸¦ ±âÁØÀ¸·Î µµ´Â ºÎºÐÀÌ ³Ê¹«³ª ¸¹¾Ò±â¿¡ ¿À·ù³ª´Â ºÎºÐµµ ¸¹¾ÒÀ¸¸ç DB¿¡¼´Â Á¦´ë·Î µÈ membernoÀ» ÀÐ¾î ¿ÔÀ¸¸ç, compile°ú runtime½Ã ¾Æ¹«·± ¹ÝÀÀµµ ¾ø¾ú±â¿¡, Ãʺ¸ÀÚ¸¦ ±×·¸°Ôµµ °í»ý½ÃÄ׳ª º¸´Ù.</DIV><BR> <DIV>À̰͵µ member field¸é ¹«Á¶°Ç this¸¦ ºÙÀ̵µ·Ï ÇÏ´øÁö Java°¡ Àμö´Â 'm_'¿Í prefix¸¦ ºÙÀ̵µ·Ï Coding StyleÀ» Á¤ÀÇ- SUN»çÀÌÆ®ÀÇ Java Coding ±Ô¾à¿¡´Â "Variable names should not start width underscore_ or dollar sign $ characters, even though both are allowed." ¿Í °°ÀÌ ¸í½ÃµÇ¾î ÀÖ´Ù - Çß´õ¶ó¸é ¹ß»ýÇÏÁö ¾Ê¾ÒÀ» ¹®Á¦ÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ C¾ð¾î³ª C#¿¡¼ ó·³ compile °æ°í·¹º§À» ³ô¿©³õÀ¸¸é "menberNo´Â ¾îµð¼µµ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù."¿Í °°Àº ¸Þ¼¼Áö¸¦ º¸¿© Áá´õ¶ó¸é °í»ýÀ» ´ú ÇÏÁö ¾Ê¾ÒÀ»±î? <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.4 target=_blank name=s-6.2.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.4</A> </SPAN>"static member¸¦ instance¸¦ °æÀ¯ÇÏ¿© ÂüÁ¶Çؼ´Â ¾È µÈ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.4" target=_blank>#</A></H4> <DIV>¿¹¸¦ µé¾î ClassA ¿¡ public static int AA ¶ó´Â static field°¡ ÀÖÀ» °æ¿ì ClassA.AA ·Î Á¢±ÙÇØ¾ß Çϴµ¥, ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ´Â ½Ç¼ö¸¦ ¹üÇÑ´Ù.(¹°·Ð ¿À·ù´Â ¾øÁö¸¸)</DIV><BR> <DIV><PRE class=wiki>ClassA a = new ClassA(); int i = a.AA; //instance¸¦ °æÀ¯ÇÏ¿© Á¢±Ù int j = ClassA.AA; //¿Ã¹Ù¸£°Ô Á¢±Ù</PRE></DIV><BR> <DIV>±×·³ ¿Ö ±»ÀÌ ClassA.AA¿Í °°ÀÌ instance°¡ ¾Æ´Ñ classÀ̸§À» ºÙ¿©¾ß ÇÒ±î?</DIV><BR> <DIV>static member(static field/static method)´Â compile½Ã¿¡ ÀÌ¹Ì ¾î´À°ÍÀ» È£ÃâÇÒ Áö °áÁ¤Çϱ⠶§¹®¿¡ À§ÀÇ a.AA¿Í °°Àº °ÍÀº staticÀÌ ¾Æ´Ñ°Í °°Àº ¿ÀÇØ¿Í È¥¶õ¸¸ °¡Á®¿À±â ¶§¹®ÀÌ´Ù. ½ÉÁö¾î °³ÀÎÀûÀ¸·Î´Â µ¿ÀÏ class ³» - À§ ¼Ò½º¿¡¼ ClassAÀÇ member method - ¿¡¼ ClassA.AA¶ó°í »ç¿ëÇÏ´Â ÆíÀÌ´Ù.</DIV><BR> <DIV>ÀÌ´Â local variable°ú È¥µ¿µÉ ¿°·Áµµ ¾øÀ»»Ó´õ·¯ AA¶ó´Â º¯¼ö°¡ staticÀ̶ó´Â °Íµµ È®½ÇÈ÷ ¾Ë ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¹°·Ð private static ÀÇ °æ¿ì´Â ClassA.BB ¿Í °°ÀÌ ÇÏÁö ¾Ê°í BB ¶ó°í ÇØµµ ¹«¹æÇϰÚÁö¸¸ ¸»ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.5 target=_blank name=s-6.2.5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.5</A> </SPAN>"super keyword´Â ºÎ¸ðÀÇ this" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.5" target=_blank>#</A></H4> <DIV>Java °³¹ßÀÚ ´ëºÎºÐÀº 'super' ¿¡ ´ëÇÏ¿© ±×·¸°Ô ¹Î°¨ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×°Å super() ³ª super.method1() °ú °°ÀÌ »ç¿ëµÇÁö ±× ÀÌ»ó¿¡ ´ëÇØ¼± ±íÀÌ »ý°¢ÇÏÁö ¾Ê°Ô µÈ´Ù. super¸¦ ÇѸ¶µð·Î Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV>"super keyword´Â instance methodµî¿¡¼ this¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °÷¿¡¼¸¸ ¾µ ¼ö ÀÖ´Ù. thisÀÇ ÀÚ¸®¿¡ super¶ó°í ¾²¸é ÇöÀç classÀÇ member°¡ ÂüÁ¶µÇ´Â ´ë½Å ºÎ¸ð classÀÇ member°¡ ÂüÁ¶µÇ´Â °ÍÀÌ´Ù."</DIV></DIV> <DIV> <H3><A class=con_link id=s-6.3 target=_blank name=s-6.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.3</A> </SPAN>»ó¼Ó¿¡ °üÇÑ ¶Ç ´Ù¸¥ ¹®Á¦ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.3" target=_blank>#</A></H3></DIV> <DIV> <H3><A class=con_link id=s-6.4 target=_blank name=s-6.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.4</A> </SPAN>±×¹ÛÀÇ ÇÔÁ¤ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-6.4.1 target=_blank name=s-6.4.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.4.1</A> </SPAN>"»ý¼ºÀÚ¿¡ void ¸¦ ºÙÀδٸé?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.1" target=_blank>#</A></H4> <DIV>»ý¼ºÀÚ¿¡ void¸¦ ºÙÀÎ´Ù¸é ±× class°¡ new µÉ¶§ ±× »ý¼ºÀÚ(?)°¡ ½ÇÇàµÉ±î?? ¾Æ·¡ÀÇ 'Constuctor'¶ó´Â ¹®ÀÚ¿Àº Ãâ·ÂµÉ±î?</DIV><BR> <DIV><PRE class=wiki>public class ConstructorTest{ void ConstructorTest(){ System.out.println("Constuctor"); } ..... }</PRE></DIV><BR> <DIV>Ãâ·ÂµÇÁö ¾Ê´Â´Ù. ¹°·Ð compile½Ã ¾Æ¹«·± °æ°íµµ ¾ø¾ú´Ù. Áï, void°¡ ºÙÀº ConstructorTest()´Â »ý¼ºÀÚ°¡ ¾Æ´Ï¶ó instance methodÀÏ »ÓÀ̾ú°í new½Ã¿¡´Â default constructor°¡ ½ÇÇà µÇ¾ú´ø °ÍÀÌ´Ù.</DIV></DIV> <DIV> <H4><A class=con_link id=s-6.4.2 target=_blank name=s-6.4.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.4.2</A> </SPAN>"if / switch ÀÇ ÇÔÁ¤" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.2" target=_blank>#</A></H4> <DIV>Java °³¹ßÀÚ¶ó¸é ´ëºÎºÐÀÌ Ãʺ¸½ÃÀý¿¡ if Á¶°ÇÀý¿¡ '==' ´ë½Å '='À» ½áº» ±â¾ïÀÌ ÀÖÀ»°ÍÀÌ´Ù. ¿¹¸¦ µé¾î "if( isListenLecture == Student.STUDENT )" ¸¦ "if( isListenLecture = Student.STUDENT )" ·Î À߸ø ¾´ °æ¿ìÀÌ´Ù. ¿©±â¼ Student.STUDENT´Â boolean typeÀÌ´Ù. ¿©±â¼ isListenLecture´Â Ç×»ó Student.STUDENT °ªÀ» °®°Ô µÇ´Â ¹ö±×°¡ »ý±ä´Ù. ÀÌ´Â compile½Ã¿¡ ¾Æ¹«·± °æ°íµµ ¾ø´Ù. ÀÌ·¸°Ô Çѹø ´çÇÏ°í ³ª¸é ¾ÕÀ¸·Î´Â '=='¸¦ Á¤È®È÷ ¾²°Ô µÇ°Å³ª ¾Æ´Ï¸é ´ÙÀ½°ú °°ÀÌ ¾´´Ù.</DIV><BR> <DIV>"if( isListenLecture )" ¶Ç´Â "if( !isListenLecture )" ¶ó°í ¸»ÀÌ´Ù. À̰ÍÀÌ ´õ¿í °£°áÇϰí Àǹ̵µ ºÐ¸íÇØ Áö±â ¶§¹®ÀÌ´Ù. ¶ÇÇÑ ´ÙÀ½ ¼Ò½º¿Í °°Àº ¿À·ùµµ ¹üÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ´Â À߸øµÈ indentationÀ¸·Î ºú¾îÁö´Â Ãʺ¸ÀÇ ÇÔÁ¤ÀÌ´Ù.</DIV><BR> <DIV>À̱ÛÀ» Àд ºÐ²² ÇѰ¡Áö ´çºÎµå¸®°í ½ÍÀº°ÍÀº ¿©±â¼ Ãʺ¸¶ó°í ´Ù ±×·±°Ç ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù.</DIV><BR> <DIV><PRE class=wiki>.... if( a < 5 ) b = 3; c = 10; //À̺κÐÀº ³ªÁß¿¡ Ãß°¡µÈ ¶óÀÎÀÌ´Ù. if( isStudent ) if( isFemale ) sayHello("Hi~~"); else sayHello("Hello Professor~");</PRE></DIV><BR> <DIV>À§ÀÇ ¼Ò½ºÁß c = 10; ÀÌ if( a < 5 )ÀÇ ÂüÀ϶§ ¼öÇàµÈ´Ù°í ¿ÀÇØÇÒ ¼öµµ ÀÖ°í, sayHello("Hello Professor~"); ºÎºÐÀÌ if( isStudent )ÀÇ else ºÎºÐÀ̶ó°í ¿ÀÇØ ÇÒ ¼öµµ ÀÖ´Ù. À̰ÍÀº ÀüÀûÀ¸·Î indentation(µé¿©¾²±â)ÀÇ ºÒÂû·Î °³¹ßÀÚ°¡ À߸ø ÀÐÀ» ¼ö ÀÖ´Â ºÎºÐÀÌ´Ù. Java Coding Style¿¡¼´Â if¹® ´ÙÀ½¿¡ ÇÑÁÙÀÇ Äڵ尡 ÀÖ´õ¶óµµ {} ¸¦ »ç¿ëÇÏ±æ ±Ç°íÇÑ´Ù. ±×·¯¸é ù¹øÂ° if¹®°ú °°Àº ¿À·ù¸¦ ¹æÁöÇÒ ¼ö ÀÖ°í µÎ¹øÂ° if¹®¿¡¼µµ º¸´Ù °¡µ¶¼ºÀÌ »ý±æ °ÍÀÌ´Ù.</DIV><BR> <DIV>ÀÌ¿Í À¯»çÇÑ °ÍÀ¸·Î switch¹®ÀÇ case Àý¿¡¼ break¸¦ ¾²Áö ¾Ê¾Æ Ç×»ó µ¿ÀÏÇÏ°Ô Ã³¸®µÇ´Â ¹ö±×µµ °æÇèÇØ º¸¾ÒÀ» °ÍÀÌ´Ù.</DIV></DIV> <DIV> <H2><A class=con_link id=s-7 target=_blank name=s-7></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>7</FONT></A> </SPAN>Java ±â´É Àû¿ë ¸î°¡Áö <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-7.1 target=_blank name=s-7.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.1</A> </SPAN>´ë±Ô¸ð °³¹ß¿¡¼ interface ºÐ¸®Çϱâ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-7.1.1 target=_blank name=s-7.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.1.1</A> </SPAN>"interface ºÐ¸®ÀÇ Çʿ伺" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1.1" target=_blank>#</A></H4> <DIV>Java¿Í °°Àº °´Ã¼ÁöÇâ¾ð¾î¿¡¼´Â °ø°³ÇØ¾ß ÇÒ method¸¸À» publicÀ¸·Î Çϰí, °ø°³ÇÒ Çʿ䰡 ¾ø´Â °ÍÀº privateÀ¸·Î ÇÏ¿© classÀÇ »ó¼¼ÇÑ ³»¿ëÀ» ÀºÆóÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ´Ù. ±×·±µ¥ private ºÎºÐÀÌ ÀºÆóµÇ¾î ÀÖ´Â°Í Ã³·³ º¸À̴°¡?</DIV><BR> <DIV>¼Ò½º¸¦ º¸¸é ÈÍÈ÷ µé¿©´Ù º¸À̴µ¥?</DIV><BR> <DIV>´ë±Ô¸ð °³¹ßÀº ÇϺΠclassºÎÅÍ bottom-upÀ¸·Î ÁøÇàÇÏ´Â °ÍÀÌ ÀÌ»óÀûÀÎ ÇüÅÂÀÏ °ÍÀÌ´Ù. ±×·± ÇüÅ·Π°³¹ßÇϸé ÀÓÀÇÀÇ ½ÃÁ¡¿¡¼ Å×½ºÆ®¸¦ ÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª Çö½ÇÀûÀ¸·Î ´Ü±â°£¿¡ ¸¹Àº ¼öÀÇ °³¹ßÀÚ°¡ ºÙ¾î¼ ´Ü½Ã°£¿¡ °³¹ßÀ» ÁøÇàÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ¶ÇÇÑ ¼·Î È£ÀÀÇÏ´Â °ü°è¿¡ ÀÖ´Â classµéÀº ¾î´ÀÂÊÀÌ ÇϺÎÀÎÁö Á¤ÀÇÇϱⰡ ³°¨ÇÒ¶§°¡ ¸¹´Ù. ÀÌ·±°æ¿ì ¿ì¸®´Â ÈçÈ÷ package´ÜÀ§·Î ³ª´©¾î °³¹ßÇÑ´Ù. ÇÏÁö¸¸ ÀÌ·²°æ¿ì ¾î´ÀÁ¤µµ ÄÚµùÀÌ Á¾·áµÉ¶§±îÁö Å×½ºÆ®ÇϱⰡ »ó´çÈ÷ Èûµé¾î Áø´Ù. Java¿¡¼´Â private member¿Í method ±¸Çö±îÁö ÇϳªÀÇ ÆÄÀÏ¿¡ ÄÚµùÇϴµ¥ °³¹ß Áß°£¿¡ °ø°³ÇÏ¿© ´Ù¸¥ °³¹ßÀÚ°¡ ÀÌ¿ëÇØ¾ß ÇÏ´Â class¸¦ ¹èÆ÷ÇÒ ¼ö ¾øÀ¸¹Ç·Î µ¿½Ã °³¹ßÀÌ ±îÄ¥ÇØ Áø´Ù.</DIV><BR> <DIV>ÀÌ »óȲ¿¡¼ ´Ù¸¥ package(°³¹ßÀÚ)¿¡ °ø°³ÇØ¾ß ÇÏ´Â class ºÎºÐÀ» interface·Î °ø°³ÇÏ¸é ¸¹Àº ºÎºÐ À¯¿¬ÇÏ°Ô µÈ´Ù. ÀÌ interface¸¦ ´Ù¸¥ °³¹ßÀÚ´Â °³¹ßÀ» Çϰí Å×½ºÆ®°¡ ÇÊ¿äÇÏ´Ù¸é TestImpl class¸¦ ¸¸µé¾î ÇϸéµÈ´Ù. RMI³ª CORBA¿¡¼µµ StubÀº ÀÌ·±½ÄÀ¸·Î IDLÀ» Á¤ÀÇÇÑ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-7.2 target=_blank name=s-7.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.2</A> </SPAN>Java¿¡¼ÀÇ ¿°ÅÇü <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.2" target=_blank>#</A></H3> <DIV>Java¿¡¼´Â ¿°ÅÇü-CÀÇ ±¸Á¶Ã¼, °ø¿ëü-ÀÌ ¾ø´Ù. ¿°ÅÇüÀÌ ¿Ö ÇÊ¿äÇÏ³Ä°í ¹Ý¹®ÇÏ´Â °³¹ßÀÚµµ ÀÖÀ» °ÍÀÌ´Ù.</DIV><BR> <DIV>ÇÏÁö¸¸ ¿°ÅÇüÀÌ ¾ø¾î °ï¶õÀ» °æÇèÇÑ °³¹ßÀÚµµ ²Ï ÀÖÀ¸¸®¶ó º»´Ù. ÃÖ±Ù¾ð¾î(ƯÈ÷ °´Ã¼ÁöÇâ ¾ð¾î) - Java, Eiffel, Oberonµî - ¿¡´Â ¿°ÅÇüÀº Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. C#¿¡´Â ÀÖ±ä ÇÏÁö¸¸.</DIV><BR> <DIV>ÀÌ·± ÀÌÀ¯·Î Java AWTÀÇ Label class´Â ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù.(ÅØ½ºÆ®ÀÇ Á¤·Ä°ª°ü·Ã)</DIV><BR> <DIV><PRE class=wiki>public static final int LEFT = 0; public static final int CENTER = 1; public static final int RIGHT = 2; ... label.setAlignment(Label.CENTER); ...</PRE></DIV><BR> <DIV>ÇÏÁö¸¸ À§ÀÇ ¼Ò½º¿¡´Â ¹®Á¦°¡ ÀÖ´Ù. setAlignment() methodÀÇ ÀÎÀÚ°¡ intÀÎ °ÍÀÌ´Ù. ¸¸¾à À§¿¡ Á¤ÀÇÇÑ 0, 1, 2°¡ ¾Æ´Ñ ´Ù¸¥ int °ªÀÌ µé¾î°¡µµ compile/runtime½Ã ¾Ë¼ö°¡ ¾ø´Ù. ±×·¡¼ ÁÖ¼®À» ´Þ°Ô µÇ´Âµ¥, ÁÖ¼®À̶ó ÇÔÀº Á¤¸»ÀÌÁö ÃÖÈÄÀÇ ¼ö´ÜÀ̶ó°í ºÁ¾ß ÇÑ´Ù.</DIV><BR> <DIV>½ÇÁ¦·Î ¿ì¸®°¡ °³¹ßÇØ ³õÀº ¼Ò½º¿¡µµ ÀÌ·±ºÎºÐÀÌ ÀÖÀ¸¸®¶ó ¿¹»óµÈ´Ù. ÀÌ ¹®Á¦¸¦ ¾î¶»°Ô Çϸé ÇØ°áÇÒ ¼ö ÀÖÀ»±î? <DIV class=indent> </DIV>Java¿¡¼ ¿°ÅÇüÀ» Çѹø ¸¸µé¾î º¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>//LabelAlignment.java public class LabelAlignment { private LabelAlignment() {} //ÀÌ´Â »ý¼ºÀÚ¸¦ privateÀ¸·Î ÇÏ¿© ´Ù¸¥µ¥¼´Â ¸¸µéÁö ¸øÇϵµ·Ï ÇϱâÀ§ÇÔÀÌ´Ù. public static final LabelAlignment LEFT = new LabelAlignment(): public static final LabelAlignment CENTER = new LabelAlignment(): public static final LabelAlignment RIGHT = new LabelAlignment(): } //º¯ÇüµÈ Label.java ÀÇ ÀϺÎ.. public synchronized void setAlignment(LabelAlignment alignment){ if( alignment == LabelAlignment.LEFT ){ ...//¿ÞÂÊÀ¸·Î ¸ÂÃß±â.. }else if( ... ... } } ...</PRE></DIV><BR> <DIV>À§¿¡¼ ÀÛ¼ºÇÑ ¼Ò½º´Â Àß ÀÛµ¿ÇÑ´Ù. ¼·Î ´Ù¸¥ 3°³ÀÇ instanceÀ̹ǷΠreference°¡ ´Þ¶ó '==' ¿¬»êµµ °¡´ÉÇϰí, ÈǸ¢ÇÏ´Ù.</DIV><BR> <DIV>ÇÏÁö¸¸ ÇѰ¡Áö ¹®Á¦°¡ ÀÖ´Ù. LabelAlignment°¡ SerializableÇÑ class¿¡¼ serializeµÇ¾ú´Ù deserialize µÈ´Ù¸é?</DIV><BR> <DIV>LabelAlignment alignment ´Â »õ·Î¿î instance°¡ µÇ°í serializeÀüÀÇ reference¿Í ´Ù¸¥ ÂüÁ¶ À§Ä¡¸¦ °®°Ô µÇ¾î '==' ¿¬»êÀº ¹ö±×¸¦ ¹ß»ý½ÃŲ´Ù. <DIV class=indent> </DIV>±×·³ À̰͸¸ ÇØ°áÇÏ¸é µÇ°Ú´Âµ¥, ¾î¶»°Ô refactoringÇÏ¸é µÉ °ÍÀΰ¡? '==' ¿¬»ê ´ë½Å equals·Î º¯ÇüÇÏ¸é µÇ°Ú´Âµ¥.</DIV><BR> <DIV><PRE class=wiki>//LabelAlignment.java public class LabelAlignment { private int flag; private LabelAlignment(int flag){ this.flag = flag; } public static final LabelAlignment LEFT = new LabelAlignment(0): public static final LabelAlignment CENTER = new LabelAlignment(1): public static final LabelAlignment RIGHT = new LabelAlignment(2): public boolean equals(Object obj){ return ((LabelAlignment)obj).flag == this.flag; } } //º¯ÇüµÈ Label.java ÀÇ ÀϺÎ.. public synchronized void setAlignment(LabelAlignment alignment){ if( LabelAlignment.LEFT.equals(alignment) ){ ...//¿ÞÂÊÀ¸·Î ¸ÂÃß±â.. }else if( ... ... } } ...</PRE></DIV><BR> <DIV>ÇÏÇÏ, Serialize±îÁö Àß ÀÛµ¿ÇÑ´Ù. ^^;</DIV><BR> <DIV>¿©±â¼ Debug¸¦ °í·ÁÇÑ´Ù¸é 0, 1, 2 ´ë½Å ¹®ÀÚ¿·Î "LEFT", "CENTER", "RIGHT"·Î ÇÑ´Ù¸é ´õ¿í ¸íÈ®ÇÏÁö ¾ÊÀ»±î?</DIV><BR> <DIV>(ÁÖÀÇ) À§¿¡¼Ã³·³ LabelAlignment.LEFT ¶ó°í ¾²±â ½È¾î¼ »ó¼ö interface¸¦ ¸¸µé¾î ±×°É implements ÇÏ¿© ±×³É LEFT ¶ó°í ¾²´Â °ÍÀ» »ÑµíÇØ ÇÏ¸ç ¾²´Â °³¹ßÀÚµéÀÌ ÀÖ´Ù. ¹°·Ð SwingÀÇ ¼Ò½ºµéÀ» º¸´Ùº¸¸é SwingConstants¶ó´Â interface¿¡ LEFT¸¦ ºñ·ÔÇÏ¿© ¿Â°® Àâ´ÙÇÑ »ó¼ö¸¦ Áý¾î³Ö¾î³õ°í ¿©±â Àú±â¼ implementsÇØ¼ »ç¿ëÇϰí ÀÖ´Ù. ÀÌ·± ÄÚµù ½ºÅ¸ÀÏÀº '³» ½ºÅ¸ÀÏÀ̾ß~' °¡ ¾Æ´Ï¶ó ³¿»õ³ª´Â ÄÚµåÀÌ´Ù.</DIV><BR> <DIV>LEFT¶ó´Â °ÍÀÌ ±¸ÇöÇÑ class¿¡ ÀÌ¹Ì ÀÖÀ» ¼ö ÀÖÀ» ¼ö ÀÖÀ»»Ó¾Æ´Ï¶ó ±¸ÇöÇÑ ¸ðµç Ŭ·¡½º¿¡¼ LEFT¸¦ º¸À¯ÇÏ¿© SwingConstants.LEFT»Ó ¾Æ´Ï¶ó Impl.LEFT·Îµµ »ç¿ëµÇ°Ô µÇ¾î ¿Â°® È¥¶õÀ» ÃÊ·¡ÇÏ°Ô µÈ´Ù. ÀԷ·®À» ÁÙÀ̱â À§ÇØ interface¸¦ implements ÇØ¼´Â ¾ÈµÇÁö ¾ÊÀ»±î?</DIV></DIV> <DIV> <H3><A class=con_link id=s-7.3 target=_blank name=s-7.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.3</A> </SPAN>Debug write <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.3" target=_blank>#</A></H3> <DIV>C¿¡¼´Â ´ÙÀ½°ú °°ÀÌ pre-process·Î Á¤ÀÇÇϸé DEBUG¶ó´Â ½Äº°ÀÚ¸¦ #defineÇÏÁö ¾ÊÀ¸¸é ÄÄÆÄÀÏÈÄ ÇØ´ç ¼Ò½ºÀÇ ºÎºÐÀÌ »èÁ¦µÈ´Ù.</DIV><BR> <DIV><PRE class=wiki>#ifdef DEBUG fprintf(stderr, "error...%dn", error); #endif /* DEBUG */</PRE></DIV><BR> <DIV>±×·³ Java¿¡¼´Â?</DIV><BR> <DIV>Java¿¡¼´Â Pre-process°¡ ¾øÁö¸¸ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇßÀ»¶§ Debug.isDebug °¡ final·Î ¼±¾ðµÇ¾î ÀÖÀ¸¸é compileÈÄ ¾Æ·¡ 3ÁÙ ¸ðµÎ »èÁ¦ µÈ´Ù.(´Ü Debug.isDebug °¡ false ·Î ÃʱâÈ µÇ¾ú´Ù¸é Á¦°ÅµÈ´Ù.)</DIV><BR> <DIV><PRE class=wiki>if( Debug.isDebug ){ System.out.println("error..." + error); }</PRE></DIV><BR> <DIV>Java´Â compile½Ã byte code »ý¼º½Ã finalÀº Á¤ÀûÀ¸·Î ÆÇ´ÜÇÏ¿© ¹Ì¸® Á¤ÀÇÇϱ⠶§¹®¿¡ À§ÀÇ 3ÁÙÀº »èÁ¦µÉ ¼ö ÀÖ´Ù. if¹®°ú ÇÔ²² ¾ø¾îÁö°Ô µÇ¹Ç·Î ó¸® ¼Óµµ¿¡ ÇÇÇØ¸¦ ÁÖÁö ¾Ê´Â´Ù. ´Ü, ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº Debug.isDebug °ªÀÌ º¯°æµÇ¸é ÀÌ °ÍÀ» »ç¿ëÇϰí ÀÖ´Â Ãøµµ ¸ðµÎ ÇÔ²² ´Ù½Ã compileÇØ¾ß ÇÑ´Ù. bytecode¸¦ ´Ù½Ã ¸¸µé¾î¾ß Çϱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>±×·±µ¥, ÀÌ ¼Ò½º¸¦ Debug.write()¿Í °°ÀÌ static À¸·Î ÇÏ¿© ÀÌ method³»¿¡¼ ÆÇ´ÜÇÏ°Ô ÇÏ¸é Æí¸®ÇÒÅÙµ¥. ±×¸®°í classº°·Î ON/OFF 󸮸¦ ÇÒ ¼ö ÀÖÀ¸¸é ÁÁÀ»ÅÙµ¥, ¾îÂî ÇÏ¸é °¡´ÉÇÒ °ÍÀΰ¡?</DIV><BR> <DIV>±×·³ ¸ÕÀú È£ÃâÇÑ ÂÊÀÇ classÀ̸§À» ã¾Æº¸ÀÚ. Á¢±ÙÀº ExceptionÀÇ printStackTrace()·Î ºÎÅÍ ½ÃÀ۵Ǿú´Ù. ÇÏÁö¸¸ ÀÌ ¼Ò½º¿¡´Â Exception °´Ã¼¸¦ newÇÑ ½ÃÁ¡¿¡ °áÁ¤µÇ¾î ÀÖ´Ù. ±×·¡¼ ºÎ¸ðÀÎ ThrowableÀÇ »ý¼ºÀÚ¸¦ È®ÀÎÇØ º¸´Ï fillInStackTrace() ·Î µÇ¾îÀִµ¥ ÀÌ method´Â native method¿´´Ù.</DIV><BR> <DIV>API Reference¸¦ º¸¸é Thread class¿¡¼´Â dumpStackTrace()¶ó´Â method°¡ ÀÖ¾ú´Ù. ¼Ò½º¸¦ º¸´Ï, ±×°Íµµ »ý¼º½ÃÁ¡À̾ú´Ù. ¾Æ¹«·¡µµ ¿¹¿Ü¹æ¸é¿¡¼ ã´Â°Ç ¹«¸®Àεí Çß´Ù.</DIV><BR> <DIV>±×·¡¼ classÀÇ È£Ãâ°èÃþÀ» ³ªÅ¸³»´Â java.lang.SecurityManagerÀÇ getClassContext() method·Î Á¢±ÙÇÏ¿´´Ù. sample ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>// 1. GetCallerSecurityManager.java public final class GetCallerSecurityManager extends SecurityManager { public Class[] getStackTrace(){ return this.getClassContext(); } } // 2. GetCallerClass.java public final class GetCallerClass { private static GetCallerSecurityManager mgr; static{ mgr = new GetCallerSecurityManager(); System.setSecurityManager(mgr); } public static void writeCaller(String str){ Class[] stk = mgr.getStackTrace(); int size = stk.length; for(int i = 0; i < size; i++){ System.out.println("stk[" + i + "] = " + stk[i]); } String className = stk[2].getName(); System.out.println("className is " + className + " : " + str); } } // 3. GetCallerClassMain1 : È£ÃâÇϴ Ŭ·¡½º ¿¹Á¦ 1 public class GetCallerClassMain1 { public static void main(String[] args){ GetCallerClass.writeCaller(", real is 1."); } } // 4. GetCallerClassMain1 : È£ÃâÇϴ Ŭ·¡½º ¿¹Á¦ 2 public class GetCallerClassMain2 { public static void main(String[] args){ GetCallerClass.writeCaller(", real is 2."); } }</PRE></DIV><BR> <DIV>À§ÀÇ 3¹ø ÁÖ¼®°ú 4¹ø ÁÖ¼® ºÎºÐÀ» ¼öÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ ³ª¿Â´Ù.</DIV><BR> <DIV><PRE class=wiki>className is GetCallerClassMain1 : , real is 1. className is GetCallerClassMain2 : , real is 2.</PRE></DIV><BR> <DIV>Á¤È®È÷ È£ÃâÇÑ Å¬·¡½º¸¦ Ç¥ÇöÇϰí ÀÖ´Ù. À̰ÍÀ» ºñ±³Çؼ Ŭ·¡½ºº° ON/OFF¸¦ ±¸ÇöÇÏ¸é µÈ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H2><A class=con_link id=s-8 target=_blank name=s-8></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>8</FONT></A> </SPAN>Java 5.0 Tiger ¿¡ ´ëÇÏ¿© <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8" target=_blank><FONT size=3>#</FONT></A></H2> <DIV>Tiger¿¡¼´Â »õ·Î¿î °³³äÀÇ Àû¿ëÀÌ ¸¹Àº ºÎºÐ ½Ãµµ µÇ¾ú´Ù. ÀÌÁß °¡Àå ±âº»ÀÌ µÇ´Â ¸î°¡Áö¸¦ »ìÆìº¸ÀÚ. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.1 target=_blank name=s-8.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.1</A> </SPAN>Working with java.util.Arrays <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.1" target=_blank>#</A></H3> <DIV>Tiger¿¡¼´Â ¹«¾ùº¸´Ùµµ Collection classµé¿¡ ´ëÇØ ¸¹Àº ºÎºÐ Á¤ºñÇÏ¿´´Ù. ¿¹¸¦ µé¸é for/in ±¸¹® Áö¿ø°ú Generic Type member¿Í Arrays Utility class µîÀÌ´Ù. ±×·³ Collection¿¡ ´ëÇÑ static methodµéÀ» ´ã°í ÀÖ´Â Arrays ¿¡ ´ëÇØ ´ÙÀ½ example·Î ÇÑ´«¿¡ »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class ArraysTester { private int[] arr; private String[] strs; public ArraysTester(int size) { arr = new int[size]; strs = new String[size]; for (int i = 0; i < size; i++) { if (i < 10) { arr[i] = 100 + i; } else if (i < 20) { arr[i] = 1000 - i; } else { arr[i] = i; } strs[i] = "str" + arr[i]; } } public int[] getArr() { return this.arr; } public String[] getStrs() { return this.strs; } public static void main(String[] args) { int size = 50; ArraysTester tester = new ArraysTester(size); int[] testerArr = tester.getArr(); int[] cloneArr = tester.getArr().clone(); String[] testerStrs = tester.getStrs(); String[] cloneStrs = tester.getStrs().clone(); // clone test if (Arrays.equals(cloneArr, testerArr)) { System.out.println("clonse int array is same."); } else { System.out.println("clonse int array is NOT same."); } if (Arrays.equals(cloneStrs, testerStrs)) { System.out.println("clonse String array is same."); } else { System.out.println("clonse String array is NOT same."); } // 2ºÎÅÍ 10±îÁö °ª ¼ÂÆÃ Arrays.fill(cloneArr, 2, 10, new Double(Math.PI).intValue()); testerArr[10] = 98; testerStrs[10] = "corea"; testerStrs[11] = null; List<String> listTest = Arrays.asList(testerStrs); System.out.println("listTest[10] = " + listTest.get(10)); System.out.println("------- unsorted arr -------"); System.out.println("Arrays.toString(int[]) = " + Arrays.toString(testerArr)); System.out.println("Arrays.toString(String[]) = " + Arrays.toString(testerStrs)); Arrays.sort(testerArr); // Arrays.sort(testerStrs); //NullPointerException in sort method..(nullÀÌ ¾ø´õ¶óµµ ±æÀÌ¿¡ ´ëÇÑ Å©±â üũ´Â ¸øÇÔ) Arrays.sort(testerStrs, new Comparator<String>() { public int compare(String s1, String s2) { if (s1 == null && s2 == null) { return 0; } else if (s1 == null && s2 != null) { return -1; } else if (s1 != null && s2 == null) { return 1; } else if (s1.length() < s2.length()) { return -1; } else if (s1.length() > s2.length()) { return 1; } else if (s1.length() == s2.length()) { return 0; } else { return s1.compareTo(s2); } } }); System.out.println("------- sorted arr -------"); System.out.println("Arrays.toString(int[]) = " + Arrays.toString(testerArr)); System.out.println("Arrays.toString(String[]) = " + Arrays.toString(testerStrs)); System.out.println("------------------------------------------------"); String[][] mstrs1 = { { "A", "B" }, { "C", "D" } }; String[][] mstrs2 = { { "a", "b" }, { "c", "d" } }; String[][] mstrs3 = { { "A", "B" }, { "C", "D" } }; System.out.println("Arrays.deepToString(mstrs1) = " + Arrays.deepToString(mstrs1)); System.out.println("Arrays.deepToString(mstrs2) = " + Arrays.deepToString(mstrs2)); System.out.println("Arrays.deepToString(mstrs3) = " + Arrays.deepToString(mstrs3)); if( Arrays.deepEquals(mstrs1, mstrs2)) { System.out.println("mstrs1 is same the mstrs2."); }else { System.out.println("mstrs1 is NOT same the mstrs2."); } if( Arrays.deepEquals(mstrs1, mstrs3)) { System.out.println("mstrs1 is same the mstrs3."); }else { System.out.println("mstrs1 is NOT same the mstrs3."); } System.out.println("mstrs1's hashCode = " + Arrays.deepHashCode(mstrs1)); System.out.println("mstrs2's hashCode = " + Arrays.deepHashCode(mstrs2)); System.out.println("mstrs3's hashCode = " + Arrays.deepHashCode(mstrs3)); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.2 target=_blank name=s-8.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.2</A> </SPAN>Using java.util.Queue interface <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.2" target=_blank>#</A></H3> <DIV>Queue¸¦ ÀÌ¿ëÇÏ¿© First In First OutOrderingÇÑ Queue¸¦ ±¸Çö °¡´ÉÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; public class QueueTester { public static void main(String[] args) { System.out.println("---------- testFIFO ----------"); testFIFO(); System.out.println("---------- testOrdering ----------"); testOrdering(); } private static void testFIFO() { Queue<String> q = new LinkedList<String>(); q.add("First"); q.add("Second"); q.add("Third"); String str; while ((str = q.poll()) != null) { System.out.println(str); } } private static void testOrdering() { int size = 10; Queue<Integer> qi = new PriorityQueue<Integer>(size); Queue<String> qs = new PriorityQueue<String>(size); for (int i = 0; i < size; i++) { qi.offer(10 - i); qs.offer("str" + (10 - i)); } for (int i = 0; i < size; i++) { System.out.println("qi[" + i + "] = " + qi.poll() + ", qs[" + i + "] = " + qs.poll()); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.3 target=_blank name=s-8.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.3</A> </SPAN>java.lang.StringBuilder »ç¿ëÇϱâ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.3" target=_blank>#</A></H3> <DIV>StringBuffer°¡ synchronizeÇÏÁö ¾ÊÀº methodµé·Î ±¸¼ºµÈ µíÇÑ StringBuilder¸¦ »ç¿ëÇϹǷΠ¼º´É Çâ»óÀ» µµ¸ðÇÒ¼ö ÀÖ´Ù. »ç¿ë¹ýÀº StringBuffer¿Í µ¿ÀÏÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class StringBuilderTester { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("str1"); list.add("str2"); list.add("str3"); String ret = appendItems(list); System.out.println("ret = " + ret); } private static String appendItems(List<String> list) { StringBuilder sb = new StringBuilder(); for (Iterator<String> iter = list.iterator(); iter.hasNext();) { sb.append(iter.next()).append(" "); } return sb.toString(); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.4 target=_blank name=s-8.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.4</A> </SPAN>Using Type-Safe Lists <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.4" target=_blank>#</A></H3> <DIV>Collection¿¡ typeÀ» ¸í½ÃÇÏ¿© type-safe ÇÏ°Ô Ã³¸® °¡´É. ¾Æ·¡¿¡¼ typeÀ» ¸í½ÃÇÏÁö ¾ÊÀ» °æ¿ì compile error°¡ ³²À» º¸¿©ÁØ´Ù. tipÀ¸·Î Number¸¦ ÀÌ¿ëÇÏ¿© byte, short, int, long, double, float µ¿½Ã »ç¿ëÇÏ´Â ºÎºÐ ÂüÁ¶.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class ListTester { public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add("str1"); list.add("str2"); list.add(new Integer(123)); // <-- StringÀÌ ¾Æ´Ï¹Ç·Î compile error!! //Iterator¿¡ String typeÀ» ¸í½ÃÇϹǷΠÁ¤»èÀÛµ¿µÊ. for (Iterator<String> iter = list.iterator(); iter.hasNext();) { String str = iter.next(); System.out.println("srt = " + str); } //Iterator¿¡ String typeÀ» ¸í½ÃÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î ¾Æ·¡ A ºÎºÐ¿¡¼ compile ¿À·ù ¹ß»ý!! for (Iterator iter = list.iterator(); iter.hasNext();) { String str = iter.next(); //A System.out.println("srt = " + str); } //byte, short, int, long, double, float µ¿½Ã »ç¿ë List<Number> lstNum = new LinkedList<Number>(); lstNum.add(1); lstNum.add(1.2); for (Iterator<Number> iter = lstNum.iterator(); iter.hasNext();) { Number num = iter.next(); System.out.println("num = " + num); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.5 target=_blank name=s-8.5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.5</A> </SPAN>Writing Generic Types <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.5" target=_blank>#</A></H3> <DIV>class ³ª interface keyword¿¡ typeÀ» ¸í½ÃÇÏ¿© µ¿ÀÏ Å¸ÀÔ ¸í½Ã °¡´É. ÁÖÀÇ ÇÒ Á¡Àº any typeÀº static ÀÏ ¼ö ¾ø´Ù.(µ¿ÀûÀ¸·Î typeÀÌ Á¤ÇØÁö¹Ç·Î)</DIV><BR> <DIV><PRE class=wiki>class AnyTypeList<T> { //class AnyTypeList<T extends Number> { // <-- ÀÌ´Â Number¸¦ »ó¼ÓÇÑ typeÀº Çã¿ëÇϰڴٴ ÀǹÌ. private List<T> list; //private static List<T> list; // <-- ÀÌ´Â Á¤ÀûÀ̹ǷΠcompile error ¹ß»ý!!! public AnyTypeList(){ list = new LinkedList<T>(); } public boolean isEmpty(){ return list == null || list.size() == 0; } public void add(T t){ list.add(t); } public T grap(){ if (!isEmpty() ) { return list.get(0); } else { return null; } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.6 target=_blank name=s-8.6></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.6</A> </SPAN>»õ·Î¿î static final enum <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.6" target=_blank>#</A></H3> <DIV>¿¹Á¦¸¦ ÅëÇØ ¾Ë¾Æº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import com.jeid.BaseObject; import com.jeid.MyLevel; public class EnumTester extends BaseObject { private static long start = System.currentTimeMillis(); public static void main(String[] args) { try { test(); enum1(); } catch (Exception e) { e.printStackTrace(); } printEllapseTime(); } private static void test() throws Exception { byte[] b = new byte[0]; System.out.println(b.length); } private static void enum1() { //enum TestEnum { A, B }; //enum cannot be local!!! for(MyVO.TestEnum te: MyVO.TestEnum.values()){ System.out.println("Allow TestEnum value : " + te); } System.out.println("---------------------------------------"); MyVO vo = new MyVO(); vo.setName("enum1"); vo.setLevel(MyLevel.A); System.out.println(vo); System.out.println("isA = " + vo.isA() + ", isGradeA = " + vo.isLevelA()+ ", isValueOfA = " + vo.isValueOfA()); System.out.println("getLevelInKorean = " + vo.getLevelInKorean()); } private static void printEllapseTime() { System.out.println("==> ellapseTime is " + (System.currentTimeMillis() - start) + " ms."); } } package com.jeid.tiger; import com.jeid.BaseObject; import com.jeid.MyLevel; public class MyVO extends BaseObject { enum TestEnum { A, B }; // this is same public static final private int id; private String name; private MyLevel grade; // private List<T> list; public MyLevel getLevel() { return grade; } public void setLevel(MyLevel grade) { this.grade = grade; } public boolean isA() { return "A".equals(this.grade); } public boolean isValueOfA() { return MyLevel.valueOf("A").equals(grade); } public boolean isLevelA() { return MyLevel.A.equals(this.grade); } //A,B,C..´ë½Å 0,1,2... µµ µ¿ÀÏÇÔ. public String getLevelInKorean() { switch(this.grade){ case A: return "¼ö"; case B: return "¿ì"; case C: return "¹Ì"; case D: return "¾ç"; case E: return "°¡"; default: return "¾øÀ½"; } } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.7 target=_blank name=s-8.7></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.7</A> </SPAN>Using java.util.EnumMap <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.7" target=_blank>#</A></H3> <DIV>java.util.Map°ú µ¿ÀÏÇϳª key°¡ enum typeÀ̾î ÇÑ´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.EnumMap; public class EnumMapTester { private enum MyEnum { A, B, C }; // this is same the static final.. public static void main(String[] args) { MyEnum[] enums = MyEnum.values(); System.out.println("MyEnum is " + enums[0] + ", " + enums[1] + ", " + enums[2]); EnumMap<MyEnum, String> em = new EnumMap<MyEnum, String>(MyEnum.class); em.put(MyEnum.A, "¼ö"); em.put(MyEnum.B, "¿ì"); em.put(MyEnum.C, "¹Ì"); em.put(MyEnum.B, "°¡"); //key Áߺ¹Àº HashMap°ú µ¿ÀÏÇÏ°Ô overwriteÀÓ. for (MyEnum myEnum : MyEnum.values()) { System.out.println(myEnum + " => " + em.get(myEnum)); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.8 target=_blank name=s-8.8></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.8</A> </SPAN>Using java.util.EnumSet <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.8" target=_blank>#</A></H3> <DIV>java.util.Set°ú µ¿ÀÏÇϳª value°¡ enum typeÀ̾î ÇÑ´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.EnumSet; public class EnumSetTester { private enum MyEnum { A, B, C, a, b, c }; // this is same the static final.. public static void main(String[] args) { MyEnum[] enums = MyEnum.values(); System.out.println("MyEnum is " + enums[0] + ", " + enums[1] + ", " + enums[2]); EnumSet<MyEnum> es1 = EnumSet.of(MyEnum.A, MyEnum.B, MyEnum.C); EnumSet<MyEnum> es2 = EnumSet.of(MyEnum.a, MyEnum.b, MyEnum.c); EnumSet<MyEnum> es3 = EnumSet.range(MyEnum.a, MyEnum.c); if (es2.equals(es3)) { System.out.println("e2 is same e3."); } for (MyEnum myEnum : MyEnum.values()) { System.out.println(myEnum + " contains => " + es1.contains(myEnum)); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.9 target=_blank name=s-8.9></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.9</A> </SPAN>Convert Primitives to Wrapper Types <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.9" target=_blank>#</A></H3> <DIV>int, short, char, long, doubleµî primitive¿Í À̵éÀÇ Object Wrapper ÀÎ Integer, Shrt, Charµî °£ÀÇ converting¿¡ ÀÖ¾î ÀÚµ¿À¸·Î ó¸®ÇØÁÖ´Â boxing°ú unboxingÀÌ Áö¿ø µÊ¿¡ µû¶ó type¿¡ ´ëÇÑ À¯¿¬ÇÑ Ã³¸®°¡ °¡´ÉÇØÁ³´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class AutoBoxingTester { public static void main(String[] args) { int i = 0; Integer ii = i; // boxing. JDK 1.4¿¡¼´Â incompatible type error°¡ ¹ß»ý Çß¾úÀ¸³ª Tiger¿¡¼´Â ±¦Âú´Ù. int j = ii; // unboxing for (ii = 0; ii < 5; ii++) { // IntegerÀε¥µµ ++ ¿¬»êÀÚ Áö¿ø. } i = 129; ii = 129; if (ii == i) { System.out.println("i is same ii."); } // -128 ~ 127 »çÀÌÀÇ ¼ö´Â unboxingÀÌ µÇ¾î == ¿¬»êÀÌ Çã¿ëµÇÁö¸¸, // ±× ¹üÀ§ ¿ÜÀÇ °æ¿ì Integer·Î boxingµÈ »óŹǷΠequals¸¦ ÀÌ¿ëÇØ¾ßÇÔ. // ÀÌ´Â ¹ö±×°¡ ¹ß»ýÇßÀ» °æ¿ì ã±â ½±Áö ¾ÊÀº ´ÜÁ¡µµ ³»Æ÷Çϰí ÀÖ´Ù.!! checkIntegerSame(127, 127); // same checkIntegerSame(128, 128); // Not same checkIntegerEquals(128, 128); // equals checkIntegerSame(-128, -128); // same checkIntegerSame(-129, -129); // Not same checkIntegerEquals(-129, -129); // equals System.out.println("--------------------------------------------"); Boolean arriving = false; Boolean late = true; String ret = arriving ? (late ? "µµÂøÇßÁö¸¸ ´Ê¾ú³×¿ä." : "Á¦½Ã°£¿¡ Àß µµÂøÇß±º¿ä.") : (late ? "µµÂøµµ ¸øÇÏ°í ´Ê¾ú±º¿ä." : "µµÂøÀº ¸øÇßÁö¸¸ ´ÊÁø ¾Ê¾Ò±º¿ä."); System.out.println(ret); StringBuilder sb = new StringBuilder(); sb.append("appended String"); String str = "just String"; boolean mutable = true; CharSequence chSeq = mutable ? sb : str; System.out.println(chSeq); } private static void checkIntegerSame(Integer ii, Integer jj) { if (ii == jj) { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is same ii."); } else { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is NOT same ii!!"); } } private static void checkIntegerEquals(Integer ii, Integer jj) { if (ii.equals(jj)) { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is equals ii."); } else { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is NOT equals ii!!"); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.10 target=_blank name=s-8.10></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.10</A> </SPAN>Method Overload resolution in AutoBoxing <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.10" target=_blank>#</A></H3> <DIV>int°¡ 127À» ÃʰúÇÒ °æ¿ì boxingÀÌ ÀÌ·ç¾î Áúµí ÇÏÁö¸¸, method overload¿¡ À־ boxingÀÌ ÀÌ·ç¾î ÁöÁö ¾Ê¾Æ JDK1.4¿Í µ¿ÀÏÇÑ °á°ú¸¦ ¾ò´Â´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class OverloadTester { public static void main(String[] args) { double d = 10; Integer ii = new Integer(10); doSomething(10); doSomething(1000); doSomething(ii); doSomething(d); } private static void doSomething(Integer ii) { System.out.println("This is doSomething(Integer)"); } private static void doSomething(double d) { System.out.println("This is doSomething(double)"); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.11 target=_blank name=s-8.11></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.11</A> </SPAN>°¡º¯ÀûÀÎ argument °³¼ö <STRONG>...</STRONG> <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.11" target=_blank>#</A></H3> <DIV>Àμö°¡ °¡º¯ÀûÀÏ °æ¿ì ÀμöÀÇ °³¼ö°¡ ¾ø´Â°Í ºÎÅÍ ´Ù¼ö°³±îÁö ¸ðµÎ Áö¿ø. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class VarArgsTester { public static void main(String[] args) { setNumbers(1, 2); setNumbers(1, 2, 3, 4); setNumbers(1); // setNumbers(); //ÇØ´ç µÇ´Â method°¡ ¾ø¾î compile error!! System.out.println("=============================================="); setNumbers2(1, 2, 3, 4); setNumbers2(1); setNumbers2(); } // this is same setNumbers(int first, int[] others) private static void setNumbers(int first, int... others) { System.out.println("-----------setNumbers()----------- : " + first); for (int i : others) { System.out.println("i = " + i); } } // this is same setNumbers(int[] others) private static void setNumbers2(int... others) { System.out.println("-----------setNumbers2()----------- : " + (others != null && others.length > 0 ? others[0] : "null")); for (int i : others) { System.out.println("i = " + i); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.12 target=_blank name=s-8.12></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.12</A> </SPAN>The Three Standard Annotation <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.12" target=_blank>#</A></H3> <DIV>@Override - sign the override from superclass.</DIV><BR> <DIV><PRE class=wiki>//Á¤»óÀûÀÎ »ç¿ë @Override public int hashCode(){ return toString().hashCode(); } //½ºÆç¸µÀÌ Æ²·Á compile error!! @Override public int hasCode(){ //misspelled => method does not override a method from its superclass error!! return toString().hashCode(); }</PRE></DIV><BR> <DIV>@Deprecated deprecated ÁÖ¼®°ú µ¿ÀÏÇϳª ºÎ¸ðÀÇ method°¡ deprecatedµÇ¸é ÀÚ½ÄÀÇ method¸¦ »ç¿ëÇØµµ deprecated·Î ³ª¿Â´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class AnnotationDeprecateTester { public static void main(String[] args){ DeprecatedClass dep = new DeprecatedTester(); dep.doSomething(10); //deprecated } } class DeprecatedClass { @Deprecated public void doSomething(int ii){ //deprecated System.out.println("This is DeprecatedClass's doSomething(int)"); } public void doSomethingElse(int ii){ System.out.println("This is DeprecatedClass's doSomethingElse(int)"); } } class DeprecatedTester extends DeprecatedClass { @Override public void doSomething(int ii){ System.out.println("This is DeprecatedTester's doSomething(int)"); } }</PRE></DIV><BR> <DIV>@SuppressWarnings SuppressWarnings¿¡ ÀÎÀÚ´Â String[] typeÀ¸·Î ¿©·¯°³¸¦ ¹è¿ÇüÅ·Π¾µ¼ö ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.ArrayList; import java.util.List; public class AnnotationSuppressWarningsTester { @SuppressWarnings({"unchecked", "fallthrough"} ) private static void test1(){ List list = new ArrayList(); list.add("aaaaaa"); } @SuppressWarnings("unchecked") private static void test2(){ List list = new ArrayList(); list.add("aaaaaa"); } //warningÀÌ ¾ø´Â ¼Ò½º. private static void test3(){ List<String> list = new ArrayList<String>(); list.add("aaaaaa"); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.13 target=_blank name=s-8.13></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.13</A> </SPAN>Creating Custom Annotation Types <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.13" target=_blank>#</A></H3> <DIV>³ª¸¸ÀÇ annotationÀ» Á¤ÀÇÇÒ ¼ö Àִµ¥ Ű¿öµå´Â @interfaceÀÌ °¢ methodÁ¤Àǰ¡ member¶ó°í º¸¸é µÈ´Ù. °£´ÜÇÑ ¿¹¸¦ º¸¸é ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Target( { ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String columnName(); String methodName() default ""; } //»ç¿ëÇÏ´Â ÂÊ.. public class AnnotationTester { @MyAnnotation(columnName = "test", methodName = "setTest") private String test; @MyAnnotation(columnName = "grpid") public String grpid; .... } //À§ÀÇ test ¸â¹öÀÇ °æ¿ì ´ÙÀ½°ú °°ÀÌ Á¢±Ù °¡´ÉÇÏ´Ù. Field testField = cls.getDeclaredField("test"); if (testField.isAnnotationPresent(MyAnnotation.class)) { Annotatioin anno = testField.getAnnotation(MyAnnotation.class); System.out.println(anno.columnName() + ", method = " + anno.methodName()); }</PRE></DIV></DIV> <DIV> <H2><A class=con_link id=s-9 target=_blank name=s-9></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>9</FONT></A> </SPAN>The for/in Statement <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-9.1 target=_blank name=s-9.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>9.1</A> </SPAN>for/in ÀÇ ÀÚÁÖ »ç¿ëµÇ´Â ÇüÅ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9.1" target=_blank>#</A></H3> <DIV>for/inÀº ¹«¾ùº¸´Ù ´Ù¾çÇÑ À¯ÇüÀÇ ¿¹Á¦¸¦ º¸´Â°ÍÀÌ Á¦ÀÏ ºü¸¦°ÍÀÌ´Ù. Çüź° »ç¿ë ¿¹Á¦¸¦ »ìÆìº¸¸é ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>//1. °¡Àå ´Ü¼øÇÑ ÇüÅÂÀÎ ¹è¿(array) String[] strs = { "aaa", "bbb", "ccc" }; for (String str : strs) { System.out.println(str); } //2. List by using Iterator List<Number> lstNum = new LinkedList<Number>(); lstNum.add(1); lstNum.add(1.2); for (Iterator<Number> iter = lstNum.iterator(); iter.hasNext();) { Number num = iter.next(); System.out.println("num = " + num); } //3. List¸¦ ¹Ù·Î »ç¿ë List<String> lst = new LinkedList<String>(); lst.add("aaaaa"); lst.add("bbbbb"); lst.add("ccccc"); lst.add("ddddd"); for (String str : lst) { System.out.println("str = " + str); } // 4. List of List List[] lists = { lst, lst }; for (List<String> l : lists) { for (String str : l) { System.out.println("str = " + str); } }</PRE></DIV></DIV> <DIV> <H2><A class=con_link id=s-10 target=_blank name=s-10></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>10</FONT></A> </SPAN>Static Import <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-10.1 target=_blank name=s-10.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>10.1</A> </SPAN>static member/method import <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10.1" target=_blank>#</A></H3> <DIV>Tiger¿¡¼´Â ´Ù¸¥ Ŭ·¡½ºÀÇ member¿Í method¸¦ import ÇÒ¼ö ÀÖ´Ù. ´Ü, static ÀÏ °æ¿ì¸¸ °¡´ÉÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>//¿¹¸¦ µé¾î System.out.println() À̶ó´Â °ÍÀ» »ç¿ëÇϱâ À§Çؼ´Â ´ÙÀ½ÀÇ import ¹®ÀÌ ÇÊ¿äÇÏ´Ù. import java.lang.System; //¹°·Ð java.lang À̱⿡ import ¹®ÀÌ ÇÊ¿ä¾øÁö¸¸ ¿¹¸¦ µéÀÚ¸é ±×·¸´Ù´Â °ÍÀÌ´Ù.&^^ //Ç㳪, Tiger¿¡¼´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ¼ö ÀÖ´Ù. import static java.lang.System.out; ... out.println(...); // method¸¦ import ÇÑ´Ù¸é.. import static java.lang.System.out.println; ... println(...);</PRE></DIV></DIV> <DIV> <H2><A class=con_link id=s-11 target=_blank name=s-11></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>11</FONT></A> </SPAN>References <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-11" target=_blank><FONT size=3>#</FONT></A></H2> <UL> <LI><A class=con_link href="http://java.sun.com/j2se/1.4.2/docs/index.html" target=_blank>http://java.sun.com/j2se/1.4.2/docs/index.html</A> <LI><A class=con_link href="http://java.sun.com/j2se/1.5.0/docs/index.html" target=_blank>http://java.sun.com/j2se/1.5.0/docs/index.html</A> <LI>SUNÀÇ JLS <LI><A class=con_link href="http://java.sun.com/docs/books/jls/html/index.html" target=_blank>http://java.sun.com/docs/books/jls/html/index.html</A> <LI>Java Çٽɿø¸® - ¸¶¿¡¹Ù½Ã °¡Áî¾ß Àú - ¿µÁø´åÄÄ <LI>Java 1.5 Tiger - Brett McLaughlin Àú - O'Reilly </LI></UL><BR>from: <A href="http://www.twelo.com/96">http://www.twelo.com/96</A></DIV>
JAVA¸¦ ¹è¿ì´Â »ç¶÷, ¶Ç´Â ÇÁ·Î±×·¡¹Ö¿¡ Á¾»çÇϽô °³¹ßÀÚ ºÐµéÀÌ ´Ù½ÃÇѹø ºÁµµ ±¦ÂúÀ»°Å °°Àº <DIV id=toctitle><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 9pt">¸¶Ä¡ ÀÌ·Ð ½ÃÇè Á÷Àü º¸´Â ÄÁ´×ÆäÀÌÆÛ °°ÀÌ Á¤¸® µÇ¾îÀÖ´Â ÀÚ¹ÙÀÇ ±âº»¿ø¸® ¿¡ °üÇÑ ÀÚ·áÀÔ´Ï´Ù.</SPAN></SPAN></DIV> <DIV id=toctitle><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 9pt">ƯÈ÷ °¢ ÁÖÁ¦¿¡ ¸Â´Â ¸ñÂ÷¿¡´Â ¿¹Á¦°¡ ÀÖ¾î JAVA¸¦ ÀÔ¹®ÇϽô ÃʱÞÇÁ·Î±×·¡¸Ó µé¿¡°Ô´Â ÁÁÀº ÀÚ·á °°½À´Ï´Ù.</SPAN></SPAN></DIV> <DIV id=toctitle><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 9pt">±×·³ ±æ°í±ä ½ºÅ©·Ñ ³»·Á¼ ²À º¸½Ã±æ..</SPAN></SPAN></DIV> <DIV id=toctitle><SPAN class=Apple-style-span style="FONT-WEIGHT: bold; FONT-SIZE: 18px; LINE-HEIGHT: 27px"><BR></SPAN></DIV> <DIV id=toctitle> <H2 style="DISPLAY: inline"><FONT size=4>¸ñÂ÷</FONT></H2></DIV><A class=con_link target=_blank name=toc></A> <DL> <DD> <DL> <DT><A class=con_link id=toc-1 target=_blank name=toc-1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">1</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> °´Ã¼ÁöÇâÀÇ ±¸¸Û static </SPAN> <DD> <DL> <DT><A class=con_link id=toc-1.1 target=_blank name=toc-1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.1" target=_blank>1.1</A> Java´Â °´Ã¼ÁöÇâ ¾ð¾îÀÌ´Ù? <DT><A class=con_link id=toc-1.2 target=_blank name=toc-1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.2" target=_blank>1.2</A> Àü¿ªº¯¼ö </DT></DL> <DT><A class=con_link id=toc-2 target=_blank name=toc-2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">2</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Java´Â Pointer¾ð¾îÀÌ´Ù? (Java¿¡´Â Pointer¹Û¿¡ ¾ø´Ù?) </SPAN> <DD> <DL> <DT><A class=con_link id=toc-2.1 target=_blank name=toc-2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.1" target=_blank>2.1</A> Java´Â primitiveÇüÀ» Á¦¿ÜÇÏ°ï ¸ðµÎ PointerÀÌ´Ù <DT><A class=con_link id=toc-2.2 target=_blank name=toc-2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.2" target=_blank>2.2</A> nullÀº °´Ã¼Àΰ¡? <DT><A class=con_link id=toc-2.3 target=_blank name=toc-2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.3" target=_blank>2.3</A> String¿¡ ´ëÇÏ¿© <DT><A class=con_link id=toc-2.4 target=_blank name=toc-2.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.4" target=_blank>2.4</A> °´Ã¼ÁöÇâÀÇ Ä¸½¶È ÆÄ±« ÁÖÀÇ <DT><A class=con_link id=toc-2.5 target=_blank name=toc-2.5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5" target=_blank>2.5</A> ¹è¿¿¡ ´ëÇÏ¿© <DD> <DL> <DT><A class=con_link id=toc-2.5.1 target=_blank name=toc-2.5.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.1" target=_blank>2.5.1</A> ¹è¿Àº object Àΰ¡? <DT><A class=con_link id=toc-2.5.2 target=_blank name=toc-2.5.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.2" target=_blank>2.5.2</A> ¹è¿ÀÇ length´Â ¿Ö field(member variable)Àΰ¡? <DT><A class=con_link id=toc-2.5.3 target=_blank name=toc-2.5.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.3" target=_blank>2.5.3</A> final°ú ¹è¿¿¡ ´ëÇÏ¿©... <DT><A class=con_link id=toc-2.5.4 target=_blank name=toc-2.5.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.4" target=_blank>2.5.4</A> "Java¿¡¼ÀÇ ´ÙÂ÷¿ø ¹è¿Àº Á¸ÀçÇÏÁö ¾Ê´Â´Ù." </DT></DL> <DT><A class=con_link id=toc-2.6 target=_blank name=toc-2.6></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6" target=_blank>2.6</A> Àμö(parameter/argument)Àü´ÞÀÇ °³³ä <DD> <DL> <DT><A class=con_link id=toc-2.6.1 target=_blank name=toc-2.6.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.1" target=_blank>2.6.1</A> "Java¿¡¼ parameter(argument) Àü´ÞÀº ¹«Á¶°Ç 'call by value' ÀÌ´Ù" <DT><A class=con_link id=toc-2.6.2 target=_blank name=toc-2.6.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.2" target=_blank>2.6.2</A> "C¿Í °°Àº ¾ð¾î´Â static linkingÀÌÁö¸¸, Java´Â dynamic linkingÀÌ´Ù." </DT></DL> <DT><A class=con_link id=toc-2.7 target=_blank name=toc-2.7></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7" target=_blank>2.7</A> GC ¿¡ ´ëÇÏ¿© Àá±ñ! <DD> <DL> <DT><A class=con_link id=toc-2.7.1 target=_blank name=toc-2.7.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7.1" target=_blank>2.7.1</A> "Garbage CollectionÀº ¸¸´ÉÀÌ ¾Æ´Ï´Ù." </DT></DL> <DT><A class=con_link id=toc-2.8 target=_blank name=toc-2.8></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8" target=_blank>2.8</A> Java Pointer °á·Ð <DD> <DL> <DT><A class=con_link id=toc-2.8.1 target=_blank name=toc-2.8.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8.1" target=_blank>2.8.1</A> "°á±¹ Java¿¡´Â pointer°¡ ÀÖ´Â °ÍÀΰ¡, ¾ø´Â °ÍÀΰ¡?" </DT></DL></DD></DL> <DT><A class=con_link id=toc-3 target=_blank name=toc-3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">3</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> »ó¼Ó°ú interfaceÀÇ ¹®Á¦Á¡ </SPAN> <DD> <DL> <DT><A class=con_link id=toc-3.1 target=_blank name=toc-3.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1" target=_blank>3.1</A> »ó¼Ó <DD> <DL> <DT><A class=con_link id=toc-3.1.1 target=_blank name=toc-3.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.1" target=_blank>3.1.1</A> »ó¼Ó¿¡ ÀÖ¾î¼ÀÇ »ý¼ºÀÚ(constructor) <DT><A class=con_link id=toc-3.1.2 target=_blank name=toc-3.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.2" target=_blank>3.1.2</A> "down cast´Â º»ÁúÀûÀ¸·Î ¸Å¿ì À§ÇèÇÏ´Ù" <DT><A class=con_link id=toc-3.1.3 target=_blank name=toc-3.1.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.3" target=_blank>3.1.3</A> "Ãß»óŬ·¡½º¿¡ finalÀÌ ÀÖÀ¸¸é compile errorÀÌ´Ù" </DT></DL> <DT><A class=con_link id=toc-3.2 target=_blank name=toc-3.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2" target=_blank>3.2</A> interface <DD> <DL> <DT><A class=con_link id=toc-3.2.1 target=_blank name=toc-3.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2.1" target=_blank>3.2.1</A> "interface´Â interfaceÀÏ»Ó ´ÙÁß »ó¼ÓÀÇ ´ë¿ëǰÀÌ ¾Æ´Ï´Ù." </DT></DL> <DT><A class=con_link id=toc-3.3 target=_blank name=toc-3.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.3" target=_blank>3.3</A> »ó¼Ó Á¦´ë·Î »ç¿ëÇϱâ </DT></DL> <DT><A class=con_link id=toc-4 target=_blank name=toc-4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">4</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> package¿Í access Á¦¾î¿¡ °üÇÑ ÀÌÇØ </SPAN> <DD> <DL> <DT><A class=con_link id=toc-4.1 target=_blank name=toc-4.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1" target=_blank>4.1</A> package <DD> <DL> <DT><A class=con_link id=toc-4.1.1 target=_blank name=toc-4.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.1" target=_blank>4.1.1</A> "package´Â '°èÃþ±¸Á¶' Àΰ¡?" <DT><A class=con_link id=toc-4.1.2 target=_blank name=toc-4.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.2" target=_blank>4.1.2</A> "compiler °¡ ÀνÄÇÏ´Â class°Ë»ö ¼ø¼(¼Ò½ºÄڵ峻 Ŭ·¡½º°¡ ¹ß°ßµÉ °æ¿ì ±× Ŭ·¡½ºÀÇ À§Ä¡¸¦ ã´Â ¼ø¼)" </DT></DL> <DT><A class=con_link id=toc-4.2 target=_blank name=toc-4.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2" target=_blank>4.2</A> access Á¦¾î <DD> <DL> <DT><A class=con_link id=toc-4.2.1 target=_blank name=toc-4.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.1" target=_blank>4.2.1</A> "interfacde memberÀÇ access Á¦¾î" <DT><A class=con_link id=toc-4.2.2 target=_blank name=toc-4.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.2" target=_blank>4.2.2</A> ±×·¸´Ù¸é interface¸¦ ´Ù¸¥ package¿¡ ´ëÇÏ¿© ¼û±â°í ½ÍÀ¸¸é ¾î¶»°Ô Çϴ°¡? </DT></DL></DD></DL> <DT><A class=con_link id=toc-5 target=_blank name=toc-5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">5</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> ±âŸ Java ±â´É </SPAN> <DD> <DL> <DT><A class=con_link id=toc-5.1 target=_blank name=toc-5.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1" target=_blank>5.1</A> Thread <DD> <DL> <DT><A class=con_link id=toc-5.1.1 target=_blank name=toc-5.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.1" target=_blank>5.1.1</A> "Multi Thread¿¡¼´Â È帧Àº º¹¼öÀÌÁö¸¸ data´Â °øÀ¯µÉ ¼ö ÀÖ´Ù." <DT><A class=con_link id=toc-5.1.2 target=_blank name=toc-5.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.2" target=_blank>5.1.2</A> "Thread´Â °´Ã¼¿Í Á÷±³ÇÏ´Â °³³äÀÌ´Ù." <DT><A class=con_link id=toc-5.1.3 target=_blank name=toc-5.1.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.3" target=_blank>5.1.3</A> "Synchronized ÀÇ ÀÌÇØ" <DT><A class=con_link id=toc-5.1.4 target=_blank name=toc-5.1.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.4" target=_blank>5.1.4</A> "Thread »ç¿ë¹ýÀÇ Á¤¼®Àº?" </DT></DL> <DT><A class=con_link id=toc-5.2 target=_blank name=toc-5.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2" target=_blank>5.2</A> Exception <DD> <DL> <DT><A class=con_link id=toc-5.2.1 target=_blank name=toc-5.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.1" target=_blank>5.2.1</A> "finally ÀýÀº ¹Ýµå½Ã ¾î¶°ÇÑ °æ¿ì¿¡µµ ½ÇÇàµÇ´Â°¡?" <DT><A class=con_link id=toc-5.2.2 target=_blank name=toc-5.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2" target=_blank>5.2.2</A> "¿¹¿ÜÀÇ Á¾·ù 3°¡Áö (Error, RuntimeException, ±×¹ÛÀÇ Exception)" <DD> <DL> <DT><A class=con_link id=toc-5.2.2.1 target=_blank name=toc-5.2.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.1" target=_blank>5.2.2.1</A> Error <DT><A class=con_link id=toc-5.2.2.2 target=_blank name=toc-5.2.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.2" target=_blank>5.2.2.2</A> RuntimeException <DT><A class=con_link id=toc-5.2.2.3 target=_blank name=toc-5.2.2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.3" target=_blank>5.2.2.3</A> ±×¹ÛÀÇ Exception </DT></DL> <DT><A class=con_link id=toc-5.2.3 target=_blank name=toc-5.2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.3" target=_blank>5.2.3</A> "OutOfMemoryError´Â ¾î¶»°Ô ó¸®ÇØ¾ß Çϴ°¡?" </DT></DL> <DT><A class=con_link id=toc-5.3 target=_blank name=toc-5.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3" target=_blank>5.3</A> Object Serialize <DD> <DL> <DT><A class=con_link id=toc-5.3.1 target=_blank name=toc-5.3.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.1" target=_blank>5.3.1</A> "Serialize¸¦ À§Çؼ´Â marker interfaceÀÎ java.io.Serializable interface¸¦ implementsÇØ¾ßÇÑ´Ù." <DT><A class=con_link id=toc-5.3.2 target=_blank name=toc-5.3.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.2" target=_blank>5.3.2</A> "super class´Â SerializableÀÌ ¾Æ´Ñµ¥ sub class¸¸ SerializableÀÎ °æ¿ìÀÇ ¹®Á¦Á¡" <DT><A class=con_link id=toc-5.3.3 target=_blank name=toc-5.3.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.3" target=_blank>5.3.3</A> "transient fieldÀÇ º¹¿ø(?)°ü·Ã" <DT><A class=con_link id=toc-5.3.4 target=_blank name=toc-5.3.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.4" target=_blank>5.3.4</A> "Stack Overflow¿¡ ÁÖÀÇÇ϶ó!" </DT></DL> <DT><A class=con_link id=toc-5.4 target=_blank name=toc-5.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4" target=_blank>5.4</A> "nested class / inner class / ÁßøŬ·¡½º" <DD> <DL> <DT><A class=con_link id=toc-5.4.1 target=_blank name=toc-5.4.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.1" target=_blank>5.4.1</A> "ÁßøŬ·¡½ºÀÇ °³³ä" <DT><A class=con_link id=toc-5.4.2 target=_blank name=toc-5.4.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.2" target=_blank>5.4.2</A> "³»ºÎŬ·¡½º´Â ºÎ¸ðÀÇ ÂüÁ¶¸¦ ¸ô·¡ º¸À¯Çϰí ÀÖ´Ù." <DT><A class=con_link id=toc-5.4.3 target=_blank name=toc-5.4.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.3" target=_blank>5.4.3</A> "local inner class¿¡ ´ëÇÏ¿©" <DT><A class=con_link id=toc-5.4.4 target=_blank name=toc-5.4.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.4" target=_blank>5.4.4</A> "anonymous class(¹«¸íŬ·¡½º)¿¡ ´ëÇÏ¿©" </DT></DL></DD></DL> <DT><A class=con_link id=toc-6 target=_blank name=toc-6></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">6</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> ÀÌ·¡µµ Java°¡ °£´ÜÇѰ¡</SPAN>? <DD> <DL> <DT><A class=con_link id=toc-6.1 target=_blank name=toc-6.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1" target=_blank>6.1</A> method overload ¿¡¼ÀÇ È¥¶õ? <DD> <DL> <DT><A class=con_link id=toc-6.1.1 target=_blank name=toc-6.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.1" target=_blank>6.1.1</A> "overload¶õ À̸§ÀÌ °¡°í Àμö°¡ ´Ù¸¥ method¿¡ compiler°¡ ´Ù¸¥ À̸§À» ºÙÀÌ´Â ±â´É" <DT><A class=con_link id=toc-6.1.2 target=_blank name=toc-6.1.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.2" target=_blank>6.1.2</A> "±×·¸´Ù¸é overload¿¡¼ ½ÇÁ¦·Î È¥µ¿µÇ´Â ºÎºÐÀº ¹«¾ùÀΰ¡?" <DT><A class=con_link id=toc-6.1.3 target=_blank name=toc-6.1.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.3" target=_blank>6.1.3</A> (Âü°í) ¶Ç´Ù¸¥ È¥µ¿, overloadÇÑ method¸¦ override Çϸé? </DT></DL> <DT><A class=con_link id=toc-6.2 target=_blank name=toc-6.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2" target=_blank>6.2</A> »ó¼Ó/override/ÀºÆó ¿¡¼ÀÇ º¹ÀâÇÔ <DD> <DL> <DT><A class=con_link id=toc-6.2.1 target=_blank name=toc-6.2.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.1" target=_blank>6.2.1</A> "Java classÀÇ member 4 Á¾·ù" <DT><A class=con_link id=toc-6.2.2 target=_blank name=toc-6.2.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.2" target=_blank>6.2.2</A> "override½Ã method À̸§¿¡ ´ëÇÑ ÇÔÁ¤" <DT><A class=con_link id=toc-6.2.3 target=_blank name=toc-6.2.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.3" target=_blank>6.2.3</A> "¶Ç´Ù¸¥ ³ªÀÇ(?) ½Ç¼ö - ¸»µµ ¾ÈµÇ´Â ¿ÀŸ" <DT><A class=con_link id=toc-6.2.4 target=_blank name=toc-6.2.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.4" target=_blank>6.2.4</A> "static member¸¦ instance¸¦ °æÀ¯ÇÏ¿© ÂüÁ¶Çؼ´Â ¾È µÈ´Ù." <DT><A class=con_link id=toc-6.2.5 target=_blank name=toc-6.2.5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.5" target=_blank>6.2.5</A> "super keyword´Â ºÎ¸ðÀÇ this" </DT></DL> <DT><A class=con_link id=toc-6.3 target=_blank name=toc-6.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.3" target=_blank>6.3</A> »ó¼Ó¿¡ °üÇÑ ¶Ç ´Ù¸¥ ¹®Á¦ <DT><A class=con_link id=toc-6.4 target=_blank name=toc-6.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4" target=_blank>6.4</A> ±×¹ÛÀÇ ÇÔÁ¤ <DD> <DL> <DT><A class=con_link id=toc-6.4.1 target=_blank name=toc-6.4.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.1" target=_blank>6.4.1</A> "»ý¼ºÀÚ¿¡ void ¸¦ ºÙÀδٸé?" <DT><A class=con_link id=toc-6.4.2 target=_blank name=toc-6.4.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.2" target=_blank>6.4.2</A> "if / switch ÀÇ ÇÔÁ¤" </DT></DL></DD></DL> <DT><A class=con_link id=toc-7 target=_blank name=toc-7></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">7</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Java ±â´É Àû¿ë ¸î°¡Áö </SPAN> <DD> <DL> <DT><A class=con_link id=toc-7.1 target=_blank name=toc-7.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1" target=_blank>7.1</A> ´ë±Ô¸ð °³¹ß¿¡¼ interface ºÐ¸®Çϱâ <DD> <DL> <DT><A class=con_link id=toc-7.1.1 target=_blank name=toc-7.1.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1.1" target=_blank>7.1.1</A> "interface ºÐ¸®ÀÇ Çʿ伺" </DT></DL> <DT><A class=con_link id=toc-7.2 target=_blank name=toc-7.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.2" target=_blank>7.2</A> Java¿¡¼ÀÇ ¿°ÅÇü <DT><A class=con_link id=toc-7.3 target=_blank name=toc-7.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.3" target=_blank>7.3</A> Debug write </DT></DL> <DT><A class=con_link id=toc-8 target=_blank name=toc-8></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">8</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Java 5.0 Tiger ¿¡ ´ëÇÏ¿© </SPAN> <DD> <DL> <DT><A class=con_link id=toc-8.1 target=_blank name=toc-8.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.1" target=_blank>8.1</A> Working with java.util.Arrays <DT><A class=con_link id=toc-8.2 target=_blank name=toc-8.2></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.2" target=_blank>8.2</A> Using java.util.Queue interface <DT><A class=con_link id=toc-8.3 target=_blank name=toc-8.3></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.3" target=_blank>8.3</A> java.lang.StringBuilder »ç¿ëÇϱâ <DT><A class=con_link id=toc-8.4 target=_blank name=toc-8.4></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.4" target=_blank>8.4</A> Using Type-Safe Lists <DT><A class=con_link id=toc-8.5 target=_blank name=toc-8.5></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.5" target=_blank>8.5</A> Writing Generic Types <DT><A class=con_link id=toc-8.6 target=_blank name=toc-8.6></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.6" target=_blank>8.6</A> »õ·Î¿î static final enum <DT><A class=con_link id=toc-8.7 target=_blank name=toc-8.7></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.7" target=_blank>8.7</A> Using java.util.EnumMap <DT><A class=con_link id=toc-8.8 target=_blank name=toc-8.8></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.8" target=_blank>8.8</A> Using java.util.EnumSet <DT><A class=con_link id=toc-8.9 target=_blank name=toc-8.9></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.9" target=_blank>8.9</A> Convert Primitives to Wrapper Types <DT><A class=con_link id=toc-8.10 target=_blank name=toc-8.10></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.10" target=_blank>8.10</A> Method Overload resolution in AutoBoxing <DT><A class=con_link id=toc-8.11 target=_blank name=toc-8.11></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.11" target=_blank>8.11</A> °¡º¯ÀûÀÎ argument °³¼ö <STRONG>...</STRONG> <DT><A class=con_link id=toc-8.12 target=_blank name=toc-8.12></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.12" target=_blank>8.12</A> The Three Standard Annotation <DT><A class=con_link id=toc-8.13 target=_blank name=toc-8.13></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.13" target=_blank>8.13</A> Creating Custom Annotation Types </DT></DL> <DT><A class=con_link id=toc-9 target=_blank name=toc-9></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">9</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> The for/in Statement </SPAN> <DD> <DL> <DT><A class=con_link id=toc-9.1 target=_blank name=toc-9.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9.1" target=_blank>9.1</A> for/in ÀÇ ÀÚÁÖ »ç¿ëµÇ´Â ÇüÅ </DT></DL> <DT><A class=con_link id=toc-10 target=_blank name=toc-10></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">10</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> Static Import </SPAN> <DD> <DL> <DT><A class=con_link id=toc-10.1 target=_blank name=toc-10.1></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10.1" target=_blank>10.1</A> static member/method import </DT></DL> <DT><A class=con_link id=toc-11 target=_blank name=toc-11></A><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-11" target=_blank><SPAN class=Apple-style-span style="FONT-WEIGHT: bold">11</SPAN></A><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"> References </SPAN></DT></DL> <DIV><SPAN class=Apple-style-span style="FONT-WEIGHT: bold"><BR></SPAN></DIV></DD></DL> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV>===============================================================<BR> <DIV> <H2><A class=con_link id=s-1 target=_blank name=s-1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>1</FONT></A> </SPAN>°´Ã¼ÁöÇâÀÇ ±¸¸Û static <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-1.1 target=_blank name=s-1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>1.1</A> </SPAN>Java´Â °´Ã¼ÁöÇâ ¾ð¾îÀÌ´Ù? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.1" target=_blank>#</A></H3> <DIV>"Java´Â ¿ÏÀüÇÑ °´Ã¼ÁöÇâ ¾ð¾îÀÌ´Ù" ¶ó´Â ÁÖÀåÀ» ÀÚÁÖ Á¢ÇÏ°Ô µÈ´Ù. ¸¸ÀÏ À̰ÍÀÌ »ç½ÇÀ̶ó¸é Java¸¦ »ç¿ëÇÏ´Â ÇÑ "±âÁ¸ÀÇ ÀýÂ÷ÁöÇâ ÇÁ·Î±×·¡¹ÖÀ» ÀüÇô ÇÒ¼ö ¾øÀ»°Í °°Áö¸¸ ±×·¸Áö ¾Ê´Ù. ºüÁ®³ª°¥ ±¸¸ÛÀÌ ÀÖ´Â °ÍÀÌ´Ù. staticÀ» ÀÌ¿ëÇÏ¸é ºñ °´Ã¼ÁöÇâ ¾ð¾îó·³ ÄÚµùÇÒ ¼ö ÀÖ´Ù.</DIV><BR> <DIV>static method´Â instance°¡ ¾Æ´Ñ Ŭ·¡½º¿¡ ¼ÓÇÏ´Â method·Î, class method¶ó°í ºÎ¸¥´Ù. ¹Ý´ë·Î staticÀÌ ¾Æ´Ñ method´Â instance method¶ó°í ºÎ¸¥´Ù.</DIV><BR> <DIV>static method´Â this°¡ ¾ø´Ù. instance method¿¡´Â ¼û°ÜÁø ÆÄ¶ó¹ÌÅÍ·Î this°¡ °Ç³×Áø´Ù. (¾Æ·¡ "°´Ã¼ÁöÇâ¿¡ ÈçÈñ ÀÖ´Â ¿ÀÇØ" Âü°í) ÇÏÁö¸¸ static method´Â ÀýÂ÷ÁöÇâÀÇ ÇÔ¼ö¿Í µ¿ÀÏÇϹǷΠ¼û°ÜÁø ÆÄ¶ó¹ÌÅÍ this´Â ¾ø´Ù. ±×·¡¼ static method¿¡¼´Â Àü´ÞÇÑ this°¡ ¾øÀ¸¹Ç·Î instance method¸¦ È£ÃâÇϰųª instance field¸¦ ÂüÁ¶ÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù.</DIV><BR> <DIV>(Âü°í) °´Ã¼ÁöÇâ¿¡ ÈçÈ÷ ÀÖ´Â ¿ÀÇØ</DIV><BR> <DIV> <UL> <LI>¿ÀÇØ1. "°´Ã¼ÁöÇâ¿¡¼´Â °´Ã¼³¢¸® ¼·Î ¸Þ¼¼Áö¸¦ ÁÖ°í ¹ÞÀ¸¸ç µ¿ÀÛÇÑ´Ù." ¶ó´Â ¸»À» µè°í ´ÙÀ½°ú °°ÀÌ »ý°¢ÇÒ ¼ö ÀÖ´Ù. "°´Ã¼ÁöÇâ¿¡¼´Â °´Ã¼°¡ °¢°¢ µ¶¸³ÇÏ¿© ¿òÁ÷Àδٴ °ÍÀΰ¡, ±×·¯¸é °¢ °´Ã¼¿¡ µ¶¸³µÈ thread°¡ ÇÒ´çµÇ¾î ÀÖ´Ü ¸»Àΰ¡?" ±×·¸Áö ¾Ê´Ù. "¸Þ¼¼Áö¸¦ º¸³½´Ù"¶ó´Â °ÍÀº ´Ü¼øÈ÷ °¢ °´Ã¼ÀÇ ÇÔ¼ö È£Ãâ¿¡ ºÒ°úÇÏ´Ù. <LI>¿ÀÇØ2. "°´Ã¼ÁöÇâ¿¡¼´Â method°¡ class¿¡ ºÎ¼ÓµÇ¾î ÀÖ´Ù"´Â ¸»À» µè°í ´ÙÀ½°ú °°ÀÌ »ý°¢ÇÒ ¼ö ÀÖ´Ù. "±×·¯¸é instanceº°·Î methodÀÇ ½ÇÇàÄڵ尡 º¹Á¦µÇ°í ÀÖ´Â °ÍÀÌ ¾Æ´Ñ°¡?" ¹°·Ð À̰͵µ ¿ÀÇØ´Ù. methodÀÇ ½ÇÇàÄÚµå´Â Á¾·¡ÀÇ ÇÔ¼ö¿Í µ¿ÀÏÇÑ ¾îµò°¡ ´Ù¸¥°÷(JVMÀÇ class area)¿¡ Á¸ÀçÇÏ¸ç ±× Ã¹¹øÂ° ÆÄ¶ó¹ÌÅÍ·Î °´Ã¼ÀÇ Æ÷ÀÎÅÍ this°¡ °Ç³×Áú »ÓÀÌ´Ù. <LI>¿ÀÇØ3. "±×·¸´Ù¸é °¢ instance°¡ methodÀÇ ½ÇÇàÄڵ带 Åë°·Î °®°í ÀÖÁö ¾Ê´Â °ÍÀº È®½ÇÇÏÁö¸¸, methodÀÇ ½ÇÇà ÄÚµåÀÇ Æ÷ÀÎÅÍ´Â °¢ instanceº°·Î º¸°üÇϰí Àִ°ÍÀÌ ¾Æ´Ñ°¡?" À̰ÍÀº ¾à°¡ ¾Ö¸ÅÇÑ ¿ÀÇØÀ̱ä ÇÏ´Ù. JVM ½ºÆå¿¡¼´Â class¿µ¿ª¿¡ ½ÇÇàÄڵ带 °®°í ÀÖÀ¸¸ç, method È£Ãâ½Ã º°µµÀÇ stack frameÀÌ »ý¼ºµÇ¾î ½ÇÇàµÇ°í ½ÇÇà ¿Ï·á½Ã º¹±Í ÁÖ¼Ò¸¦ Àü´ÞÇÑ´Ù. </LI></UL></DIV></DIV> <DIV> <H3><A class=con_link id=s-1.2 target=_blank name=s-1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>1.2</A> </SPAN>Àü¿ªº¯¼ö <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-1.2" target=_blank>#</A></H3> <DIV>static¿¡¼ public field´Â Àü¿ªº¯¼ö(global variable, ±Û·Î¹ú º¯¼ö)ÀÌ´Ù. ¿©±â¼ "±Û·Î¹ú º¯¼ö´Â ¿Ö ¾È µÇ´Â°¡"¿¡ ´ëÇØ Àá±ñ »ý°¢ÇØ º»´Ù. ¿ì¸®´Â ÈçÈ÷ "±Û·Î¹ú º¯¼ö´Â µÉ¼öÀÖ´ÂÇÑ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù"¶ó°í ÇÑ´Ù. ±× ÀÌÀ¯´Â ±Û·Î¹ú º¯¼ö´Â ¾îµð¼µç ÂüÁ¶ÇÒ ¼ö ÀÖ°í °ªÀ» º¯°æÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ ÆÄ¶ó¹ÌÅͳª ¸®ÅϰªÀ¸·Î ±³È¯ÇØ¾ß ÇÒ Á¤º¸¸¦ ±Û·Îº° º¯¼ö¸¦ °æÀ¯(»ç¿ë)ÇÏ¿© °Ç³×ÁÖ¸é ÇÔ¼öÀÇ ¿ªÇÒÀÌ ºÒºÐ¸í ÇØÁö°í È帧µµ ¾Ö¸ÅÇØ Áø´Ù. ¸¶Áö¸· ÀÌÀ¯·Î´Â "±Û·Î¹ú º¯¼ö´Â Çϳª¹Û¿¡ ¾ø´Ù"´Â °ÍÀÌ´Ù. ÀÌ´Â ¾îµð¼ À̰ªÀ» º¯°æÇß´ÂÁö ¾Ë ¼ö ¾ø°Ô ÇÏ´Â Áö¸§±æÀÌ°í ½Ç¹«¿¡¼µµ °£È¤ ¹ß»ýÇϱä ÇÏÁö¸¸, ÀÌ Çϳª¹Û¿¡ ¾ø´Â º¯¼ö°¡ ¹öÀü¾÷À¸·Î µÎ°³°¡ ÇÊ¿äÇÏ°Ô µÇ¾úÀ»¶§ È®Àåµµ ´ëÇü ÇÁ·ÎÁ§Æ®¿¡¼´Â Èûµé¾îÁø´Ù.</DIV><BR> <DIV>µû¶ó¼ static¿¡¼ publicÀº finalÀ» ºÙ¿© »ó¼ö·Î »ç¿ëÇØ¾ßÁö ±× ¿ÜÀÇ ¿ëµµ´Â ÀÚÁ¦ÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù.</DIV><BR> <DIV> <UL> <LI>(Âü°í) final ÃʱâÈ¿¡¼ÀÇ ÁÖÀÇÁ¡. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº Äڵ带 º¸¾ÒÀ»¶§ ¿ì·ÁµÇ´Â Á¡Àº ¹«¾ùÀΰ¡? </LI></UL><PRE class=wiki>public final static Color WHITE = new Color(255, 255, 255);</PRE></DIV><BR> <DIV>À§ÀÇ ÄÚµå´Â java.awt.Color¿¡¼ ¹ßÃéÇÑ °ÍÀε¥, final º¯¼ö´Â Çѹø ÃʱâÈ µÇ¸é º¯°æÀÌ ºÒ°¡´ÉÇѵ¥ object·Î ÃʱâÈ ÇÒ °æ¿ì WHITE¶ó´Â Çʵ尡 º¯°æµÉ ¼ö ¾ø´Â °ÍÀÌÁö ±×°ÍÀÌ °¡¸®Å°´Â °´Ã¼´Â ¾Æ´Ï¶ó´Â Á¡ÀÌ´Ù.</DIV><BR> <DIV>°ú°Å ½Å±Ô ¼ºñ½º °³¹ß½Ã final º¯¼ö Çʵ忡 ¼³Á¤ÆÄÀÏÀ» Àоî cacheÇÏ´Â singleton classÀÇ Æ¯Á¤ member ¸¦ ÀÌ¿ëÇÏ¿© ÃʱâÈ ÇÒ °æ¿ì ÀÌ ¸â¹ö°ªÀÌ º¯°æµÇ¸é final º¯¼öÀÇ °ªÀÌ º¯°æµÇ¾ú´Âµ¥ ÇÁ·Î±×·¥¿¡¼´Â ÀÌ»óÇÑ ÁþÀ» ÇÏ´Â ¿øÀÎÀ» ã±â°¡ »ó´çÈ÷ ¾î·Á¿ü´ø °æÇèÀ» ÇÏ°í ³ ÈÄ ºÎÅÍ ÀÌ·± ÄÚµå´Â ³¿»õ³ª´Â ÄÚµå·Î ¿©°ÜÁö°Ô µÇ¾ú´Ù.</DIV><BR> <DIV>staticÀº ±Û·Î¹úº¯¼ö¿Í µ¿ÀÏÇϹǷΠ³²¹ßÇØ¼´Â ¾ÈµÈ´Ù. staticÀ» »ç¿ëÇÒ °æ¿ì ´ÙÀ½ µÎ°¡Áö´Â ÃÖ¼ÒÇÑ ±â¾ïÇÑ´Ù.</DIV><BR> <DIV> <OL type=1> <LI>static field´Â finalÀÇ °æ¿ì¿Í ´Þ¸® Á¤¸» "Çϳª¿©µµ µÇ´ÂÁö" ¿©ºÎ¸¦ Àß »ý°¢ÇØ¾ß ÇÑ´Ù. <LI>static method´Â ÁÖÀúÇÏÁö ¸»°í ¾²µÇ ´ÙÀ½ µÎ°¡ÁöÀÇ °æ¿ì ¸Å¿ì Ȱ¿ëÀûÀÌ´Ù. <OL type=1> <LI>´Ù¸¥ ¸¹Àº Ŭ·¡½º¿¡¼ »ç¿ëÇÏ´Â Utility Method ±ºÀ» ¸¸µå´Â °æ¿ì. (ÁÖ·Î Utility ClassÀÇ method) <LI>Ŭ·¡½º ¾È¿¡¼¸¸ »ç¿ëÇÏ´Â "ÇÏû ¸Þ¼Òµå(private method)". ÀÌÀ¯¸¦ ¿¹¸¦ µé¾î ¼³¸íÇϸé, ¾Æ·¡¿Í °°Àº Á¶±ÝÀº °úÀåµÈ Ŭ·¡½º°¡ ÀÖ´Ù°í ÇÏÀÚ. </LI></OL></LI></OL><PRE class=wiki>public class T .. private int a; private int b; private int c; private int calc(){ c = a + b; return c * c; } ....other method or getter/setter...</PRE></DIV><BR> <DIV>À§ÀÇ Å¬·¡½º TÀÇ °æ¿ì ³»ºÎ¿¡¼ calc¶ó´Â instance ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µÇ¸é c ÀÇ °ªÀÌ ¸Å¹ø º¯ÇÏ°Ô µÈ´Ù. ÀÌ´Â ¹«½ÉÄÚ ÇÏ´Â ½Ç¼ö·Î Ŭ·¡½º³»¿¡¼ private method´Â ¸ðµç ¸â¹ö instance º¯¼ö¿¡ Á¢±Ù °¡´ÉÇÏ°Ô µÇ¸é¼ ¹ß»ýÇÑ´Ù. cÀÇ °ªÀÌ º¯ÇÏÁö ¾Ê±â¸¦ ¹Ù¶ö¼ö ÀÖ´Ù. À̶§ ¾ÈÀüÇÑ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ calc ÇÏû ¸Þ¼Òµå¸¦ static method·Î ¼öÁ¤ÇÏ¸é ¾ÈÀüÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>private static int calc(int a, int b){ int c = a + b; return c * c; }</PRE></DIV><BR> <DIV>¿©±â¼ a¿Í b´Â ¸â¹ö º¯¼ö¸¦ Á¢±ÙÇÒ¼ö ¾ø¾î Àü´ÞÇØ¾ßÇÑ´Ù.(static¿¡´Â this°¡ ¾ø¾î instance field¸¦ ÂüÁ¶ÇÒ ¼ö ¾ø´Ù´Â °ÍÀº ÀÌ¹Ì À§¿¡¼ ¼³¸íÇß´Ù.) ¶ÇÇÑ cµµ °°Àº ÀÌÀ¯·Î »ç¿ëÇÒ ¼ö ¾ø¾î ·ÎÄà º¯¼ö·Î ¼±¾ðÇÏ°í »ç¿ëÇϰí ÀÖ´Ù. ÀÌ·² °æ¿ì ¸Þ¼Òµå°¡ ¾à°£ Ä¿Áú¼ö ÀÖÁö¸¸ instance member º¯¼ö¸¦ ¾ÈÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. À̰ÍÀº staticÀ» ´Ù½ÃÇѹø »ý°¢ÇÏ°Ô ÇÏ´Â ÁÁÀº ¿¹°¡ µÇ¾úÀ» °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H2><A class=con_link id=s-2 target=_blank name=s-2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>2</FONT></A> </SPAN>Java´Â Pointer¾ð¾îÀÌ´Ù? (Java¿¡´Â Pointer¹Û¿¡ ¾ø´Ù?) <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-2.1 target=_blank name=s-2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.1</A> </SPAN>Java´Â primitiveÇüÀ» Á¦¿ÜÇÏ°ï ¸ðµÎ PointerÀÌ´Ù <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.1" target=_blank>#</A></H3> <DIV>"Java¿¡´Â Æ÷ÀÎÅͰ¡ ¾ø´Ù" ¶ó°í JavaÀÇ ÀåÁ¡ À̶ó°í »ý°¢ÇÏ´Â °ÍÀº ÀÔ¹®ÀÚµµ ¿Ü¿ì°í ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ºÎºÐÀº ÀǿܷΠJava¸¦ È¥¶õ½º·´°Ô ÇÏ´Â ÁÖ¹üÀ̶ó°í »ý°¢ÇÑ´Ù. Java¿¡ Æ÷ÀÎÅͰ¡ ¾ø±â´Â Ä¿³ç primitive(int, short, char, long...µî JVMÀÇ Heap¿¡ object·Î »ý¼ºµÇÁö ¾Ê´Â°Íµé)¸¦ Á¦¿ÜÇϸé "Æ÷ÀÎÅÍ ¹Û¿¡ ¾ø´Â ¾ð¾îÀÌ´Ù"¶ó´Â ¸íÁ¦°¡ ¼º¸³µÇ°Ô µÈ´Ù. »ç½Ç ¿©±â¼ Æ÷ÀÎÅͶó°í ÇÔÀº C ÀÇ ±×°Í°ú´Â Á¶±Ý ´Ù¸¥ reference(ÂüÁ¶)À̱ä ÇÏÁö¸¸...</DIV><BR> <DIV>"Áï, ÀÚ¹ÙÀÇ Å¬·¡½ºÇüÀÇ º¯¼ö´Â ¸ðµÎ Æ÷ÀÎÅÍÀÌ´Ù." <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.2 target=_blank name=s-2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.2</A> </SPAN>nullÀº °´Ã¼Àΰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.2" target=_blank>#</A></H3> <DIV>Java¿¡¼ °øÂüÁ¶(Èü¿¡ ½ÇÁ¦·Î ÂüÁ¶µÇ´Â object°¡ ¾ø´Â ÂüÁ¶)ÀÇ °æ¿ì´Â ´ç¿¬È÷ °´Ã¼°¡ ºÙ¾î ÀÖÁö ¾Ê´Ù. ±×·¯³ª, Java API ·¹ÆÛ·±½ºÀÇ NullPointerException Ç׿¡´Â ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù.</DIV><BR> <DIV>"object°¡ ÇÊ¿äÇÑ °æ¿ì applicationÀÌ nullÀ» »ç¿ëÇÏ·Á°í Çϸé throwµÈ´Ù. °¡·É ´ÙÀ½°ú °°Àº °æ¿ìÀÌ´Ù." <UL> <LI>null objectÀÇ instance method È£Ãâ <LI>null objectÀÇ field(member variables)¿¡ ´ëÇÑ ¾×¼¼½º ¶Ç´Â ±× °ªÀÇ º¯°æ <LI>nullÀÇ ±æÀ̸¦ ¹è¿Ã³·³ ÃëµæÇÒ °æ¿ì <LI>nullÀÇ slotÀ» ¹è¿Ã³·³ ¾×¼¼½º ¶Ç´Â ¼öÁ¤ <LI>nullÀ» Throwableó·³ throw ÇÒ °æ¿ì </LI></UL>À§¿¡¼ null object¶ó´Â ¸»ÀÌ µîÀåÇϴµ¥ ÀÌ´Â °øÂüÁ¶¿¡ °´Ã¼°¡ ºÙ¾î ÀÖÁö ¾ÊÀº °ÍÀÌ ¾Æ´Ï¶ó nullÀ» °¡¸®Å°´Â °´Ã¼¶ó°í º¼¼ö ÀÖ´Ù. Áï, °øÂüÁ¶¶ó´Â °ÍÀº JVM¿¡¼ ºÃÀ»¶§ ¾Æ¹«°Íµµ ÂüÁ¶ÇÏÁö ¾Ê´Â°ÍÀÌ ¾Æ´Ï¶ó nullÀ̶ó°í ÇÏ´Â object¸¦ ÂüÁ¶Çϰí Àִ°ÍÀÌ´Ù. ±×·¯³ª JSL 4.3.1¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ³ª¿ÍÀÖ´Ù.</DIV><BR> <DIV>"ÂüÁ¶°ª(reference)Àº ÀÌ·¯ÇÑ °´Ã¼ÀÇ Æ÷ÀÎÅͳª ¾î¶² °´Ã¼µµ ÂüÁ¶ÇÏÁö ¾Ê´Â Ư¼öÇÑ nullÂüÁ¶°¡ µÈ´Ù"</DIV><BR> <DIV>Áï, °øÂüÁ¶´Â ¾î¶² °´Ã¼µµ ÂüÁ¶ÇÏÁö ¾Ê´Â´Ù°í ´ÜÁ¤Çϰí ÀÖ´Ù. ÇÏÁö¸¸ '==' ¿¬»ê¿¡ ÀÖ¾î µÎ°³ÀÇ °´Ã¼°¡ ¸ðµÎ nullÀ̰ųª µ¿ÀÏÇÑ °´Ã¼ ¶Ç´Â ¹è¿ ÂüÁ¶ÀÇ °æ¿ì true¶ó°í µÇ¾îÀִ°ÍÀ¸·Î ºÁ¼ ¼·Î ´Ù¸¥ µÎ °´Ã¼°¡ µ¿ÀÏÇÑ nullÀ» ÂüÁ¶Çϰí ÀÖÀ¸¹Ç·Î true°¡ µÈ°ÍÀÌ ¾Æ´Ñ°¡ ÇÏ´Â »ý°¢À» ÇÒ ¼ö ÀÖ´Ù.</DIV><BR> <DIV>Áï, nullÀÌ ObjectÀÇ instance ÇüÅ´ ¾Æ´ÏÁö¸¸ °³³äÀûÀ¸·Î ºÃÀ»¶§ nullµµ object¶ó°í ºÁ¾ß ÇÏÁö ¾ÊÀ»±î? <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.3 target=_blank name=s-2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.3</A> </SPAN>String¿¡ ´ëÇÏ¿© <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.3" target=_blank>#</A></H3> <DIV>String Object¿¡ ´ëÇÑ »ý°¢.</DIV><BR> <DIV><PRE class=wiki>String str = "111222"; String a = "111"; String b = "222"; String c = "111"; String d = b; String t = str.substring(0,3); //111</PRE></DIV><BR> <DIV>À§ÀÇ ¼Ò½º¸¦ º¸°í ´ÙÀ½ÀÌ ÂüÀÎÁö »ý°¢ÇØ º¸ÀÚ. (==¿¬»êÀÚ´Â Æ÷ÀÎÅÍÀÇ ºñ±³ÀÌÁö °ªÀÇ ºñ±³°¡ ¾Æ´Ô)</DIV><BR> <DIV> <OL type=1> <LI>str == (a + b) ==> À̰ÍÀº µÎ°³ÀÇ ÂüÁ¶¿Í ÇϳªÀÇ ÂüÁ¶¸¦ ºñ±³ÇßÀ¸¹Ç·Î ´ç¿¬È÷ falseÀÌ´Ù. <LI>a == b ==> À̰ÍÀº ´ç¿¬È÷ false <LI>d == b ==> À̰ÍÀº µ¿ÀÏÇÑ referenceÀ̹ǷΠtrue <LI>a == t ==> a ¿Í t ´Â µÑ´Ù °ªÀÌ "111"ÀÌ´Ù. ÇÏÁö¸¸ À̰ÍÀº ¼·Î ´Ù¸¥ ÂüÁ¶¸¦ °¡Á® falseÀÌ´Ù. ±×·¸´Ù¸é ´ÙÀ½ 5¹øµµ falseÀϱî? <LI>a == c ==> À̰ÍÀº trueÀÌ´Ù. ¾Æ.. 4¹ø°ú È¥¶õ½º·´´Ù. À̰ÍÀÌ ÂüÀÎ ÀÌÀ¯´Â? ==> À̰ÍÀÇ ÇØ´äÀº JSR 3.10.5¿¡ ´ÙÀ½°ú °°ÀÌ ³ª¿Í Àֱ⠶§¹®ÀÌ´Ù. </LI></OL>"µ¿ÀÏÇÑ ³»¿ëÀÇ ¹®ÀÚ¿ ¸®ÅÍ·²¿¡ °üÇØ¼´Â ÀνºÅϽº¸¦ Çϳª¹Û¿¡ »ý¼ºÇÏÁö ¾Ê´Â´Ù."</DIV><BR> <DIV>Áï, À§ÀÇ a¿Í c ´Â '=' ¸¦ ÀÌ¿ëÇÏ¿© ¹®ÀÚ¿ ¸®ÅÍ·²À» »ý¼ºÇÏ°Ô µÇ´Âµ¥ a ¿¡¼ ÀÌ¹Ì ¸¸µé¾î ³õ¾ÒÀ¸¹Ç·Î c¿¡¼´Â ±×°ÍÀ» ÂüÁ¶ÇÑ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.4 target=_blank name=s-2.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.4</A> </SPAN>°´Ã¼ÁöÇâÀÇ Ä¸½¶È ÆÄ±« ÁÖÀÇ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.4" target=_blank>#</A></H3> <DIV>"object pointer¸¦ ¹ÝȯÇÏ´Â getter method´Â °´Ã¼ÁöÇâÀÇ Ä¸½¶È°¡ ÆÄ±«µÉ °¡´É¼ºÀÌ ÀÖ´Ù." ÀÌ´Â objectÇüÀÇ field(member variable)ÀÇ getter¿¡¼ ÀÌ object¸¦ ±×³É ¹ÝȯÇϸé ÀÌ object¸¦ ¹ÞÀºÂÊÀ̳ª ÂüÁ¶Çϰí ÀÖ´Â ´Ù¸¥ÂÊ¿¡¼ ÀÌ objectÀÇ ³»¿ëÀ» º¯°æÇÏ°Ô µÇ¹Ç·Î »ç½Ç ĸ½¶È(Àº´Ð)´Â ÀÌ·ç¾î ÁöÁö ¾Ê¾Ò´Ù°í ºÁ¾ßÇÑ´Ù.</DIV><BR> <DIV>"ÀÌ·² °æ¿ì object¸¦ clone(º¹Á¦) ÇÏ¿© ¹ÝȯÇÏÁö ¾Ê¾Æµµ µÇ´ÂÁö¸¦ ¹Ýµå½Ã »ý°¢ÇØ º»´Ù."</DIV><BR> <DIV>objectÀÇ º¹»ç¿¡´Â shallow copy¿Í deep copy°¡ ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>//(Âü°í)Member¿¡´Â µÎ°³ÀÇ field(Identity Class ÇüÀÇ ID¿Í Family Class ÇüÀÇ family)°¡ ÀÖ´Ù. /** shallow copy */ Member shallowCopy(){ Member newer = new Member(); newer.id = this.id; newer.family = this.family; return newer; } /** deep copy */ Member deepCopy(){ Member newer = new Member(); newer.id = new Idetity(this.id.getId(), this.id.getName()); newer.family = new Family(this.family.getFamilyName(), this.family.getFamilyInfo()); return newer; }</PRE></DIV><BR> <DIV>À§ ¼Ò½º¿¡¼ º¸µíÀÌ shallowCopy ´Â object¸¦ º¹»çÇÏ¿© ¹ÝȯÇÑ°Í Ã³·³ º¸ÀÌÁö¸¸, »ç½ÇÀº Member object¸¸ »õ·Î »ý¼ºµÇ¾úÀ»»Ó MemberÀÇ field´Â newer¿Í this µÑ´Ù ¼·Î°°Àº ÈüÀÇ id¿Í family¸¦ ÂüÁ¶ÇÑ´Ù. ÇÏÁö¸¸ µÎ¹øÂ° methodÀÎ deepCopyÀÇ °æ¿ì MemberÀÇ field¸¦ »õ·Î »ý¼ºÇÏ¿© º¹»çÇϹǷΠ¼·Î ´Ù¸¥ id¿Í familyÀÌ´Ù.</DIV><BR> <DIV>"Java¿¡¼´Â cloneÀ̶ó´Â method°¡ ÁغñµÇ¾î »ç¿ëµÇ´Âµ¥ ÀÌ´Â ±âº»ÀÌ shallow copyÀÓÀ» ¸í½ÉÇØ¾ß ÇÑ´Ù. deep copy¸¦ »ç¿ëÇϱâ À§Çؼ´Â clone method¸¦ overloadÇϰųª µû·Î ¸¸µé¾î Á÷Á¢ ±â¼úÇØ¾ß ÇÑ´Ù." <DIV class=indent> </DIV>(Âü°í) object¸¦ immutable(º¯ÇÏÁö ¾Ê´Â, ºÒº¯ÀÇ °´Ã¼)·Î ¸¸µå´Â ¿ä·É <OL type=1> <LI>¸ðµç field(member variable)¸¦ »ý¼ºÀÚ(constructor)¸¦ ÀÌ¿ëÇÏ¿© ÃʱâÈ ÇÑ´Ù. <LI>¸ðµç field´Â privateÀ¸·Î ¼±¾ðÇϰí, getter method´Â ¸¸µéµÇ setter´Â ±â¼úÇÏÁö ¾Ê´Â´Ù. </LI></OL>Áï, °ªÀ» º¯°æÇϱâ À§Çؼ´Â object¸¦ ´Ù½Ã ¸¸µé¾î¾ß¸¸ ÇÏ´Â ºÒÆíÀº ÀÖÁö¸¸ ¾ÈÀüÇÏ°Ô »ç¿ëÇÏ·Á ÇÒ¶§ À¯¿ëÇÏ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-2.5 target=_blank name=s-2.5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5</A> </SPAN>¹è¿¿¡ ´ëÇÏ¿© <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.5.1 target=_blank name=s-2.5.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.1</A> </SPAN>¹è¿Àº object Àΰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.1" target=_blank>#</A></H4> <DIV>JVM¿¡¼ ¹è¿Àº object·Î Ãë±ÞµÇ¾î object¿Í °°ÀÌ aload, astore¿Í °°ÀÌ bytecode·Î ±â¼úµÇ¾î Áø´Ù. int[] iarr = new int10; ¿¡¼ º¸´Â°Í°ú °°ÀÌ new·Î Heap ¿µ¿ª¿¡ object¸¦ »ý¼ºÇϹǷΠobjectÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-2.5.2 target=_blank name=s-2.5.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.2</A> </SPAN>¹è¿ÀÇ length´Â ¿Ö field(member variable)Àΰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.2" target=_blank>#</A></H4> <DIV>StringÀÇ ±æÀ̸¦ ±¸ÇÒ¶§´Â length()¿Í °°ÀÌ method¸¦ ÀÌ¿ëÇϴµ¥ ¹è¿Àº objectÀÓ¿¡µµ ºÒ±¸Çϰí legth¿Í °°ÀÌ Çʵå·Î µÇ¾îÀÖ´Ù. 'ÀÌ·¡µµ Java°¡ ¿ÏÀüÇÑ °´Ã¼ÁöÇâ ¾ð¾îÀΰ¡' ¶ó´Â ÀǽÉÀÌ µé°Ô ÇÑ´Ù. ±×·¸´Ù¸é length°¡ publicÀ̹ǷΠarray.length = 100; °ú °°ÀÌ ÇÏ¸é ¹è¿ Å©±â°¡ º¯°æµÇ³ª?</DIV><BR> <DIV>À̰ÍÀº ÄÄÆÄÀÏ ¿À·ù°¡ ³´Ù. length´Â finalÀÌ¶ó °ªÀ» º¯°æ ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ±×·¸´Ù¸é final field·Î ÇÑ ÀÌÀ¯´Â ¹«¾ùÀ̳Ĵ Java News Group¿¡ ã¾Æº¸¸é ´ëºÎºÐÀÌ "È¿À²À» À§Çؼ"¶ó°í µÇ¾î ÀÖ´Ù. JIT compiler¸¦ »ç¿ëÇÏÁö ¾Ê´ÂÇÑÀº methodº¸´Ù´Â field°¡ ºü¸¥°Ç ´ç¿¬ÇÑ °ÍÀÌ´Ù.</DIV><BR> <DIV>±×·±µ¥ Á¤¸» ¾Ë¼ö ¾ø´Â°ÍÀº byte code¿¡¼´Â arraylength¶ó´Â Àü¿ë¸í·ÉÀ¸·Î ÄÄÆÄÀÏ µÈ´Ù. Áï, length´Â JavaÀÇ ¹®¹ýÀÌ ¾îÂîµÇ¾úµç JVM·¹º§¿¡¼´Â field°¡ ¾Æ´Ñ°ÍÀÌ ºÐ¸íÇÏ´Ù. ±×·¸´Ù¸é È¿À²À» À§Çؼ field·Î Çß´Ù´Â °ÍÀº µµµ¥Ã¼ ¹«½¼ ¼Ò¸®Àΰ¡?</DIV><BR> <DIV>Àü¹®°¡µéÀÇ ´ë´ä¿¡´Â À̰ÍÀº JavaÀÇ ¼ö¼ö²²³¢ Áß Çϳª¶ó°í ´ë´äÇÏ´Â »ç¶÷ÀÌ ¸¹´Ù°í ÇÑ´Ù.^^;</DIV></DIV> <DIV> <H4><A class=con_link id=s-2.5.3 target=_blank name=s-2.5.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.3</A> </SPAN>final°ú ¹è¿¿¡ ´ëÇÏ¿©... <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.3" target=_blank>#</A></H4> <DIV>¿ì¸®°¡ ÈçÈñ ¾Õ¿¡¼µµ ³ª¿Â¹Ù ÀÖÁö¸¸ finalÀº °ªÀ» º¯°æÇÒ ¼ö ¾ø´Â °ÍÀ̶ó°í¸¸ »ý°¢ÇÏÁö object·Î µÇ¾î ÀÖÀ» °æ¿ì ±× object´Â º¯°æ °¡´ÉÇÏ´Ù´Â °ÍÀ» ÀذïÇÑ´Ù. ¹è¿µµ objectÀ̹ǷΠ¸¶Âù°¡Áö´Ù.</DIV><BR> <DIV>final int[] iarr = new int[5]; Àϰæ¿ì iarr = null; Àº ¿¡·¯°¡ ³ªÁö¸¸ iarr[3] = 5; ´Â ¿¡·¯°¡ ³ªÁö ¾Ê´Â´Ù. Áï, finalÀÌ ÁöÁ¤µÇ¾î Àִ°ÍÀº iarrÀÌÁö iarrÀÌ °¡¸®Å°´Â °÷ ¹è¿ÀÇ ¿ä¼Ò°¡ ¾Æ´Ñ °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-2.5.4 target=_blank name=s-2.5.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.5.4</A> </SPAN>"Java¿¡¼ÀÇ ´ÙÂ÷¿ø ¹è¿Àº Á¸ÀçÇÏÁö ¾Ê´Â´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.5.4" target=_blank>#</A></H4> <DIV>°¡·É 2Â÷¿ø ¹è¿ ó·³ º¸ÀÌ´Â int[][] iarr ¶Ç´Â int[] iarr[] Àº ÀÏÂ÷¿ø ¹è¿ µÎ°³ÀÌÁö 2Â÷¿ø Çà¿ ±¸Á¶°¡ ¾Æ´Ñ°ÍÀÌ´Ù. Áï, µÎ°³ÀÇ ¹è¿Àº °¢°¢ÀÌ ¹è¿·Î µÇ¾î ÀÖ´Â °ÍÀÌÁö Å×À̺í(Çà¿)ÇüŰ¡ ¾Æ´Ï´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-2.6 target=_blank name=s-2.6></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.6</A> </SPAN>Àμö(parameter/argument)Àü´ÞÀÇ °³³ä <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.6.1 target=_blank name=s-2.6.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.6.1</A> </SPAN>"Java¿¡¼ parameter(argument) Àü´ÞÀº ¹«Á¶°Ç 'call by value' ÀÌ´Ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.1" target=_blank>#</A></H4> <DIV>primitive typeÀÇ °æ¿ì È£ÃâÇÑ ÂÊÀÇ º¯¼ö°ªÀº È£Ãâ ¹ÞÀº method³»¿¡¼ °ªÀÌ º¯°æµÇ¾îµµ º¯°æµÇÁö ¾Ê´Â´Ù. reference typeÀÇ °æ¿ìµµ referenceµÇ´Â object¿¡ ´ëÇØ¼´Â ÇÔ²² º¯°æµÇÁö¸¸ reference pointer´Â call by valueÀÌ´Ù. object¸¦ °¡¸®Å°´Â pointer´Â call by value·Î º¯°æµÇÁö¸¸ HeapÀÇ ½ÇÁ¦ object³»¿ëÀº º¯°æµÇÁö ¾Ê´Â´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-2.6.2 target=_blank name=s-2.6.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.6.2</A> </SPAN>"C¿Í °°Àº ¾ð¾î´Â static linkingÀÌÁö¸¸, Java´Â dynamic linkingÀÌ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.6.2" target=_blank>#</A></H4> <DIV>µû¶ó¼ Java´Â Class ÆÄÀÏÀÌ Ã³À½¿¡ ÇѲ¨¹ø¿¡ memory¿¡ ÀÐÇôÁö´Â °ÍÀÌ ¾Æ´Ï¶ó ·±Å¸Àӽÿ¡ ±×°ÍÀÌ ÇÊ¿äÇØ Á³À»¶§ ÀÐÇôÁö°í ¸µÅ·µÈ´Ù. static fieldÀÇ ¿µ¿ªµµ Class°¡ ÀÐÇôÁö´Â ½ÃÁ¡¿¡ ºñ·Î¼ È®º¸µÈ´Ù. ÀÌ·¸°Ô µÇ¸é ÃÖÃÊ °¡µ¿½Ã°£ÀÌ ´ÜÃàµÇ°í ³¡±îÁö »ç¿ëÇÏÁö ¾Ê´Â ClassÀÇ °æ¿ì ½Å°æ¾µ Çʿ䰡 ¾ø¾îÁö°Ô µÈ´Ù.</DIV><BR> <DIV>µû¶ó¼ static field´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀ۵Ǿî ÇØ´ç Class°¡ ÇÊ¿äÇØ Á³À»¶§ JVMÀÌ ¾Ë¾Æ¼ load/link ÇØ ÁØ´Ù. Áï, static field´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â ½ÃÀÛÇÒ ¶§ºÎÅÍ ³¡³¯¶§±îÁö °è¼ÓÇØ¼ Á¸ÀçÇÏ´Â °ÍÀ̶ó°í º¸¸é µÈ´Ù. <DIV class=indent> </DIV>(Âü°í) ¸µÅ·(linking)ÀÇ ÀǹÌ</DIV><BR> <DIV>linkµÈ´Ù´Â °ÍÀº Class°¡ memory¿¡ loadingµÉ ¶§ ƯÁ¤ ¸Þ¸ð¸® ¹øÁö¿¡ loadingµÇ´Âµ¥ ÀÌ ¸Þ¸ð¸® ¹øÁö´Â loadingµÉ¶§ ¸¶´Ù ´Ù¸¥ ¹øÁö¼ö¿¡ loadingµÈ´Ù. À̶§ÀÇ ¸Þ¸ð¸® ÁÖ¼Ò°ª(Java¿¡¼´Â ½ÇÁ¦ ¸Þ¸ð¸® °ªÀÌ ¾Æ´Ò ¼ö ÀÖ´Ù)À» ÇöÀç ½ÇÇàÁßÀÎ ÇÁ·Î±×·¥¿¡¼ ¾Ë ¼ö ÀÖµµ·Ï ÇÏ¿© ÇØ´ç Class¿¡ ´ëÇÑ ÂüÁ¶°¡ °¡´ÉÇϵµ·Ï ¿¬°áÇÏ´Â °úÁ¤ÀÌ´Ù.</DIV><BR> <DIV>Á¤Àû(static) link¶ó´Â °ÍÀº ÀÌ·¯ÇÑ ¸Þ¸ð¸®¿¡ ´ëÇÑ ÁÖ¼Ò Á¤º¸¸¦ ÄÄÆÄÀÏ ½Ã¿¡ compiler°¡ ¹Ì¸® °áÁ¤ÇÏ´Â °ÍÀ̰í, µ¿Àû(dynamic) link¶ó´Â °ÍÀº ÇÁ·Î±×·¥ ¼öÇà Áß °áÁ¤µÇ´Â °ÍÀ» ÀǹÌÇÑ´Ù. Á¤ÀûÀÎ linkÀÇ °æ¿ì Á÷Á¢ÀûÀ¸·Î ¸Þ¸ð¸®ÀÇ ¹øÁö°ªÀÌ ÇÒ´ç µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó offset°ª(±âÁØÀ§Ä¡·Î ºÎÅÍÀÇ index°ª)À¸·Î ¿¬°á½ÃŲ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-2.7 target=_blank name=s-2.7></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.7</A> </SPAN>GC ¿¡ ´ëÇÏ¿© Àá±ñ! <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.7.1 target=_blank name=s-2.7.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.7.1</A> </SPAN>"Garbage CollectionÀº ¸¸´ÉÀÌ ¾Æ´Ï´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.7.1" target=_blank>#</A></H4> <DIV>Java¿¡´Â free°¡ ¾ø´Ù. GC°¡ ¾Ë¾Æ¼ ÇØÁØ´Ù. ÇÏÁö¸¸ GC ¼öÇàÁß¿¡´Â ÇÁ·Î±×·¥ÀÌ ¸ØÃß´Â °Í°ú µ¿ÀÏÇÑ Áõ»óÀÌ ³ªÅ¸³ª±â ¶§¹®¿¡ GC°¡ ÀÚÁÖ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÁ·Î±×·¥ ÇØ¾ß ÇÑ´Ù. ¼ºñ½º µÇ°í ÀÖ´Â ½Ã½ºÅÛ¿¡¼µµ °¡²û ½Ã½ºÅÛÀÌ ÀÀ´äÀÌ ´Ê¾îÁö´Â ½ÃÁ¡ÀÌ Àִµ¥, ÀÌ´Â GC°¡ ¼öÇàµÇ°í ÀÖ´Â ÁßÀÌ ´ëºÎºÐÀÌ´Ù.</DIV><BR> <DIV>±×·¸´Ù¸é GC°¡ ÀÚÁÖ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇØ¾ß Çϴµ¥ °¡ÀåÁÁÀº ¹æ¹ýÀº ¹«¾ùÀϱî? ±×°ÍÀº ¹Ù·Î ºÒÇÊ¿äÇÑ °´Ã¼¸¦ »ý¼ºÇÏÁö ¾Ê´Â °ÍÀÌ ¾Æ´Ò±î?</DIV><BR> <DIV>°³ÀÎÀûÀ¸·Î Java¿¡ free°¡ ¾ø´Â°ÍÀÌ ³Ê¹«³ª µçµçÇÏ°Ô ´À²¸Áø´Ù. ÀÌÀ¯´Â µÎ°³ÀÇ º¯¼ö°¡ Heap³»ÀÇ ÇϳªÀÇ object¸¦ referenceÇϰí ÀÖÀ» °æ¿ì ½Ç¼ö·Î ÇϳªÀÇ º¯¼ö¸¸ freeÇØ ¹ö¸®¸é ³ª¸ÓÁö Çϳª´Â dangling pointer¶óÇÏ¿© reference pointer°¡ ¸ð¸£´Â »çÀ̵¥ »ç¶óÁ® ¹ö·Á °ï°æ¿¡ óÇÏ´Â °ÍÀ» ¿¹¹æÇØ Áֱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>Âü°í·Î Object class¿¡´Â finalizer¶ó´Â method°¡ ÀÖ¾î GC ¼öÇà½ÃÁ¡¿¡ È£ÃâµÇ´Â method°¡ ÀÖÁö¸¸ À̰ÍÀº GC°¡ ¾ðÁ¦ ¼öÇàµÉÁö ¾Ë ¼ö ¾øÀ¸¹Ç·Î °ú½ÅÇÏÁö ¸»¾Æ¾ß ÇÒ °ÍÀÌ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-2.8 target=_blank name=s-2.8></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.8</A> </SPAN>Java Pointer °á·Ð <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-2.8.1 target=_blank name=s-2.8.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>2.8.1</A> </SPAN>"°á±¹ Java¿¡´Â pointer°¡ ÀÖ´Â °ÍÀΰ¡, ¾ø´Â °ÍÀΰ¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-2.8.1" target=_blank>#</A></H4> <DIV>Java´Â Heap³»ÀÇ Object¸¦ ÂüÁ¶(reference)Çϰí ÀÖ°í, ÂüÁ¶´Â °á±¹ °³³äÀÌ Æ÷ÀÎÅÍ¿Í °°Àº °ÍÀ̹ǷÎ, "Java¿¡´Â pointer°¡ ¾ø´Ù"´Â °ÍÀº ¾îºÒ¼º¼³ÀÌ´Ù.<BR>// À̺κп¡ ´ëÇØ Object¸¦ ÀÌÇØÇϽøé Á·È÷ ÀÌ·± ¹®Á¦´Â »ç¶óÁú°ÍÀ¸·Î º¾´Ï´Ù.<BR>// Ŭ·¡½º¿¡ ´ëÇÑ ÀνºÅϽº(object)µéÀº reference·Î ¹Û¿¡ °¡Áú(ÂüÁ¶µÉ)¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù.<BR>// ÄÄÆÄÀÏ·¯ ÀÔÀåÀÌ ¾Æ´Ñ ¾ð¾î ÀÚüÀÇ »ç»óÀ» °¡Áö°í ½±°Ô ÀÌÇØ½ÃŰ´Â °ÍÀÌ ÁÁÀ»°Í °°½À´Ï´Ù.</DIV><BR> <DIV>JSR 4.3.1À» º¸¸é ´ÙÀ½°ú °°Àº ¸»ÀÌ ³ª¿Â´Ù.</DIV><BR> <DIV>"ÂüÁ¶°ª(reference)Àº °´Ã¼ÀÇ pointerÀ̰ųª, ¶Ç´Â ¾î¶°ÇÑ °´Ã¼µµ ÂüÁ¶ÇÏÁö ¾Ê´Â Ư¼öÇÑ null ÂüÁ¶°¡ µÈ´Ù"</DIV><BR> <DIV>¶ÇÇÑ java.sun.comÀÇ Java programmer's FAQ¿¡ "Java´Â pointer°¡ ¾ø´Ù°í Çϴµ¥, linked list´Â ¾î¶»°Ô ¸¸µé¾î¾ß Çϳª?"¶ó´Â Áú¹®¿¡ ´ÙÀ½°ú °°ÀÌ ´äº¯ÀÌ ³ª¿ÍÀÖ´Ù.</DIV><BR> <DIV>(´äº¯) Java¿¡ °üÇÑ ¸¹Àº ¿ÀÇØÁß¿¡¼ À̰ÍÀÌ °¡Àå ½É°¢ÇÑ °ÍÀÌ´Ù. Æ÷ÀÎÅͰ¡ ¾ø±â´Â Ä¿³ç Java¿¡ ÀÖ¾î °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹ÖÀº ¿À·ÎÁö pointer¿¡ ÀÇÇØ ÇàÇØÁø´Ù. ´Ù½Ã ¸»»õ °´Ã¼´Â Ç×»ó Æ÷ÀÎÅ͸¦ °æÀ¯Çؼ¸¸ accessµÇ¸ç °áÄÚ Á÷Á¢ÀûÀ¸·Î accessµÇÁö ¾Ê´Â´Ù. pointer´Â reference(ÂüÁ¶)¶ó°í ºÒ¸®¸ç ´ç½ÅÀ» À§ÇØ ÀÚµ¿À¸·Î ÂüÁ¶µÈ´Ù.</DIV><BR> <DIV>"Java¿¡´Â pointer°¡ ¾ø°í ÁÖÀåÇÏ´Â ¸ðµç ¼Àû°ú ±ÛµéÀº JavaÀÇ reference»ç¾ç¿¡ ¸ð¼øµÈ´Ù°í ºÁ¾ß ÇÒ °ÍÀÌ´Ù."</DIV></DIV> <DIV> <H2><A class=con_link id=s-3 target=_blank name=s-3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>3</FONT></A> </SPAN>»ó¼Ó°ú interfaceÀÇ ¹®Á¦Á¡ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-3.1 target=_blank name=s-3.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1</A> </SPAN>»ó¼Ó <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-3.1.1 target=_blank name=s-3.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1.1</A> </SPAN>»ó¼Ó¿¡ ÀÖ¾î¼ÀÇ »ý¼ºÀÚ(constructor) <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.1" target=_blank>#</A></H4> <DIV>"childÀÇ default »ý¼ºÀÚ°¡ ÀÖÀ¸¸é ±× »ý¼ºÀÚ¿¡´Â parentÀÇ »ý¼ºÀÚ(super()) È£ÃâÀÌ compile½Ã ÀÚµ¿ »ðÀԵȴÙ." µû¶ó¼ super() ÀÌÀü¿¡ ´Ù¸¥ Äڵ尡 ÀÖÀ¸¸é object°¡ »ý¼ºµÇ±â ÀÌÀüÀ̹ǷΠ¿À·ù¸¦ ¹ß»ýÇÏ°Ô µÈ´Ù.</DIV></DIV> <DIV> <H4><A class=con_link id=s-3.1.2 target=_blank name=s-3.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1.2</A> </SPAN>"down cast´Â º»ÁúÀûÀ¸·Î ¸Å¿ì À§ÇèÇÏ´Ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.2" target=_blank>#</A></H4> <DIV>down cast - childÀÇ typeÀ¸·Î parent¸¦ casting - ´Â parent ÇüÅÂÀÇ typeÀÌ Á¤¸» child typeÀÎÁö compile½Ã¿¡´Â ¾Ë ¼ö ¾ø´Ù. ½ÇÇà½Ã¿¡ type check°¡ ÀÌ·ç¾î Áö¹Ç·Î runtime½Ã¿¡ ClassCastExceptionÀÌ ¹ß»ýÇÒ °¡´É¼ºÀÌ Ä¿Áø´Ù.</DIV><BR> <DIV>"ÇÁ·Î±×·¡¹Ö½Ã ¿À·ù´Â °¡´ÉÇÑÇÑ compile½Ã¿¡ ó¸®Çϴ°ÍÀÌ ÁÁ´Ù."</DIV></DIV> <DIV> <H4><A class=con_link id=s-3.1.3 target=_blank name=s-3.1.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.1.3</A> </SPAN>"Ãß»óŬ·¡½º¿¡ finalÀÌ ÀÖÀ¸¸é compile errorÀÌ´Ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.1.3" target=_blank>#</A></H4> <DIV>abstract method°¡ Àִ Ŭ·¡½º´Â Ãß»ó Ŭ·¡½ºÀ̰í Ãß»óŬ·¡½º´Â »ó¼ÓµÇÁö ¾ÊÀ¸¸é ¾Æ¹«·± Àǹ̰¡ ¾ø±â ¶§¹®ÀÌ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-3.2 target=_blank name=s-3.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.2</A> </SPAN>interface <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-3.2.1 target=_blank name=s-3.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.2.1</A> </SPAN>"interface´Â interfaceÀÏ»Ó ´ÙÁß »ó¼ÓÀÇ ´ë¿ëǰÀÌ ¾Æ´Ï´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.2.1" target=_blank>#</A></H4> <DIV>interface¸¦ method signature - Ãß»óŬ·¡½º¿Í °°ÀÌ ±¸ÇöºÎ´Â ¾øÀÌ ¼±¾ðºÎ¸¸ ÀÖ´Â method - ÀÇ ¿ëµµ·Î »ý°¢Çϴ°ÍÀÌ Java¿¡¼´Â ¿Ç´Ù. Áï, interface´Â final field¿Í abstract method°¡ Àִ Ŭ·¡½º¿Í µ¿ÀÏÇϱä ÇÏÁö¸¸ »ó¼ÓÀÇ Àǹ̿ʹ ±× ¿ëµµ°¡ ´Ù¸£´Ù. °øÅëµÈ typeÀ» Á¤ÀÇÇϴ°ÍÀ¸·Î º¸´Â°ÍÀÌ ¸Â´Â ÀǹÌÀÏ °ÍÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ interface´Â Ŭ·¡½º¸¦ ÀçÀÌ¿ëÇϱâ À§ÇØ »ó¼ÓÀ» »ç¿ëÇÏ¿© ĸ½¶ÈÀÇ ÆÄ±«¸¦ ¼ö¹ÝÇÏ´Â °ÍÀ» ¹æÁöÇÏ´Â ±â´ÉÀÌÀÖ´Ù. »ó¼ÓÀ» »ç¿ëÇÏ¸é ¸ðµÎ ±¸ÇöÈÄ ¸¶Ä¡ ¼Ò½º Äڵ尡 ¿©±âÀú±â õ Á¶°¢À» ÁÖ¿ö ¸ð¾Æ ¸¸µç '´©´õ±â'°°ÀÌ º¸ÀÌ´Â °Í¿¡ ÇѼûÀ» ½® °æÇèÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ºÎºÐÀ» interface·Î ±¸ÇöÇÏ¸é º¸´Ù ±ò²ûÇÑ Äڵ尡 ³ª¿À°Ô µÈ´Ù. ¹°·Ð public°ú protected¸¦ ÀûÀýÈ÷ Àß »ç¿ëÇØµµ µÇ±ä ÇÏÁö¸¸ ¸»ÀÌ´Ù.</DIV><BR> <DIV>ÇÏÁö¸¸ »ó¼ÓÀº ¸Þ¼Òµå ¿À¹ö¶óÀ̵åÇÑ °æ¿ì Ŭ·¡½º¸¦ ¸¶À½´ë·Î °³Á¶ÇØ ¹ö¸° ¼ÀÀÌ µÇ¹Ç·Î ¾îµð¼±°¡ ¹¦ÇÑ ¸ð¼øÀÌ ¹ß»ýÇÏ°Ô µÉ °¡´É¼ºµµ ³ô¾ÆÁú»Ó ¾Æ´Ï¶ó Ãß»óŬ·¡½ºÀÇ °æ¿ì ½ÇÁ¦ ±¸ÇöºÎ°¡ ¾îµð¿¡ À§Ä¡ÇÏ´ÂÁöµµ ¿¡¸ÅÇÏ°Ô ´À²¸Áú ¼ö ÀÖ¾î ºÒ¾ÈÇÑ Äڵ尡 µÇ°í ¸¸´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-3.3 target=_blank name=s-3.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>3.3</A> </SPAN>»ó¼Ó Á¦´ë·Î »ç¿ëÇϱâ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-3.3" target=_blank>#</A></H3> <DIV>"±×·¸´Ù¸é Á¦´ë·Î µÈ »ó¼ÓÀº ¾î¶»°Ô ÆÇ´ÜÇÒ ¼ö ÀÖÀ»±î?"</DIV><BR> <DIV>»ó¼ÓÀº 'is a'°ü°è°¡ ¼º¸³ÇØ¾ß ¿Ã¹Ù¸£´Ù. Áï '¼ºêŬ·¡½º(ÀÚ½Ä) is a ½´ÆÛŬ·¡½º(ºÎ¸ð)'°¡ ¼º¸³ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é Red is a Color´Â ¿Ã¹Ù¸¥ ¸íÁ¦ÀÌÁö¸¸ Engine is a Car´Â 'has a'°ü°èÀ̹ǷΠ»ó¼ÓÀ̶ó°í º¼ ¼ö ¾ø´Ù. <DIV class=indent> </DIV>"µû¶ó¼ 'has a'°ü°è´Â »ó¼ÓÀÌ ¾Æ´Ï¹Ç·Î composition°ú delegationÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù."</DIV><BR> <DIV>compositionÀº '°´Ã¼¸¦ field°¡ °®°Ô ÇÏ´Â ¹æ¹ý'À» ÀÇÇϹǷΠ'has a'°ü°è°¡ Á¤È®È÷ ¼º¸³ÇÑ´Ù. <DIV class=indent> </DIV>"»ó¼Ó ´ë½Å composition°ú delegation(Á¶ÀÛÀ̳ª 󸮸¦ ´Ù¸¥ °´Ã¼¿¡ À§ÀÓ)À» »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀÌÁ¡ÀÌ ÀÖ´Ù."</DIV><BR> <DIV> <OL type=1> <LI>»ó¼Ó¿¡¼´Â ½´ÆÛŬ·¡½º°¡ Çã¿ëÇϰí ÀÖ´Â Á¶ÀÛÀ» ¼ºêŬ·¡½º¿¡¼ ¸ðµÎ Çã¿ëÇØ¾ß ÇÏÁö¸¸, composition°ú delegation¿¡¼´Â Á¶ÀÛÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. <LI>Ŭ·¡½º´Â °áÄÚ º¯°æÇÒ ¼ö ¾øÁö¸¸, compositionÇϰí ÀÖ´Â °´Ã¼´Â ÀÚÀ¯·Ó°Ô º¯°æÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é Çлý Ŭ·¡½º°¡ ¿µ¿øÀÌ ÇлýÀÌ ¾Æ´Ï¶ó ³ªÁß¿¡ ÃëÁ÷À» ÇÏ¿© Á÷ÀåÀΠŬ·¡½º°¡ µÉ¼ö ÀÖ´Ù. <DIV class=indent> </DIV></LI></OL>»ó¼ÓÀ» composition°ú delegationÀ¸·Î º¯°æÇÏ´Â ¿ä·ÉÀº? ¿©±â¼ Shape¸¦ »ó¼ÓÇÑ Polyline°ú CircleÀ» º¯°æÇÑ´Ù¸é ´ÙÀ½°ú °°´Ù. <OL type=1> <LI>Shape(ºÎ¸ð)ÀÇ °øÅëµÈ ³»¿ëÀ» ±¸ÇöÇÑ ±¸Çö Ŭ·¡½º(ShapeImpl)¸¦ ¸¸µç´Ù. <LI>Polyline°ú Circle Ŭ·¡½º¿¡¼ ShapeImplÀ» compositionÇÏ°í ºÎ¸ð¿Í °øÅëµÇÁö ¾Ê´Â method¸¦ °¢°¢ À§ÀÓ ¹Þ´Â´Ù. <LI>ShapeImpl Ŭ·¡½ºÀÇ method¸¦ ÃßÃâÇÑ ShapeIF interface¸¦ ÀÛ¼ºÇϰí Polyline°ú Circle¿¡¼´Â implements ÇÑ´Ù. </LI></OL></DIV></DIV> <DIV> <H2><A class=con_link id=s-4 target=_blank name=s-4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>4</FONT></A> </SPAN>package¿Í access Á¦¾î¿¡ °üÇÑ ÀÌÇØ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-4.1 target=_blank name=s-4.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.1</A> </SPAN>package <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-4.1.1 target=_blank name=s-4.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.1.1</A> </SPAN>"package´Â '°èÃþ±¸Á¶' Àΰ¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.1" target=_blank>#</A></H4> <DIV>óÀ½ Java¸¦ Á¢ÇÏ¸é¼ package¿¡ ´ëÇØ ÀÌÇØÇÒ¶§ ¸¶Ä¡ ÆÄÀϽýºÅÛ°ú °°Àº °èÃþ±¸Á¶¶ó°í ÀÌÇØÇÏ°Ô µÇ¾î ' import /test/*.class '´Â ¿Ö ¾ÈµÇ´ÂÁö ÀǾÆÇØ Çß´ø ±â¾ïÀÌ ÀÖ´Ù. ±×¸®°í ºÎ¸ð directory¿¡ Àִ Ŭ·¡½º¿¡¼ ¿Ö ÀÚ½Ä directory¿¡ ÀÖ´Â Class¸¦ import¾øÀÌ »ç¿ëÇÒ ¼ö ¾ø´ÂÁöµµ ÀÌ»óÇß´Ù.</DIV><BR> <DIV>Áï, package¿¡¼ µ¿ÀÏ ºÎ¸ð¶óµµ ¼·Î ´Ù¸¥ package´Â ¿ÏÀüÈ÷ º°°³ÀÇ package¿´´ø °ÍÀÌ´Ù. ÀÌ ºÎºÐ¿¡ °üÇØ¼´Â JLS 7.1 ¿¡¼ ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù°í ÇÑ´Ù.</DIV><BR> <DIV>"package°¡ °èÃþÀûÀÎ À̸§ ±¸Á¶·Î µÇ¾î ÀÖ´Â °ÍÀº °ü·ÃµÈ package¸¦ ÀÏÁ¤ ±Ô¾à¿¡ µû¶ó ü°èÈÇϱâ À§ÇؼÀ̰í, package ¾È¿¡¼ ¼±¾ðµÇ¾î ÀÖ´Â top-levelÇü°ú µ¿ÀÏÇÑ À̸§À» °¡Áø ¼ºê package¸¦ °®´Â °ÍÀÌ ±ÝÁöµÇ¾î ÀÖ´Â Á¡À» Á¦¿ÜÇÏ¸é Æ¯º°ÇÑ Àǹ̴ ¾ø´Ù."</DIV><BR> <DIV>Áï, Java¿¡¼´Â packageÀ̸§À» °èÃþÀûÀ¸·Î ¸í¸íÇÒ ¼ö ÀÖÀ»»Ó package±¸Á¶ ÀÚü¿¡´Â ¾î¶² °èÃþÀûÀÎ ÀÇ¹Ì ºÎ¿©µµ ÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù. ´Ù½Ã ¸»Çؼ Java¿¡¼´Â packageÀ̸ªÀ» °èÃþÀûÀ¸·Î ¸í¸íÇÒ ¼ö ÀÖÀ» »Ó ±¸Á¶ÀÚü´Â ÆòÆòÇÑ °ÍÀÌ´Ù. ½ÇÁ¦·Î ¹ÙÀÌÆ® ÄÚµåÀÇ ³»¿ëÀ» º¸¸é ±ú¾îÁø ³»¿ëÁß¿¡ java/lang/String°ú °°ÀÌ ¿ÏÀüÇÑ ÇÑÁ¤À̸§À» classÀ̸§À¸·Î »ç¿ëµÊÀ» ¾Ë ¼ö ÀÖ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-4.1.2 target=_blank name=s-4.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.1.2</A> </SPAN>"compiler °¡ ÀνÄÇÏ´Â class°Ë»ö ¼ø¼(¼Ò½ºÄڵ峻 Ŭ·¡½º°¡ ¹ß°ßµÉ °æ¿ì ±× Ŭ·¡½ºÀÇ À§Ä¡¸¦ ã´Â ¼ø¼)" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.1.2" target=_blank>#</A></H4> <DIV> <OL type=1> <LI>±× classÀڽŠ<LI>´ÜÀÏÇü½ÄÀ¸·Î ÀÓÆ÷Æ®µÈ class <LI>µ¿ÀÏÇÑ ÆÐŰÁö¿¡ Á¸ÀçÇÏ´Â ´Ù¸¥ class <LI>¿Âµð¸àµå Çü½Ä(..* ÇüÅÂ) ÀÓÆ÷Æ® ¼±¾ðµÈ class </LI></OL></DIV></DIV> <DIV> <H3><A class=con_link id=s-4.2 target=_blank name=s-4.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.2</A> </SPAN>access Á¦¾î <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2" target=_blank>#</A></H3> <DIV>publicÀº ´Ù¸¥ package¿¡¼ ÂüÁ¶ °¡´ÉÇϰí, ¹«ÁöÁ¤ÇÒ °æ¿ì µ¿ÀÏÇÑ package³»¿¡¼¸¸ ÂüÁ¶ °¡´ÉÇÏ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-4.2.1 target=_blank name=s-4.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.2.1</A> </SPAN>"interfacde memberÀÇ access Á¦¾î" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.1" target=_blank>#</A></H4> <DIV>interfaceÀÇ member field/method´Â ¸ðµÎ publicÀÌ´Ù. interface member¿¡ protected³ª privateÀ» ÁöÁ¤ÇÒ ¼ö´Â ¾ø´Ù. ¶ÇÇÑ publicÀ» ÁöÁ¤ÇÒ Çʿ䵵 ¾ø´Ù. ÁöÁ¤Çصµ »ó°ü¾øÁö¸¸ JLS 9.4¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ¸í½ÃµÇ¾î ÀÖ´Ù.</DIV><BR> <DIV>"interfaceÀÇ method¿¡ ´ëÇÏ¿© public ¼ö½ÄÀÚ¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ Çã¿ëµÇ°í ÀÖÁö¸¸, style·Î¼´Â ÀüÇô ±ÇÀåÇÒ ¼ö ¾ø´Ù."</DIV><BR> <DIV>Áï, interface member´Â ¸ðµÎ publicÀ̶ó µÇ¾î ÀÖ´Â °ÍÀÌ´Ù. ¶ÇÇÑ James Goslingµµ ÁýÇÊ¿¡ Âü°¡ÇÑ 'ÇÁ·Î±×·¡¹Ö ¾ð¾î Java 3ÆÇ'¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù°í ÇÑ´Ù.</DIV><BR> <DIV>"publicÀÌ ¾Æ´Ñ member¸¦ interface¿¡°Ô °®°Ô ÇÏ´Â °ÍÀº ¾Æ¹«·± Àǹ̰¡ ¾ø´Ù. interfaceÀÇ member¿¡ ´ëÇÑ accessÁ¦¾î¿¡ interface ÀÚ½ÅÀÇ access Á¦ÇÑÀ» Àû¿ëÇÏ´Â °ÍÀ̹ǷΠÀ̰ÍÀº ¾Æ¹«·± Àǹ̰¡ ¾ø´Ù."</DIV></DIV> <DIV> <H4><A class=con_link id=s-4.2.2 target=_blank name=s-4.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>4.2.2</A> </SPAN>±×·¸´Ù¸é interface¸¦ ´Ù¸¥ package¿¡ ´ëÇÏ¿© ¼û±â°í ½ÍÀ¸¸é ¾î¶»°Ô Çϴ°¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-4.2.2" target=_blank>#</A></H4> <DIV>±×°ÍÀº interface ÀÚü ¼±¾ð¿¡ publicÀÌ ¾Æ´Ñ °ÍÀ» Àû¿ëÇÏ¸é µÇ´Â °ÍÀÌ´Ù. memberº°·Î Á¦¾îÇÒ ¼ö ¾ø¾î ºÒÆíÇÑ ¸éµµ ÀÖÁö¸¸, ³ª¸§´ë·Î ±×·² µíÇÑ ±ÔÄ¢ÀÌ´Ù. ÇÏÁö¸¸ À̰ÍÀº Á¤¸» ÀÌ»óÇÑ ³í¸®°¡ ¾Æ´Ò¼ö ¾ø´Ù. publicÀÌ ¾Æ´Ñ interface¿¡ public method°¡ ¹«½¼ Àǹ̰¡ ÀÖ´ÂÁö ¾Ë ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ÀÌ interface¸¦ ±¸ÇöÇÑ Å¬·¡½º¿¡¼µµ method´Â ¸ðµÎ publicÀÌ µÇ¾î¾ß Çϴµ¥, À̰͵µ ¾Æ¹«·¡µµ ÀÌ»óÇÏ´Ù.</DIV></DIV> <DIV> <H2><A class=con_link id=s-5 target=_blank name=s-5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>5</FONT></A> </SPAN>±âŸ Java ±â´É <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-5.1 target=_blank name=s-5.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1</A> </SPAN>Thread <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-5.1.1 target=_blank name=s-5.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.1</A> </SPAN>"Multi Thread¿¡¼´Â È帧Àº º¹¼öÀÌÁö¸¸ data´Â °øÀ¯µÉ ¼ö ÀÖ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.1" target=_blank>#</A></H4> <DIV>Multi processing¿¡¼´Â È帧Àº º¹¼öÀÌÁö¸¸ data´Â µ¶¸³µÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ Multi Thread¿¡¼´Â Heap°ú static¿µ¿ª¿¡ °üÇÑ ÇÑ 2°³ ÀÌ»óÀÇ Thread »çÀÌ¿¡ °øÀ¯°¡ ÀÌ·ç¾î Áø´Ù. µû¶ó¼ 2°³ ÀÌ»óÀÇ Thread¿¡¼´Â µ¿ÀÏÇÑ static field¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ°í, µ¿ÀÏÇÑ °´Ã¼¿¡ Á¢±ÙÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª stack¸¸Àº Threadº°·Î µ¶¸³µÇ¾î ÀÖ´Ù. stackÀº method¿¡ µé¾î°¡´Â ½ÃÁ¡¿¡ È®º¸µÇ°í ºüÁ® ³ª¿À´Â ½ÃÁ¡¿¡ È®º¸µÇ°í ºüÁ® ³ª¿À´Â ½ÃÁ¡¿¡ Free µÇ¹Ç·Î 2°³ ÀÌ»óÀÇ Thread¿¡¼ °øÀ¯ÇÒ ¼ö´Â ¾ø´Â °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.1.2 target=_blank name=s-5.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.2</A> </SPAN>"Thread´Â °´Ã¼¿Í Á÷±³ÇÏ´Â °³³äÀÌ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.2" target=_blank>#</A></H4> <DIV>Multi Thread´Â ¾îµð±îÁö³ª Thread¶ó´Â ó¸® È帧ÀÌ ¿©·¯ °³ Á¸ÀçÇÒ ¼ö ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. ¿ä¾àÇÏ¸é ´ÙÀ½ 3°¡Áö ÀÌ´Ù. <OL type=1> <LI>Multi Thread¿¡¼´Â Thread¶ó´Â ó¸® È帧ÀÌ 2°³ ÀÌ»ó Á¸ÀçÇÒ ¼ö ÀÖ´Ù. <LI>¾î¶² Thread¿¡¼ ¿òÁ÷À̱⠽ÃÀÛÇÑ method°¡ ´Ù¸¥ method¸¦ È£Ãâ ÇßÀ»¶§ È£ÃâµÈ ÃøÀÇ method´Â È£ÃâÇÑ ÃøÀÇ method¿Í µ¿ÀÏÇÑ Thread¿¡¼ µ¿ÀÛÇÑ´Ù. <LI>ThreadÀÇ °æ°è¿Í °´Ã¼ÀÇ °æ°è´Â ÀüÇô °ü°è°¡ ¾ø´Ù. Áï, Thread¿Í °´Ã¼´Â Á÷±³Çϰí ÀÖ´Ù. <DIV class=indent> </DIV></LI></OL></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.1.3 target=_blank name=s-5.1.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.3</A> </SPAN>"Synchronized ÀÇ ÀÌÇØ" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.3" target=_blank>#</A></H4> <DIV>Multi Thread ±â¹ÝÀÇ programming½Ã¿¡ synchronized¸¦ ³õÃÄ ÀÚÁÖ´Â ÀϾÁö ¾ÊÀ¸³ª ¹º°¡ À߸øµÇ¾î °¡´Â°ÍÀ» °æÇèÇÑ ÀûÀÌ ÀÖ´Ù. Áï, À̰ÍÀÌ ¿øÀÎÀÌ µÇ¾î ¹ö±×°¡ ¹ß»ýÇÑ °æ¿ì ±× ¹ö±×´Â ÀçÇö¼ºÀÌ Áö±ØÈ÷ ³·¾ÆÁö±â ¶§¹®¿¡ ²Ï °í»ýÀ» ÇÏ°Ô µÈ´Ù. ÀÌ·± »çŰ¡ ¹ß»ýÇÏ°Ô µÇ¸é ¹ö±×ÀÇ ¿øÀÎÀ» ã±â°¡ ¾î·Æ°Ô µÇ°í ÇØ´ç applicationÀº ¾ðÁ¦ ¹ß»ýÇÒÁöµµ ¸ð¸£´Â ¿À·ù°¡ ÀÖ´Â »óÅ ±×´ë·Î ¿î¿µµÇ±â ¶§¹®¿¡ ½É°¢¼ºÀÌ ³»Æ÷µÇ¾î ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Ù.</DIV><BR> <DIV>ÀÌ·¯ÇÑ »çŸ¦ ¹æÁöÇϱâ À§Çؼ´Â critical sectionÀ» 2°³ ÀÌ»óÀÇ Thread°¡ µ¿½Ã¿¡ ½ÇÇàµÇÁö ¾Êµµ·Ï '¹èŸ Á¦¾î'¸¦ ÇØ¾ßÇÑ´Ù. ±× Ű¿öµå°¡ ¹Ù·Î synchronizedÀÌ´Ù.</DIV><BR> <DIV>synchronized¿¡´Â synchronized(obj){} ÇüÅÂ¿Í method¿¡ synchronized ¸¦ ºÙÀÌ´Â µÎ°¡Áö ¹æ¹ýÀÌ Àִµ¥, ÀÌ µÑÀº ¹üÀ§¸¸ °°´Ù¸é °°Àº ÀǹÌÀÌ´Ù. ¿¹¸¦ µé¾î ¼³¸íÇϸé, ¾Æ·¡ÀÇ ¼Ò½º¿¡¼ method1()°ú method2()´Â µ¿ÀÏÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>synchronized void method1(){ ... } void method2(){ synchronized(this){ ... } }</PRE></DIV><BR> <DIV>ÀÌ·¸°Ô µ¿ÀÏÇÑ Àǹ̸¦ µÎ°¡Áö·Î ¸¸µç°ÍÀº method´ÜÀ§·Î synchronized¸¦ °É ÀÏÀÌ ±×¸¸Å ¸¹´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¸¹ÀÌµé ¿ÀÇØÇϰí ÀÖ´Â ºÎºÐÀÌ À§ÀÇ ¼Ò½º¿¡¼ ¾Ë¼ö ÀÖµíÀÌ method¿¡ synchronized¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀº '±× °´Ã¼¿¡ ÇØÇÑ Á¶ÀÛÀº µ¿½Ã¿¡ ÇϳªÀÇ Thread¶ó´Â °ÍÀÌÁö method È£ÃâÀÌ ÇϳªÀÇ Thread°¡ ¾Æ´Ñ°ÍÀÌ´Ù'</DIV><BR> <DIV>±×·¸´Ù¸é, Thread A°¡ objÀÇ LockÀ» ¼³Á¤Çϰí ÀÖ´Â »óÅ¿¡¼ ´Ù½Ã Çѹø Thread A ÀÚ½ÅÀÌ objÀÇ LockÀ» ¼³Á¤ÇÏ¸é ¾î¶»°Ô µÉ±î? ÀÌ °æ¿ì Thread A´Â ÀÌ¹Ì ÀÌ obj¿¡ ´ëÇÏ¿© LockÀ» º¸À¯Çϰí ÀÖÀ¸¹Ç·Î ±â´Ù¸®Áö´Â ¾Ê¾Æµµ µÈ´Ù. À§ÀÇ ¼Ò½º¿¡¼ method1¿¡¼ method2¸¦ È£ÃâÇÑ´Ù¸é?</DIV><BR> <DIV>method1¿¡¼ ÀÌ¹Ì objÀÇ LockÀ» º¸À¯ ÇßÀ¸¹Ç·Î method2ÀÇ synchronized(this) ºÎºÐ¿¡¼´Â LockÀ» ±â´Ù¸®Áö ¾Ê¾Æµµ µÈ´Ù.</DIV><BR> <DIV>Áï, LockÀÇ ±âÁØÀÌ Æ¯Á¤Thread¿¡ ÀÖ¾î¼ LockÀÇ ±âÁØÀÌ method°¡ ¾Æ´Ñ objectÀÎ °ÍÀÌ´Ù. ÀÌ ±ÔÄ¢ ´öºÐ¿¡ synchronized methodµµ Àç±ÍÈ£ÃâÀÌ °¡´ÉÇØÁö°í, synchronized method°¡ µ¿ÀÏÇÑ instanceÀÇ synchronized method¸¦ È£ÃâÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù.</DIV><BR> <DIV>ÁÖÀÇÇÒ Á¡Àº static method¿¡ synchronized°¡ ÀÖ´Ù¸é staticÀº thisÂüÁ¶°¡ ¾ø´Ù°í À§¿¡¼ ¼³¸íÇÏ¿´À¸¹Ç·Î, ÀÌ Å¬·¡½ºÀÇ Class °´Ã¼¸¦ LockÇÏ°Ô µÈ´Ù. ±âÁØÀÌ xx.Class°¡ µÇ´Â °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.1.4 target=_blank name=s-5.1.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.1.4</A> </SPAN>"Thread »ç¿ë¹ýÀÇ Á¤¼®Àº?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.1.4" target=_blank>#</A></H4> <DIV>Thread »ç¿ë¹ý¿¡´Â ´ÙÀ½ µÎ°¡ÁöÀÇ Á¤¼®ÀÌ ÀÖ´Ù. <OL type=1> <LI>RunnableÀ» implementsÇϰí ThreadÀÇ ÂüÁ¶¸¦ º¸À¯(composition) ÇÏ´Â ¹æ¹ý. À̰æ¿ì´Â ´ÜÁö Runnable¸¸ implementÇÔÀ¸·Î¼ ÇØ°áµÇ´Â °æ¿ì°¡ ´ëºÎºÐÀ̱ä ÇÏÁö¸¸, ±× class ³»¿¡¼ ÇØ´ç classÀÇ Thread¸¦ Á¶ÀÛÇÏ°Ô µÈ´Ù¸é compositionÇÑ Thread °´Ã¼¿¡ delegationÇÏ¸é µÈ±â ¶§¹®ÀÌ´Ù. <LI>Thread class¸¦ »ó¼ÓÇÏ´Â ¹æ¹ý. JDKÀÇ ¼Ò½º¸¦ º¸¸é Thread class¿¡´Â RunnableÀ» implements Çϰí ÀÖ´Ù. ±×¸®°í run method´Â native methodÀÌ´Ù. µû¶ó¼ Thread¸¦ »ó¼ÓÇÑ ¸ðµç Ŭ·¡½º´Â »ç½Ç RunnableÀ» implementsÇϰí ÀÖ´Â °ÍÀÌ´Ù. run method´Â abstract°¡ ¾Æ´Ï¹Ç·Î ±¸ÇöµÇ¾î ÀÖ°í ¿ì¸®´Â À̸¦ ¿À¹ö¶óÀ̵åÇÏ¿© »ç¿ëÇϰí ÀÖ´Ù. ÀÌ ¹æ½ÄÀ» »ç¿ëÇϸé ThreadÀÇ method¸¦ ¾ÈÆÅÀ¸·Î ÀÚÀ¯·Ó°Ô È£ÃâÇÒ ¼ö ÀÌÁö¸¸, ÀÌ¹Ì ´Ù¸¥ class¸¦ »ó¼ÓÇϰí ÀÖ´Ù¸é ÀÌ ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö´Â ¾ø´Ù. <DIV class=indent> </DIV></LI></OL>JDK API ReferenceÀÇ Runnable¿¡ °úÇÑ ¼³¸íÁß¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀÌ ÀÖ´Ù.</DIV><BR> <DIV>"Thread classÀÇ methodÁß run method¸¸À» ¿À¹ö¶óÀ̵åÇÏ¿© »ç¿ëÇÏ´Â °æ¿ì´Â Runnable interface¸¸ implementsÇÏ¿© »ç¿ëÇÏ¸é µÈ´Ù. ¿Ö³ÄÇϸé, classÀÇ ±âº»ÀûÀÎ µ¿ÀÛÀ» ¼öÁ¤ ¶Ç´Â È®ÀåÇÏÁö ¾Ê´ÂÇÑ ±× class¸¦ sub classÈ ÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù."</DIV><BR> <DIV>±×·¸´Ù¸é À§¿¡¼ ¾ðÁ¦³ª 1)¹ø ¹æ½ÄÀ» »ç¿ëÇÏ¸é µÇ´Â °Í ¾Æ´Ñ°¡ ¶ó´Â Àǹ®ÀÌ »ý±â°Ô µÈ´Ù. ¿Ö ±ÍÂú°Ô 2)ÀÇ ¹æ¹ýÀ» °í¹ÎÇÏ´Â °ÍÀΰ¡, ±Ø´ÜÀûÀ̱ä ÇÏÁö¸¸ ¸¸ÀÏ¿¡ »çÅ¿¡ ÀÌ Å¬·¡½º°¡ ´Ù¸¥ Ŭ·¡½º¸¦ »ó¼Ó¹Þ°Ô µÇ´Â °æ¿ìµµ ÀÖÀ»¼ö Àִµ¥.</DIV><BR> <DIV>ÇÏÁö¸¸ À̰ÍÀº ¾Æ´Ò°ÍÀÌ´Ù. ¸¸¾à ÀÌ·¸´Ù¸é Thread class°¡ RunnableÀ» implementsÇÒ Çʿ䰡 ¾ø¾úÀ» °ÍÀ̱⠶§¹®ÀÌ´Ù. ¶ÇÇÑ Thread´Â »ý¼ºÀÚÀÇ Àμö·Î RunnableÀÇ reference¸¦ ÃëµæÇÑ ÈÄ °è¼ÓÇØ¼ ±×°ÍÀ» º¸À¯ÇÑ´Ù´Â °Íµµ ÀÌ»óÇÏ´Ù. Thread¿¡ ÀÖ¾î RunnableÀÌ ÇÊ¿äÇÑ °ÍÀº start() ¶§ »ÓÀ̹ǷΠstart()ÀÇ Àμö·Î RunnableÀ» °Ç³×Á൵ ÁÁÀ» °ÍÀÌ´Ù.</DIV><BR> <DIV>±×·³¿¡µµ ºÒ±¸ÇÏ°í ±»ÀÌ Thread¿¡¼ °è¼ÓÀûÀ¸·Î RunnableÀ» º¸À¯Çϰí ÀÖ´Â °ÍÀº Runnable°´Ã¼¿Í Thread¸¦ °ÇÏ°Ô °áÇÕ½ÃŰ·Á´Â Àǵµ ¶§¹®ÀÌ´Ù. À̰ÍÀº ÀǵµÀûÀ¸·Î À§ÀÇ 2)ÀÇ ¹æ¹ýÀ» ±ÇÀåÇÏ´Â µíÇÑ ´À³¦À» ¹Þ°Ô Çϴµí ÇÏ´Ù.</DIV><BR> <DIV>±×·¸´Ù¸é API ReferenceÀÇ ¸»Àº ´ÜÁö »ó¼ÓÀ» ÇÇÇ϶ó´Â Àǹ̸¸ ÀÖ´Â °ÍÀΰ¡? ¸¶Áö¸·À¸·Î ÇѰ¡Áö ÃßÁ¤ÀÌ µÇ´Â ºÎºÐÀº Thread¿¡´Â suspend()³ª stop()µî°ú °°Àº method°¡ ÇöÀç ¸ðµÎ deprecateµÇ¾ú´Ù. ¶ÇÇÑ sleep()À̳ª yield()´Â ¸ðµÎ static methodÀ̹ǷΠ±»ÀÌ Thread °´Ã¼¸¦ º¸À¯ÇÒ Çʿ䰡 ¾ø´Ù.</DIV><BR> <DIV>±×·¸´Ù¸é À§ÀÇ 1)ÀÇ ¹æ¹ý¿¡¼ Thread°´Ã¼¸¦ compositionÇÒ Çʿ䰡 ¾ø¾îÁø´Ù.</DIV><BR> <DIV>"±×·¸´Ù¸é Thread¸¦ ¾Æ¹«µµ º¸À¯ÇÏÁö ¾Ê°í Runnable¸¸ implementsÇÑ ¹æ½ÄÀÌ ÃÖ¼±Àΰ¡?"</DIV><BR> <DIV>¹«¾ùÀÌ Á¤´äÀÎÁö µµ¹«Áö ¾Ë±æÀÌ ¾ø´Ù. ^^; <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-5.2 target=_blank name=s-5.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2</A> </SPAN>Exception <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-5.2.1 target=_blank name=s-5.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.1</A> </SPAN>"finally ÀýÀº ¹Ýµå½Ã ¾î¶°ÇÑ °æ¿ì¿¡µµ ½ÇÇàµÇ´Â°¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.1" target=_blank>#</A></H4> <DIV>try ~ catch ¹®ÀÇ finally ÀýÀº 'loop¶ó¸é break, method¶ó¸é return Àý'À» ¸¸³ªµµ µÚ¿¡ ÀÖ´Â finallyÀýÀº ¼öÇàµÈ´Ù. ÇÏÁö¸¸ ´ÙÀ½ÀÇ °æ¿ì´Â ±×·¸Áö ¾Ê´Ù.</DIV><BR> <DIV><PRE class=wiki>try{ ... System.exit(1); }catch(...){ }finally{ ... //ÀÌ ºÎºÐÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù. }</PRE> <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.2.2 target=_blank name=s-5.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2</A> </SPAN>"¿¹¿ÜÀÇ Á¾·ù 3°¡Áö (Error, RuntimeException, ±×¹ÛÀÇ Exception)" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2" target=_blank>#</A></H4></DIV> <DIV> <H5><A class=con_link id=s-5.2.2.1 target=_blank name=s-5.2.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2.1</A> </SPAN>Error <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.1" target=_blank>#</A></H5> <DIV>ÀÌ¿¡ °üÇØ¼± JLS 11.2.1¿¡ ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ´Ù. "üũµÇÁö ¾Ê´Â ¿¹¿Ü Ŭ·¡½º(Error¿Í ±× Sub class)´Â ÇÁ·Î±×·¥¾ÈÀÇ ´Ù¾çÇÑ À§Ä¡¿¡¼ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖÀ¸¸ç, ȸº¹ÀÌ ºÒ°¡´ÉÇϱ⠶§¹®¿¡ ÄÄÆÄÀϽà üũµÇÁö ¾Ê´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¿¹¿Ü¸¦ ÇÁ·Î±×·¥¿¡¼ ¼±¾ðÇÑ´Ù°í ÇØµµ ³ÀâÇÏ°í ¹«ÀǹÌÇÑ °ÍÀÌ µÉ »ÓÀÌ´Ù."</DIV><BR> <DIV>JavaÀÇ Å¬·¡½º librury¿¡¼ ErrorÀÇ sub class¸¦ »ìÆìºÁµµ AWTError, LinkageError, ThreadDeath, VirtualMachineError µî 'catchÇØµµ ¼Ò¿ë ¾øÀ» °Í' µé »ÓÀÌ´Ù. (OutOfMemoryError´Â VirtualMachineError ¾Æ·¡¿¡ À§Ä¡ÇÑ´Ù.) <DIV class=indent> </DIV></DIV></DIV> <DIV> <H5><A class=con_link id=s-5.2.2.2 target=_blank name=s-5.2.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2.2</A> </SPAN>RuntimeException <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.2" target=_blank>#</A></H5> <DIV>À§ÀÇ Error ÀÌ¿ÜÀÇ ExceptionµéÀº application¿¡¼ catchÇÒ °¡´É¼ºÀÌ ÀÖ´Â ¿¹¿ÜµéÀÌ´Ù.(¹ö±×°¡ ¾øÀ¸¸é ¹ß»ýÇÏÁö ¾Ê´Â ¿¹¿Üµé) ±×¸®°í RuntimeExceptionÀº '¾îµð¼µç ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ´Â ¿¹¿Ü'ÀÌ´Ù. RuntimeExceptionÀÇ sub class·Î´Â NullPointerException, ArrayIndexOutOfBoundException, ClassCastException µîÀ» µé ¼ö ÀÖ´Ù. 'ÀÌ·¯ÇÑ ¿¹¿Ü´Â ¹ö±×°¡ ¾ø´Â ÇÑ ¹ß»ýÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÏÀÏÀÌ throws ¸¦ ÀÛ¼ºÇÏÁö ¾Ê¾Æµµ µÈ´Ù.'</DIV><BR> <DIV>ÇÁ·Î±×·¥¿¡ ¹ö±×°¡ ¾ø´Â ÇÑ ¹ß»ýÇÒ ¼ö ¾ø´Â ¿¹¿Ü°¡ ¹ß»ýÇÑ °æ¿ì C ¾ð¾î¿Í °°ÀÌ ¿µ¿ª ÆÄ±«°¡ ÀϾ±â ½¬¿î ¾ð¾î¶ó¸é ÇÁ·Î±×·¥ Àüü¸¦ Á¾·á½ÃŰ´Â °ÍÀÌ Á¤´äÀ̰ÚÁö¸¸, Java¿Í °°ÀÌ ¿µ¿ªÆÄ±«°¡ ÀϾÁö ¾Êµµ·Ï ½ÇÇà½Ã üũ(JVM ClassloaderÀÇ formal verification process)¸¦ ÇÏ°í µ¿ÀûÀ¸·Î ÇÁ·Î±×·¥À» loadÇÏ´Â ¾ð¾î¿¡¼´Â ±¹¼ÒÀûÀÎ NullPointerException ¶§¹®¿¡ ÇÁ·Î±×·¥ Àüü¸¦ ÁßÁö½ÃÄѼ´Â ¾È µÉ °ÍÀÌ´Ù.</DIV><BR> <DIV>µû¶ó¼, RuntimeExceptionÀº catchÇÏÁö ¾Ê´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù. ¹ö±×°¡ ÀÖ´Â ÇÁ·Î±×·¥Àº ½Å¼ÓÈ÷ Á¾·á½ÃŰ´Â °ÍÀÌ ´ëºÎºÐÀÇ °æ¿ì ÃÖ¼±ÀÇ ¹æÃ¥À̶ó »ý°¢Çϱ⠶§¹®ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H5><A class=con_link id=s-5.2.2.3 target=_blank name=s-5.2.2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.2.3</A> </SPAN>±×¹ÛÀÇ Exception <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.2.3" target=_blank>#</A></H5> <DIV>À§ÀÇ RuntimeExceptionÀÌ¿ÜÀÇ ExceptionÀÇ sub class´Â »ç¿ëÀÚÀÇ À߸øµÈ Á¶ÀÛ µîÀ¸·Î ÀÎÇØ ÇÁ·Î±×·¥¿¡ ¹ö±×°¡ ¾ø¾îµµ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ°í ±×¿¡ ´ëÇÏ¿© ÇÁ·Î±×·¥ÀÌ È®½ÇÈ÷ ´ëÀÀÇØ¾ß ÇÏ´Â °æ¿ì¿¡ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¸é FileNotFoundExceptionµîÀÌ´Ù.</DIV><BR> <DIV>±×·±µ¥ °³¹ßÇÏ´Ù º¸¸é ÀÌ»óÇϰí ÀǾÆÇÑ °ÍÀÌ Çϳª ÀÖ´Ù. ¼ýÀÚ ºÎºÐ¿¡ ¹®ÀÚ¸¦ ³Ö¾úÀ»¶§ ¹ß»ýÇÏ´Â NumberFormatExceptionÀÌ´Ù. À̰ÍÀº ÀÌ»óÇϰԵµ RuntimeExceptionÀÇ sub classÀÌ´Ù. À̰ÍÀº RuntimeExceptionÀÌ ¾Æ´Ï¾úÀ¸¸é Çϴµ¥ NumberFormatüũ´Â Runtime½Ã¿¡¸¸ °¡´ÉÇÑ ¸ð¾çÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.2.3 target=_blank name=s-5.2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.2.3</A> </SPAN>"OutOfMemoryError´Â ¾î¶»°Ô ó¸®ÇØ¾ß Çϴ°¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.2.3" target=_blank>#</A></H4> <DIV>¿¹Àü¿¡ Swing¿¡¼ Tree±¸Á¶¸¦ ÀÌ¿ëÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ÇÑÀûÀÌ ÀÖ´Ù. À̶§ Tree¿¡ branch¿Í node°¡ ¹«¼öÈ÷ »ý±âÀÚ JVMÀº OutOfMemoryError¸¦ ³»¹ñ¾ú´Ù. ÀÌ¿¡ ±ÞÇÑ ¸¶À½¿¡ OutOfMemoryError¸¦ catchÇÏ¿© »ç¿ëÀÚ¿¡°Ô Àç½ÃÀÛÀ» ¿äûÇÏ´Â Dialog¸¦ ¶ç¿ìµµ·Ï ¼öÁ¤ÇÏ¿´´Ù¸é ÀÌ Dialog°¡ °ú¿¬ ¶¸À»±î? ÇöÀç ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ ÆÇ¿¡ Dialog¸¦ ¶ç¿ï ¸Þ¸ð¸®°¡ ³²¾ÆÀÖÁú ¾Ê¾Ò´ø °ÍÀÌ´Ù. ´ÙÇàÈ÷ Dialog°¡ ¶¹¾îµµ ÀÛ¾÷Àº °è¼ÓµÇÁö ¸øÇßÀ» °ÍÀÌ´Ù. NullPointerException°¡ ³ª±â ¶§¹®ÀÌ´Ù.</DIV><BR> <DIV>¿øÀÎÀº ³ªÁß¿¡ ã¾Ò´Âµ¥, Tree±¸Á¶¿¡¼ ºÎ¸ðºÎÅÍ ÀڽĵéÀ» ºÙÀÌ´Â ¼øÀ¸·Î Tree¸¦ ±¸¼ºÇϴµ¥ ÀڽĵéÀ» ÁÙÁÙÀÌ ºÙ¿©³ª°¡´Ù°¡ ¸Þ¸ð¸® ºÎÁ·Çö»óÀÌ ¹ß»ýÇÏ¿´°í NullPointerExceptionÀº ÀÚ½ÄÀÌ ¾øÀ¸´Ï Ŭ¸¯ÇÏ´Â ¼ø°£ nullÀ» ¹ÝȯÇÏ¿© ¹ß»ýÇÏ¿´´ø °ÍÀÌ´Ù.</DIV><BR> <DIV>OutOfMemoryErrorÀÇ °¡Àå ÁÁÀº ÇØ°áÃ¥Àº ºÒÇÊ¿äÇÑ °´Ã¼¸¦ ¸¸µéÁö ¾Ê´Â °ÍÀ̾ú´Ù. ±×¸®°í Tree»ý¼º½Ã¿¡µµ ÀڽĺÎÅÍ ¸¸µé°í ºÎ¸ð¸¦ ¸¸µå´Â ¼ø¼·Î ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ Á¤»óÀûÀ¸·Î ¸¶Ä¥¼ö ÀÖ¾ú´Ù.</DIV><BR> <DIV>¸¶Áö¸·¿¡ µå´Â ½ÉÁ¤Àº ÇÁ·Î±×·¥ÀÌ OutOfMemoryError¸¦ ÀÏÀ¸Å°´Â ¿øÀÎÀÌ °ú¿¬ ÀÌ·¸°Ô ±¸¼ºµÇ¾î ¹ß»ýÇß´ÂÁö ¾î¶»°Ô ¾Ë¼ö ÀÖÀ»±î ÇÏ´Â Àǹ®ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-5.3 target=_blank name=s-5.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3</A> </SPAN>Object Serialize <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3" target=_blank>#</A></H3> <DIV>Java¿¡¼´Â ObjectOutputStreamÀÇ writeObject() method¿¡ µ¥ÀÌŸ ±¸Á¶ ÀúÀå¼ÒÀÇ ÂüÁ¶¸¸ °Ç³×Áֱ⸸ ÇÏ¸é ±× ¾È¿¡ ÀÖ´Â ¸ðµç °´Ã¼¸¦ 1Â÷¿ø streamÀ¸·Î Ãâ·ÂÇØ ÁØ´Ù. (ÆÄÀÏÀ̳ª ByteArrayOutputStreamÀ» ÀÌ¿ëÇÑ ¸Þ¸ð¸®·Î) ´Ü, static field´Â SerializeµÇÁö ¾Ê´Âµ¥ ÀÌ´Â SerializeÀÇ ´ë»óÀÌ instance °´Ã¼»ÓÀ̱⠶§¹®ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.1 target=_blank name=s-5.3.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.1</A> </SPAN>"Serialize¸¦ À§Çؼ´Â marker interfaceÀÎ java.io.Serializable interface¸¦ implementsÇØ¾ßÇÑ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.1" target=_blank>#</A></H4> <DIV>¿©±â¼ marker interface´Â java.lang.Cloneable°ú °°ÀÌ method¿Í fieldÀÇ Á¤ÀÇ´Â ¾øÁö¸¸ °´Ã¼ TypeÀ» À§ÇÑ interfaceÀÌ´Ù. ¿¹Àü¿¡ Serialize¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌŸ¸¦ À¯ÁöÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ÇÑ ÀûÀÌ Àִµ¥ ±×¶§ »ý°¢Çß´ø°ÍÀÌ '¸ðµç classµéÀÌ ±âº»ÀûÀ¸·Î SerializableÀ» implementsÇϰí ÀÖÀ¸¸é ÆíÇÒÅÙµ¥..'¶ó´Â »ý°¢À̾ú´Ù. ÇÏÁö¸¸ À̰ÍÀº »ó´çÈ÷ À§ÇèÇÑ ¹ß»óÀ̾ú´Ù.</DIV><BR> <DIV>SerializableÀÌ ±âº»À¸·Î implementsµÇ¾î ÀÕÀ¸¸é ¾û¶×ÇÑ °´Ã¼±îÁö SerializeµÇ°í ±×°ÍÀ» ¾Ë¾ÆÃ¤Áöµµ ¸øÇÏ´Â »çŰ¡ ÀϾ °¡´É¼ºÀÌ ³ô´Ù. SerializableÀÌ optionalÀÎ ÀÌÀ¯´Â ÀÌ·¯ÇÑ ÀÌÀ¯ ¶§¹®À̸®¶ó.. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.2 target=_blank name=s-5.3.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.2</A> </SPAN>"super class´Â SerializableÀÌ ¾Æ´Ñµ¥ sub class¸¸ SerializableÀÎ °æ¿ìÀÇ ¹®Á¦Á¡" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.2" target=_blank>#</A></H4> <DIV>SerializeÀ» ÀÌ¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ ÇÒ¶§ ÇѹøÂë ½Ç¼öÇÒ ¼ö ÀÖ´Â ºÎºÐÀÌ »ó¼ÓµÈ classÀÇ SerializeÀÌ´Ù. ÄÄÆÄÀÏ ¿¡·¯µµ ¾ø°í Deserializeµµ Àß µÇ¾ú´Ù. ÇÏÁö¸¸ ۰¡ µÇ´Â °ªÀÌ null°ú 0À̾ú´Ù. ¿µ¹®À» ¸ô¶ó ´Ù¸¥°÷À» Çì¸Å¿©µµ º¸´Ù°¡ °á±¹ ãÀº ¿øÀÎÀº ºÎ¸ðÀÇ field´Â SerializeµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë°Ô µÇ¾ú´Ù. transient¿Í ¸¶Âù°¡Áö·Î Çü½Äº° default °ªÀ¸·Î ä¿öÁ³¾ú´Ù. ÀÌ´Â ÄÄÆÄÀϰú ½ÇÇà½Ã ¾Æ¹«·± ¿À·ù¾øÀÌ ½ÇÇàµÇ¾î ³ª¸¦ Èûµé°Ô ÇÏ¿´±â¿¡ Java°¡ ¿ø¸Á½º·¯¿ü´ø ±âºÐÁÁÀº Ãß¾ïÀÌ´Ù. ^^; <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.3 target=_blank name=s-5.3.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.3</A> </SPAN>"transient fieldÀÇ º¹¿ø(?)°ü·Ã" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.3" target=_blank>#</A></H4> <DIV>Serialize¸¦ ÀÌ¿ëÇÑ ÇÁ·ÎÁ§Æ®¸¦ ÇÒ¶§´Â writeObject¿Í readObject¸¦ ÀÌ¿ëÇÏ¿© ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â Serialize¸¦ customizingÇÒ¼öÀÖ´Ù.</DIV><BR> <DIV>Serializable¿¡ ´ëÇÑ API reference¿¡µµ ´ÙÀ½°ú °°ÀÌ ³ª¿ÍÀÖ´Ù.</DIV><BR> <DIV>"Serialize¿Í Deserialize¿¡ ´ëÇÑ Æ¯º°ÇÑ handlingÀ» À§Çؼ´Â ´ÙÀ½ µÎ°³ÀÇ Æ¯º°ÇÑ ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ¸é µÈ´Ù."</DIV><BR> <DIV><PRE class=wiki>private void writeObject(java.io.ObjectOutputStream out) throws IOException; private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;</PRE></DIV><BR> <DIV>ÀÌ µÎ method°¡ privateÀ¸·Î µÇ¾î ÀÖ´Â °ÍÀ» º¸°í óÀ½¿¡´Â ÀǾÆÇØ Çß¾ú´ø ±â¾ïÀÌ ÀÖ´Ù. À̸¦ protected³ª publicÀ¸·Î Çϸé Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ÀÌ´Â override°¡ À̴ϱ⠶§¹®ÀÌ´Ù. »ç½ÇÀº ¼Ó¿¡¼ reflectiondÀ» ÀÌ¿ëÇÏ¿© °Á¦ÀûÀ¸·Î È£ÃâµÇ°í Àִ°ÍÀÌ´Ù. reflection¿¡¼´Â private method±îÁö ãÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ privateÀ¸·Î ÇÑ °¡Àå Å« ÀÌÀ¯´Â Serialize¸¦ °´Ã¼ÀÚ½ÅÀÌ Á÷Á¢ ÇØ¾ß ¾ÈÀüÇÏ´Ù´Â Àǹ̵µ ÀÖÁö ¾ÊÀ»±î ÇÏ´Â »ý°¢µµ µç´Ù. ´Ù½Ã º»·ÐÀ¸·Î µé¾î°¡¼ transient¸¦ º¹¿øÇÏ´Â °Í¿¡ ¾ê±â¸¦ ÇÏÀÚ¸é, »ç½Ç transient´Â Serialize´ë»ó¿¡¼ Á¦¿ÜµÇ´Â °ÍÀε¥ º¹¿øÀ» ÇÒ ¼ö ÀÖ´Ù´Â ¸»ÀÌ ¾ÈµÈ´Ù. ÇÏÁö¸¸ ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Ù º¸¸é logic»ó °¡´ÉÇÑ °æ¿ì°¡ ¸¹ÀÌ ÀÖ´Ù.</DIV><BR> <DIV>Áï, ¸ðµç field¸¦ SerializeÇÏÁö ¾Ê°í ÇÊ¿äÇÑ °Í¸¸ ÇÏ°í Æ¯Á¤ field´Â SerializeÇÑ fieldµéÀ» ÀÌ¿ëÇÏ¿© º¹¿øÇÏ´Â ¹æ¹ýÀÌ´Ù. ¶ÇÇÑ Serialize´ç½ÃÀÇ °´Ã¼ »óÅÂ¿Í Deserialize½ÃÀÇ °´Ã¼»óŰ¡ ¼·Î ´Ù¸¦ ¼ö ÀÖ´Â fieldµµ ±×°Í¿¡ ÇØ´çµÈ´Ù. cafeid¸¸À¸·Î ³ª¸ÓÁö field´Â DB¿¡¼ Àоî¿À°Ô ÇÑ´Ù¸é ³ª¸ÓÁö field´Â transient·Î ó¸®Çϰí Deserialize½Ã readObject()¿¡¼ º¹¿øÇÏ´Â °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.3.4 target=_blank name=s-5.3.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.3.4</A> </SPAN>"Stack Overflow¿¡ ÁÖÀÇÇ϶ó!" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.3.4" target=_blank>#</A></H4> <DIV>Serialize¸¦ ÇÏ´Ùº¸¸é ÂüÁ¶·Î ¿¬°áµÈ °´Ã¼¸¦ recursiveÇÏ°Ô °Å½½·¯ ¿Ã¶ó°¡¸ç À̰ÍÀÌ ³Ê¹« ±í¾îÁö¸é Stack Overflow°¡ ¹ß»ýÇÑ´Ù. °¡·É linked list°°Àº °æ¿ìÀÌ´Ù. À̰ÍÀ» SerializeÇÏ¸é ±× ¿ä¼Ò¼ö¸¸Å recursive È£ÃâÀÌ ¹ß»ýÇÑ´Ù. °ú°Å(JDK1.3.0½ÃÀý) ÇÁ·ÎÁ§Æ® ´ç½Ã JVMÀÌ 5111¿¡¼ Stack Overflow°¡ ¹ß»ýÇß´ø ±â¾ïÀÌ ÀÖ´Ù.</DIV><BR> <DIV>¹°·Ð ½ÇÇà½Ã java option¿¡ -Xss ¸¦ ÀÌ¿ëÇÏ¿© statck ũ۸¦ Á¶ÀýÇÒ ¼ö ÀÖÁö¸¸ À̰ÍÀº °³¹ßÀÚ°¡ ¾Æ´Ñ ½ÇÇàÇÏ´Â »ç¶÷µé¿¡°Ô ºÎ´ãÀ̾ú´Ù. JDKÀÇ LinkedList classÀÇ ¼Ò½º¸¦ º¸¸é writeObject()¿Í readObject()¸¦ ´ÙÀ½°ú °°ÀÌ º¯°æÇϰí ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>private synchronized void writeObject(java.io.ObjectOutputStream s) throws IOException { s.defaultWrtieObject(); //ÀÌ ÄÚµå´Â ¹«Á¶°Ç µé¾î°¡°Ô µÇ´Âµ¥ À̰÷ ¼Ò½ºÀÇ System.arraycopy()¿¡¼ overflow¹ß»ýÇÑ´Ù. s.writeInt(size); //À̺κÐÀÌ ½ÇÁ¦ Ãß°¡µÇ¾î Stack Overflow¸¦ ¿¹¹æÇÑ´Ù. for(Entry e = ...) s.writeObject(e.element); } ... } //readObject()µµ ÀÌ¿Í °°Àº °³³äÀ¸·Î º¯°æµÇ¾î ÀÖ´Ù.</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-5.4 target=_blank name=s-5.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4</A> </SPAN>"nested class / inner class / ÁßøŬ·¡½º" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-5.4.1 target=_blank name=s-5.4.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.1</A> </SPAN>"ÁßøŬ·¡½ºÀÇ °³³ä" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.1" target=_blank>#</A></H4> <DIV>°³ÀÎÀûÀ¸·Î ÁßøŬ·¡½º¸¦ ¾î¶°ÇÑ °æ¿ì´Â »ç¿ëÇÏÁö ¾ÊÀ¸·Á ÇÑ´Ù. »ç¿ëÇϱⰡ ¸¸¸¸Ä¡ ¾Ê°í ÄÚµå ÀбⰡ Èûµé¾î Áö±â¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ '¾î¶² Ŭ·¡½º ³»¿¡¼ ÀºÆóÇÒ ¸ñÀûÀ¸·Î »ç¿ëÇϴ Ŭ·¡½º°¡ ÀÖ´Ù¸é À̰ÍÀ» »ç¿ëÇØ¾ß ÇÑ´Ù' ½ÇÁ¦·Î JavaÀÇ AWT Ŭ·¡½º Event Handler¸¦ ºñ·ÔÇÏ¿© ¸¹Àº Ŭ·¡½º¿¡¼ ÁßøŬ·¡½º¸¦ »ç¿ëÇϰí ÀÖ´Ù. ¶ÇÇÑ ³»ºÎ class´Â ±×°ÍÀ» µÑ·¯½Î´Â classÀÇ instance(enclosing object¶ó°í ÇÏ´Â)ÀÇ field¸¦ ÂüÁ¶ ÇÒ¼ö Àִ°͵µ ÀåÁ¡ÀÌ´Ù. ÇÏÁö¸¸ ÀÌ´Â ³»ºÎŬ·¡½º°¡ ¾Æ´Ò°æ¿ì ºÎºÎ Ŭ·¡½º¸¦ newÇØ¼ »ç¿ëÇϴ°Ͱú º°¹Ý ´Ù¸¦²² ¾øÁö ¾ÊÀº°¡.</DIV></DIV> <DIV> <H4><A class=con_link id=s-5.4.2 target=_blank name=s-5.4.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.2</A> </SPAN>"³»ºÎŬ·¡½º´Â ºÎ¸ðÀÇ ÂüÁ¶¸¦ ¸ô·¡ º¸À¯Çϰí ÀÖ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.2" target=_blank>#</A></H4> <DIV>³»ºÎ Ŭ·¡½ºÀÇ instance´Â ºÎ¸ðÀÇ instance¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¸ô·¡ º¸À¯Çϰí Àֱ⠴빮¿¡ À§¿¡¼ ¾ê±âÇÑ ºÎ¸ðÀÇ field¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î static method¿¡¼´Â ³»ºÎŬ·¡½º¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù. ´ÙÀ½ ¿¹¸¦ º¸¸é ¹Ù·Î ¾Ë¼ö ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>class Test{ class InnerClass { int i; ... } public static void main(String[] args){ InnerClass icls = new InnerClass(); ... } }</PRE></DIV><BR> <DIV>ÀÌ ¼Ò½º¸¦ compileÇÏ¸é ´ÙÀ½ÀÇ ¿À·ù°¡ ¹ß»ýÇÑ´Ù. "non-static variable this cannot be referenced from a static context..." main method´Â staticÀ̹ǷΠthis¸¦ ÂüÁ¶ÇÒ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â InnerClass°¡ new µÇ¸é¼ ¿ÜºÎ Ŭ·¡½º TestÀÇ this¸¦ º¸À¯ÇØ¾ß Çϴµ¥ ¿©±â¼ staticÀ» ¸¸³ª´Ï ¿À·ù¸¦ Ç¥Ãâ½ÃŲ°ÍÀÌ´Ù. ¹°·Ð ÀÏ¹Ý instance method¿¡¼´Â ¿À·ù°¡ ³ªÁö ¾Ê´Â´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.4.3 target=_blank name=s-5.4.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.3</A> </SPAN>"local inner class¿¡ ´ëÇÏ¿©" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.3" target=_blank>#</A></H4> <DIV>local inner class¶ó ÇÔÀº method³»¿¡¼ ¼±¾ðµÈ inner classÀÌ´Ù.</DIV><BR> <DIV><PRE class=wiki>public class OuterClass { public int get(){ int i = 9; int id = 99; int id2 = 99; final int id3 = 100000; class LocalInnerClass { int id = 100; LocalInnerClass(){ System.out.println("LocalInnerClass"); } int getId(){ return id3 + id; } } LocalInnerClass lic = new LocalInnerClass(); return id + lic.getId(); } public static void main(String[] args){ OuterClass outer = new OuterClass(); System.out.println("id = " + outer.get()); //°á°ú °ªÀº "100000(id3) + 100(LocalInnerClass.id) + 99(OuterClass.get())" ÀÎ 100199°¡ ³ª¿Â´Ù. } }</PRE></DIV><BR> <DIV>À§ ¼Ò½ºÀÇ LocalInnerClass´Â get() À̶ó´Â method¿¡¼¸¸ º¸ÀÌ´Â classÀÌ´Ù. ±×¸®°í ƯÀÌÇÒ ¸¸ÇÑ ºÎºÐÀÌ OuterClassÀÇ get() method¿¡¼ final·Î ¼±¾ðµÈ id3ÀÌ LocalInnerClass¿¡¼ ÂüÁ¶ °¡´ÉÇØ Áø´Ù. id2¸¦ ÂüÁ¶Çϸé compile error°¡ ³ªÁö¸¸ final·Î ¼±¾ðµÈ °ÍÀº ¿À·ù°¡ ³ªÁö ¾Ê´Â´Ù.</DIV><BR> <DIV>ÀÌ´Â local variableÀº method¿¡¼ ³ª¿À´Â ¼ø°£ »ç¶óÁö´Âµ¥, local inner class´Â local variableº¸´Ù ¼ö¸íÀÌ Á¶±Ý´õ ±æ±â ¶§¹®¿¡ final¸¸ Çã¿ëÇÑ °ÍÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-5.4.4 target=_blank name=s-5.4.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>5.4.4</A> </SPAN>"anonymous class(¹«¸íŬ·¡½º)¿¡ ´ëÇÏ¿©" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-5.4.4" target=_blank>#</A></H4> <DIV>¹«¸í Ŭ·¡½º´Â ¸»±×´ë·Î À̸§ÀÌ ¾ø´Â Ŭ·¡½ºÀÌ´Ù.</DIV><BR> <DIV><PRE class=wiki>class AnonymousTest { private interface Printable { void print(); } static void doPrint(Printable p){ p.print(); } public static void main(String[] args){ doPrint( new Printable(){ public void print(){ System.out.println("this is new Printable print()"); } }); } }</PRE></DIV><BR> <DIV>À§ ¼Ò½ºÀÇ "doPrint( new Printable(){" ºÎºÐÀÌ ¹«¸íŬ·¡½º ÀÌ´Ù. compileÀ» ¼öÇàÇϸé AnonymousTest$Printable.class, AnonymousTest$1.class, AnonymousTest.class ¼¼°³ÀÇ Å¬·¡½º°¡ »ý±ä´Ù. ¿©±â¼ AnonymousTest$Printable.class´Â Printable interfaceÀ̰í AnonymousTest$1.classÀÌ ¹«¸íŬ·¡½ºÀÌ´Ù.</DIV><BR> <DIV>ÀÌ ¼Ò½º¸¦ º¸¸é óÀ½¿¡ µå´Â ÀǽÉÀÌ Printable interface¸¦ new Çß´Ù´Â °ÍÀÌ´Ù. ¿©±â¼ ±»ÀÌsuper class(ÀÌ ¼Ò½º¿¡¼´Â interface)¸¦ ÀúÁ¤ÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â ¾Æ¹«°Íµµ »ó¼ÓÇÏÁö ¾Ê´Â ¹«¸í Ŭ·¡½ºÀÇ instance¸¦ ¸¸µé¾î ºÁ¾ß Àǹ̰¡ ¾ø±â ¶§¹®¿¡ ÀÌ·¸°Ô ÇѵíÇÏ´Ù.</DIV><BR> <DIV>"¹«¸íŬ·¡½º´Â ¾î¶² class³ª interface¸¦ »ó¼Ó/±¸Çö ÇØ¾ß¸¸ ±× instance¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù" <DIV class=indent> </DIV>ÀÌó·³ ¹«¸í Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ¾î¶² ÀýÂ÷(¼öÇà)¸¦ ´Ù¸¥ methodÀÇ Àμö·Î °Ç³×ÁÙ ¼ö ÀÖ°Ô µÈ´Ù. ÇÏÁö¸¸ °£´ÜÇÑ ·ÎÁ÷¸¸ ±¸Çöó¸®ÇØ¾ß ÇÑ´Ù.</DIV><BR> <DIV>"¹«¸íŬ·¡½º´Â Á¶±Ý¸¸ º¹ÀâÇØÁ®µµ ±Þ°ÝÈ÷ ¼Ò½ºÀÇ °¡µ¶¼ºÀÌ ¶³¾îÁö°Ô µÇ¹Ç·Î ³²¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù" <DIV class=indent> </DIV></DIV></DIV> <DIV> <H2><A class=con_link id=s-6 target=_blank name=s-6></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>6</FONT></A> </SPAN>ÀÌ·¡µµ Java°¡ °£´ÜÇѰ¡? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-6.1 target=_blank name=s-6.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1</A> </SPAN>method overload ¿¡¼ÀÇ È¥¶õ? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-6.1.1 target=_blank name=s-6.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1.1</A> </SPAN>"overload¶õ À̸§ÀÌ °¡°í Àμö°¡ ´Ù¸¥ method¿¡ compiler°¡ ´Ù¸¥ À̸§À» ºÙÀÌ´Â ±â´É" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.1" target=_blank>#</A></H4> <DIV>overload¸¦ ±¸ÇöÇϸé bytecode·Î º¯È¯½Ã ´Ù¸¥ À̸§À¸·Î method°¡ º¯È¯µÇ¾î º°°³ÀÇ method·Î 󸮵ȴÙ. À̸¦ JVM¿¡¼ method descripter¶ó ÇÏ¿© Oolong asembler·Î º¯È½Ã ´Ù¸¥ ÇüÅÂÀÇ method°¡ µÈ´Ù. ¿¹¸¦ µé¾î "void get(double d, long l)" Àº "get(DJ)V"·Î º¯°æµÈ´Ù. ¿©±â¼ D´Â double, J´Â long, V´Â void¸¦ ÀǹÌÇÑ´Ù.</DIV><BR> <DIV>±×·±µ¥ ¿©±â¼ "get(DJ)" ºÎºÐ¸¸ method À̸§À̹ǷΠreturn typeÀÌ ´Ù¸¥ µ¿ÀÏ method´Â overload ÇÒ ¼ö ¾ø´Ù. µû¶ó¼ overload´Â Á¤Àû(compile½Ã °áÁ¤)À̶ó´Â ¸íÁ¦°¡ ¼º¸³´Ï´Ù. ±×·¡¼ µ¿ÀûÀ¸·Î »ç¿ëµÇ¸é compile½Ã ¿À·ù¸¦ Ç¥ÃâÇÑ´Ù. ¾Æ·¡ÀÇ ¼Ò½º¸¦ º¸ÀÚ. ¿©±â¿¡´Â IFS¶ó´Â interface¿Í À̸¦ implementsÇÑ Impl1, Impl2 ¶ó´Â class°¡ ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>//IFS.java interface IFS { public String getName(); } //Impl1.java class Impl1 implements IFS { public String getName(){ return "Impl1"; } } //Impl2.java class Impl2 implements IFS { public String getName(){ return "Impl2"; } } //mainÀÌ ÀÖ´Â OverloadTest.java public class OverloadTest { static void pr(int i){ System.out.println("pr_int : " + i); } static void pr(String s){ System.out.println("pr_string : " + s); } static void pr(IFS ifs){ System.out.println("pr_string : " + ifs.getName()); } static void pr_run(Impl1 i1){ System.out.println("pr_run : " + i1.getName()); } static void pr_run(Impl2 i2){ System.out.println("pr_run : " + i2.getName()); } public static void main(String[] args){ OverloadTest test = new OverloadTest(); test.pr(10); test.pr("Jeid"); IFS ifs1 = new Impl1(); test.pr(ifs1); IFS ifs2 = new Impl2(); test.pr(ifs2); //pr_run(ifs1); //pr_run(ifs2); } }</PRE></DIV><BR> <DIV>À§ÀÇ ¼Ò½º¸¦ ¼öÇàÇϸé Á¤»óÀûÀ¸·Î compileÀÌ µÉ°ÍÀΰ¡?</DIV><BR> <DIV>´ç¿¬È÷ Àß µÈ´Ù. pr()Àº overload¸¦ Àß ±¸ÇöÇß´Ù. ÇÏÁö¸¸ ¼Ò½º ÇÏ´ÜÀÇ µÎ ÁÖ¼®¹®À» Ç®¸é ¾î¶»°Ô µÉ±î? ÀÌ´Â compile¿À·ù¸¦ ³½´Ù.</DIV><BR> <DIV><PRE class=wiki>OverloadTest.java:36: cannot resolve symbol symbol : method pr_run (IFS) location: class OverloadTest pr_run(ifs1); ^ OverloadTest.java:37: cannot resolve symbol symbol : method pr_run (IFS) location: class OverloadTest pr_run(ifs2); ^ 2 errors</PRE></DIV><BR> <DIV>½ÇÁ¦ À§ µÑÀÇ pr_run method´Â bytecode·Î º¯È¯½Ã "pr_run(Lpackage_name.IFS)V"·Î µ¿ÀÏÇÏ°Ô »ý¼ºµÈ´Ù. µû¶ó¼ compile½Ã¿¡ ¿À·ù¸¦ Ç¥ÃâÇÑ´Ù. ÀÌ ¼Ò½º¸¦ º¸¸é ¾Ë ¼ö ÀÖµíÀÌ "method overload´Â Á¤Àû(compile½Ã)À¸·Î ¹Ì¸® °áÁ¤µÇ¸ç, µ¿Àû(½ÇÇà½ÃÆÇ´Ü)À¸·Î »ç¿ëÇÒ¼ö ¾ø´Ù." <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.1.2 target=_blank name=s-6.1.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1.2</A> </SPAN>"±×·¸´Ù¸é overload¿¡¼ ½ÇÁ¦·Î È¥µ¿µÇ´Â ºÎºÐÀº ¹«¾ùÀΰ¡?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.2" target=_blank>#</A></H4> <DIV>´ÙÀ½ ¼Ò½º¸¦ º¸°í ½ÇÁ¦·Î ¼öÇàµÇ´Â method¸¦ ã¾Æº¸¶ó.</DIV><BR> <DIV><PRE class=wiki>class OverloadTest2 { static int base(double a, double b){ ... } //method A static int count(int a, int b){ ... } //method B static int count(double a, double b){ ... } //method C static int sum(int a, double b){ ... } //method D static int sum(double a, int b){ ... } //method E }</PRE></DIV><BR> <DIV> <UL> <LI>base(3,4) ¸¦ È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => ´ç¿¬È÷ method A (3°ú 4´Â Á¤¼ö¶óµµ doubleÀÌ µÇ¹Ç·Î Á¤»óÀûÀ¸·Î ¼öÇàµÊ) <LI>count(3,4) ¸¦ È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => B¿Í CÁß °¥µîÀÌ »ý±ä´Ù. ÀÌ·²°æ¿ì JVMÀº °¡Àå ÇÑÁ¤Àû(more specific)ÇÑ method¸¦ ã´Â´Ù. ¿©±â¼ 3°ú 4´Â Á¤¼öÇü¿¡ °¡±î¿ì¹Ç·Î method B °¡ È£ÃâµÈ´Ù. <LI>count(3, 4.0) À» È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => À̰ÍÀº 4.0 ÀÌ doubleÀ̹ǷΠmethod C °¡ ´õ ÇÑÁ¤ÀûÀ̹ǷΠmethod C °¡ È£ÃâµÈ´Ù. <DIV class=indent> </DIV> <LI>sum(3,4.0) À» È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â? => À̰ÍÀº ´ç¿¬È÷ typeÀÌ ÀÏÄ¡ÇÏ´Â method D. <DIV class=indent> </DIV> <LI>sum(3,4) ¸¦ È£ÃâÇßÀ»¶§ ¼öÇàµÇ´Â method´Â?? => ÀÌ·± Äڵ尡 ¼Ò½º³»¿¡ ÀÖÀ¸¸é ´ÙÀ½°ú °°Àº compile ¿À·ù¸¦ Ç¥ÃâÇÑ´Ù. </LI></UL><PRE class=wiki>OverloadTest.java:48: reference to sum is ambiguous, both method sum(int,double) in OverloadTest and method sum(double,int) in OverloadTest match System.out.println("sum(3,4) = " + sum(3,4)); ^ 1 error</PRE></DIV><BR> <DIV>method D¿Í method E°¡ ¾Ö¸ÅÇÏ´Ù´Â compile ¿À·ùÀÌ´Ù. À̰ÍÀº µÑÁß ¾î´À°ÍÀÌ ´õ ÇÑÁ¤ÀûÀÎÁö ãÀ» ¼ö ¾øÀ¸¹Ç·Î bytecode ¸¦ »ý¼º ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù.</DIV><BR> <DIV>"ÀÌ·¸µí compiler¿¡°Ô ºÒÇÊ¿äÇÑ ¿ÀÇØ(È¥µ¿)¸¦ ÃÊ·¡ÇÏ´Â overload´Â »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù. °³ÀÎÀûÀ¸·Î overload¸¦ °¡´ÉÇÑ »ç¿ëÇÏÁö ¾ÊÀ¸·Á Çϰí ÇÊ¿äÇÏ´Ù¸é ÀμöÀÇ °³¼ö°¡ ´Ù¸¥ overload¸¦ »ç¿ëÇÏ´Â ÆíÀÌ´Ù." <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.1.3 target=_blank name=s-6.1.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.1.3</A> </SPAN>(Âü°í) ¶Ç´Ù¸¥ È¥µ¿, overloadÇÑ method¸¦ override Çϸé? <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.1.3" target=_blank>#</A></H4> <DIV>overload¶õ compiler°¡ bytecodeº¯È¯½Ã ´Ù¸¥ À̸§À» ºÙÀÌ´Â ±â´ÉÀ̶ó´Â °ÍÀ» À§¿¡¼ ¼³¸íÇß´Ù. µû¶ó¼ super class¿¡¼ overloadÇÑ method¸¦ »ó¼ÓÇÏ¿© overrideÇÏ¸é ¿ÏÀü º°°³ÀÇ method¸¦ overrideÇѰÍó·³ JVMÀº ÆÇ´ÜÇÑ´Ù. Áï, overload¿Í override´Â Á÷±³(ÀüÇô»ó°ü¾ø´Â)ÇÏ´Â °³³äÀÌ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-6.2 target=_blank name=s-6.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2</A> </SPAN>»ó¼Ó/override/ÀºÆó ¿¡¼ÀÇ º¹ÀâÇÔ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-6.2.1 target=_blank name=s-6.2.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.1</A> </SPAN>"Java classÀÇ member 4 Á¾·ù" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.1" target=_blank>#</A></H4> <DIV> <OL type=1> <LI>instance field <LI>instance method <LI>static field <LI>static method <DIV class=indent> </DIV></LI></OL>¿©±â¼ »ó¼ÓÀ» ÇÏ¿´À» °æ¿ì runtime½Ã °´Ã¼ÀÇ Çü½Ä¿¡ µû¶ó ¼±ÅõǴ °ÍÀº? 2¹ø instance method »ÓÀÌ´Ù. Áï, µ¿¸íÀÇ member¸¦ sub class¿¡¼ ¼±¾ðÇßÀ» ¶§ instance method¸¸ override µÇ°í ³ª¸ÓÁö´Â ¿ÏÀü º°°³ÀÇ member°¡ µÈ´Ù. µû¶ó¼ À§ÀÇ 1,3,4´Â sub class¿¡¼ µ¿ÀÏÇÏ°Ô ¼±¾ðÇßÀ» °æ¿ì º°°³ÀÇ °ÍÀ¸·Î ÀνĵǸç compile½Ã¿¡ ¹«¾ùÀ» access ÇÒÁö °áÁ¤µÈ´Ù.</DIV><BR> <DIV>Áï, instance method´Â overrideµÇÁö¸¸ instance field/static field´Â ÀºÆóµÈ´Ù. override´Â ½ÇÇà½Ã °´Ã¼ÀÇ Çü½Ä¿¡ µû¶ó ó¸® ÇÒ´çµÇÁö¸¸, ÀºÆóÀÇ °æ¿ì´Â compile½Ã¿¡ °áÁ¤µÇ°í ¸¸´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.2 target=_blank name=s-6.2.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.2</A> </SPAN>"override½Ã method À̸§¿¡ ´ëÇÑ ÇÔÁ¤" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.2" target=_blank>#</A></H4> <DIV>°ú°Å¿¡ ÄÚµùÀ» ÇÏ´øÁß Á¤¸»ÀÌÁö ¾îó±¸´Ï ¾ø´Â °æ¿ì¸¦ ´çÇß´Ù. override ÇÏ´Â methodÀ̸§À» À߸ø½á¼ Ȳ´çÇÑ(?) °í»ýÀ» ÇÑÀûÀÌ ÀÖ´Ù. super classÀÇ writable()À̶ó´Â method¸¦ writeable()À̶ó°í override(?)ÇÏ¿´´Âµ¥ ÇÁ·Î±×·¥ ¼öÇà Áß¿¡ writable()ÀÌ Ç×»ó false°¡ ³ª¿À´Â °ÍÀÌ ¾Æ´Ñ°¡? ±×·¡¼ ¼Ò½º¸¦ ÃßÀûÃßÀû ÇÏ´Ù ¸î½Ã°£À» ÇãºñÇß¾ú´ø ±â¾ïÀÌ ÀÖ´Ù.</DIV><BR> <DIV>java¸¦ Á¢ÇÑÁö ¾ó¸¶µÇÁö ¾Ê¾Ò°í ¿äÁò°°ÀÌ eclipse°°Àº ¿¡µðÅ͵µ ¾øÀÌ ¸Þ¸ðÀå¿¡¼ ÄÚµùÇÏ´ø ½ÃÀýÀ̶ó ´õ¿í °í»ýÇß´ø°Í °°´Ù. ÇÑÂü ÈÄ¿¡¾ß ¿ì¿¬È÷ ½ºÆç¸µÀÌ À߸øµÈ°É ¾Ë°í ¾ó¸¶³ª Ȳ´çÇß´øÁö... Áö±Ý »ý°¢Çϸé À̰͵µ ÁÁÀº Ãß¾ïÀ̸®¶ó.</DIV><BR> <DIV>¹«Á¶°Ç override Àß µÇ¾úÀ»°Å¶ó »ý°¢ Çß´ø ³ªÀÇ ºÒÂûµµ ÀÖ¾úÁö¸¸ compile¶§³ª runtime½Ã ¾Æ¹«·± ¹ÝÀÀÀ» º¸ÀÌÁö ¾Ê´ø Javaµµ ¿ø¸Á½º·¯¿ü´Ù. 2003³âµµ¿¡ C#À¸·Î ÇÁ·ÎÁ§Æ®¸¦ Çߴµ¥ C#Àº »ó¼ÓÀÇ override¿¡ ´ëÇÏ¿© "override void writalbe().."°ú °°ÀÌ Á¤Àǽà override¸¦ ¸í½ÃÇØ¾ß µÈ´Ù´Â °ÍÀ» º¸°í »ó´çÈ÷ ¸¶À½¿¡ µé¾î Çß´ø ±â¾ïÀÌ ÀÖ´Ù. °¡µ¶¼ºµµ ¶Ù¾î³¯ »Ó´õ·¯ ³ªÀÇ ¸î½Ã°£µ¿¾ÈÀÇ Çì¸ÞÀÓµµ ¾øÀ» °ÍÀ̱⠶§¹®´Ù. Javaµµ ÀÌ·¸°Ô È®½ÇÇÑ ¸í¼¼¿´À¸¸é Á¤¸» ÁÁ°Ú´Ù.</DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.3 target=_blank name=s-6.2.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.3</A> </SPAN>"¶Ç´Ù¸¥ ³ªÀÇ(?) ½Ç¼ö - ¸»µµ ¾ÈµÇ´Â ¿ÀŸ" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.3" target=_blank>#</A></H4> <DIV>À§ÀÇ methodÀ̸§À» À߸ø½á¼ °í»ýÇϱâ ÀÌÀü¿¡ ¾ÆÁÖ ºñ½ÁÇÑ °í»ýÀ» ÇÑÀûÀÌ ÀÖ´Ù.</DIV><BR> <DIV>'³ Á¤¸» ¹Ùº¸Àΰ¡'¶ó´Â »ý°¢À» µé°Ô Çß´ø ¹®Á¦¿´´Ù. Ãʺ¸ ½ÃÀý¿¡´Â ¿ÖÀ̸®µµ ¿ÀŸ°¡ ¸¹ÀÌ ³ª´øÁö... ¿äÁòÀº ´ëÃæ Űº¸µå µÎµå·Áµµ ¿ÀŸ°¡ Àß ¾È³ª´Âµ¥ ±× ½ÃÀý¿¡ ¿ÀŸ ¶§¹®¿¡ ´À¸° CPU¿¡¼ ÄÄÆÄÀÏÀ» ¸î¹øÀ» Çß´ÂÁö... <DIV class=indent> </DIV>±â¾ïÀ» µÇ»ì¸®¸é ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>public class Member { private int memberNo; public int getMemberNo(){ return this.memberNo; } public void setMemberNo(int menberNo){ this.memberNo = memberNo; } ...... }</PRE></DIV><BR><BR> <DIV>À§ ¼Ò½ºÀÇ Member¿¡´Â ´Ù¸¥ ¿©·¯°¡Áö member field°¡ Àִµ¥ DBÀÇ member table¿¡ memberid Ä÷³ÀÌ memberno·Î º¯°æµÇ¸é¼ Member classÀÇ memberId¸¦ memberNo·Î º¯°æÇÏ°Ô µÇ¾ú´Ù. À§¿Í °°ÀÌ ¼öÁ¤ÇÏ¿© ¹èÆ÷ÇØ³õ°í Å×½ºÆ®¸¦ Çϴµ¥ ½Ã½ºÅÛÀÌ ¿ÏÀüÈ÷ µÚÁ×¹ÚÁ×À¸·Î µ¹¾Æ¹ö¸®´Â °ÍÀÌ ¾Æ´Ñ°¡. ÀÌ °æ¿ìµµ method À̸§Ã³·³ ¸î½Ã°£À» Çì¸Å¾ú´Ù.</DIV><BR> <DIV>À̹ø¿¡ argumentÀÇ ¿ÀŸ·Î ÀÎÇÑ ¾îó±¸´Ï ¾ø´Â ½Ç¼ö¿´´Ù. setMemberNo(int menberNo)¿¡¼ ¹®Á¦°¡ ¹ß»ýµÇ¾ú´ø °ÍÀÌ´Ù. ÀμöÀÇ memberNo¸¦ menberNo·Î À߸øÄ£°ÍÀÌ´Ù. ±×·¡¼ memberNo¿¡´Â ÇØ´ç memberÀÇ memberno°¡ ¾Æ´Ñ 0ÀÌ ¸ðµÎ µé¾î°¬¾î´ø °ÍÀÌ´Ù. ½Ã½ºÅÛÀº memberno¸¦ ±âÁØÀ¸·Î µµ´Â ºÎºÐÀÌ ³Ê¹«³ª ¸¹¾Ò±â¿¡ ¿À·ù³ª´Â ºÎºÐµµ ¸¹¾ÒÀ¸¸ç DB¿¡¼´Â Á¦´ë·Î µÈ membernoÀ» ÀÐ¾î ¿ÔÀ¸¸ç, compile°ú runtime½Ã ¾Æ¹«·± ¹ÝÀÀµµ ¾ø¾ú±â¿¡, Ãʺ¸ÀÚ¸¦ ±×·¸°Ôµµ °í»ý½ÃÄ׳ª º¸´Ù.</DIV><BR> <DIV>À̰͵µ member field¸é ¹«Á¶°Ç this¸¦ ºÙÀ̵µ·Ï ÇÏ´øÁö Java°¡ Àμö´Â 'm_'¿Í prefix¸¦ ºÙÀ̵µ·Ï Coding StyleÀ» Á¤ÀÇ- SUN»çÀÌÆ®ÀÇ Java Coding ±Ô¾à¿¡´Â "Variable names should not start width underscore_ or dollar sign $ characters, even though both are allowed." ¿Í °°ÀÌ ¸í½ÃµÇ¾î ÀÖ´Ù - Çß´õ¶ó¸é ¹ß»ýÇÏÁö ¾Ê¾ÒÀ» ¹®Á¦ÀÌ´Ù.</DIV><BR> <DIV>¶ÇÇÑ C¾ð¾î³ª C#¿¡¼ ó·³ compile °æ°í·¹º§À» ³ô¿©³õÀ¸¸é "menberNo´Â ¾îµð¼µµ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù."¿Í °°Àº ¸Þ¼¼Áö¸¦ º¸¿© Áá´õ¶ó¸é °í»ýÀ» ´ú ÇÏÁö ¾Ê¾ÒÀ»±î? <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.4 target=_blank name=s-6.2.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.4</A> </SPAN>"static member¸¦ instance¸¦ °æÀ¯ÇÏ¿© ÂüÁ¶Çؼ´Â ¾È µÈ´Ù." <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.4" target=_blank>#</A></H4> <DIV>¿¹¸¦ µé¾î ClassA ¿¡ public static int AA ¶ó´Â static field°¡ ÀÖÀ» °æ¿ì ClassA.AA ·Î Á¢±ÙÇØ¾ß Çϴµ¥, ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ´Â ½Ç¼ö¸¦ ¹üÇÑ´Ù.(¹°·Ð ¿À·ù´Â ¾øÁö¸¸)</DIV><BR> <DIV><PRE class=wiki>ClassA a = new ClassA(); int i = a.AA; //instance¸¦ °æÀ¯ÇÏ¿© Á¢±Ù int j = ClassA.AA; //¿Ã¹Ù¸£°Ô Á¢±Ù</PRE></DIV><BR> <DIV>±×·³ ¿Ö ±»ÀÌ ClassA.AA¿Í °°ÀÌ instance°¡ ¾Æ´Ñ classÀ̸§À» ºÙ¿©¾ß ÇÒ±î?</DIV><BR> <DIV>static member(static field/static method)´Â compile½Ã¿¡ ÀÌ¹Ì ¾î´À°ÍÀ» È£ÃâÇÒ Áö °áÁ¤Çϱ⠶§¹®¿¡ À§ÀÇ a.AA¿Í °°Àº °ÍÀº staticÀÌ ¾Æ´Ñ°Í °°Àº ¿ÀÇØ¿Í È¥¶õ¸¸ °¡Á®¿À±â ¶§¹®ÀÌ´Ù. ½ÉÁö¾î °³ÀÎÀûÀ¸·Î´Â µ¿ÀÏ class ³» - À§ ¼Ò½º¿¡¼ ClassAÀÇ member method - ¿¡¼ ClassA.AA¶ó°í »ç¿ëÇÏ´Â ÆíÀÌ´Ù.</DIV><BR> <DIV>ÀÌ´Â local variable°ú È¥µ¿µÉ ¿°·Áµµ ¾øÀ»»Ó´õ·¯ AA¶ó´Â º¯¼ö°¡ staticÀ̶ó´Â °Íµµ È®½ÇÈ÷ ¾Ë ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¹°·Ð private static ÀÇ °æ¿ì´Â ClassA.BB ¿Í °°ÀÌ ÇÏÁö ¾Ê°í BB ¶ó°í ÇØµµ ¹«¹æÇϰÚÁö¸¸ ¸»ÀÌ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H4><A class=con_link id=s-6.2.5 target=_blank name=s-6.2.5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.2.5</A> </SPAN>"super keyword´Â ºÎ¸ðÀÇ this" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.2.5" target=_blank>#</A></H4> <DIV>Java °³¹ßÀÚ ´ëºÎºÐÀº 'super' ¿¡ ´ëÇÏ¿© ±×·¸°Ô ¹Î°¨ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×°Å super() ³ª super.method1() °ú °°ÀÌ »ç¿ëµÇÁö ±× ÀÌ»ó¿¡ ´ëÇØ¼± ±íÀÌ »ý°¢ÇÏÁö ¾Ê°Ô µÈ´Ù. super¸¦ ÇѸ¶µð·Î Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV>"super keyword´Â instance methodµî¿¡¼ this¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °÷¿¡¼¸¸ ¾µ ¼ö ÀÖ´Ù. thisÀÇ ÀÚ¸®¿¡ super¶ó°í ¾²¸é ÇöÀç classÀÇ member°¡ ÂüÁ¶µÇ´Â ´ë½Å ºÎ¸ð classÀÇ member°¡ ÂüÁ¶µÇ´Â °ÍÀÌ´Ù."</DIV></DIV> <DIV> <H3><A class=con_link id=s-6.3 target=_blank name=s-6.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.3</A> </SPAN>»ó¼Ó¿¡ °üÇÑ ¶Ç ´Ù¸¥ ¹®Á¦ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.3" target=_blank>#</A></H3></DIV> <DIV> <H3><A class=con_link id=s-6.4 target=_blank name=s-6.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.4</A> </SPAN>±×¹ÛÀÇ ÇÔÁ¤ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-6.4.1 target=_blank name=s-6.4.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.4.1</A> </SPAN>"»ý¼ºÀÚ¿¡ void ¸¦ ºÙÀδٸé?" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.1" target=_blank>#</A></H4> <DIV>»ý¼ºÀÚ¿¡ void¸¦ ºÙÀÎ´Ù¸é ±× class°¡ new µÉ¶§ ±× »ý¼ºÀÚ(?)°¡ ½ÇÇàµÉ±î?? ¾Æ·¡ÀÇ 'Constuctor'¶ó´Â ¹®ÀÚ¿Àº Ãâ·ÂµÉ±î?</DIV><BR> <DIV><PRE class=wiki>public class ConstructorTest{ void ConstructorTest(){ System.out.println("Constuctor"); } ..... }</PRE></DIV><BR> <DIV>Ãâ·ÂµÇÁö ¾Ê´Â´Ù. ¹°·Ð compile½Ã ¾Æ¹«·± °æ°íµµ ¾ø¾ú´Ù. Áï, void°¡ ºÙÀº ConstructorTest()´Â »ý¼ºÀÚ°¡ ¾Æ´Ï¶ó instance methodÀÏ »ÓÀ̾ú°í new½Ã¿¡´Â default constructor°¡ ½ÇÇà µÇ¾ú´ø °ÍÀÌ´Ù.</DIV></DIV> <DIV> <H4><A class=con_link id=s-6.4.2 target=_blank name=s-6.4.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>6.4.2</A> </SPAN>"if / switch ÀÇ ÇÔÁ¤" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-6.4.2" target=_blank>#</A></H4> <DIV>Java °³¹ßÀÚ¶ó¸é ´ëºÎºÐÀÌ Ãʺ¸½ÃÀý¿¡ if Á¶°ÇÀý¿¡ '==' ´ë½Å '='À» ½áº» ±â¾ïÀÌ ÀÖÀ»°ÍÀÌ´Ù. ¿¹¸¦ µé¾î "if( isListenLecture == Student.STUDENT )" ¸¦ "if( isListenLecture = Student.STUDENT )" ·Î À߸ø ¾´ °æ¿ìÀÌ´Ù. ¿©±â¼ Student.STUDENT´Â boolean typeÀÌ´Ù. ¿©±â¼ isListenLecture´Â Ç×»ó Student.STUDENT °ªÀ» °®°Ô µÇ´Â ¹ö±×°¡ »ý±ä´Ù. ÀÌ´Â compile½Ã¿¡ ¾Æ¹«·± °æ°íµµ ¾ø´Ù. ÀÌ·¸°Ô Çѹø ´çÇÏ°í ³ª¸é ¾ÕÀ¸·Î´Â '=='¸¦ Á¤È®È÷ ¾²°Ô µÇ°Å³ª ¾Æ´Ï¸é ´ÙÀ½°ú °°ÀÌ ¾´´Ù.</DIV><BR> <DIV>"if( isListenLecture )" ¶Ç´Â "if( !isListenLecture )" ¶ó°í ¸»ÀÌ´Ù. À̰ÍÀÌ ´õ¿í °£°áÇϰí Àǹ̵µ ºÐ¸íÇØ Áö±â ¶§¹®ÀÌ´Ù. ¶ÇÇÑ ´ÙÀ½ ¼Ò½º¿Í °°Àº ¿À·ùµµ ¹üÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ´Â À߸øµÈ indentationÀ¸·Î ºú¾îÁö´Â Ãʺ¸ÀÇ ÇÔÁ¤ÀÌ´Ù.</DIV><BR> <DIV>À̱ÛÀ» Àд ºÐ²² ÇѰ¡Áö ´çºÎµå¸®°í ½ÍÀº°ÍÀº ¿©±â¼ Ãʺ¸¶ó°í ´Ù ±×·±°Ç ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù.</DIV><BR> <DIV><PRE class=wiki>.... if( a < 5 ) b = 3; c = 10; //À̺κÐÀº ³ªÁß¿¡ Ãß°¡µÈ ¶óÀÎÀÌ´Ù. if( isStudent ) if( isFemale ) sayHello("Hi~~"); else sayHello("Hello Professor~");</PRE></DIV><BR> <DIV>À§ÀÇ ¼Ò½ºÁß c = 10; ÀÌ if( a < 5 )ÀÇ ÂüÀ϶§ ¼öÇàµÈ´Ù°í ¿ÀÇØÇÒ ¼öµµ ÀÖ°í, sayHello("Hello Professor~"); ºÎºÐÀÌ if( isStudent )ÀÇ else ºÎºÐÀ̶ó°í ¿ÀÇØ ÇÒ ¼öµµ ÀÖ´Ù. À̰ÍÀº ÀüÀûÀ¸·Î indentation(µé¿©¾²±â)ÀÇ ºÒÂû·Î °³¹ßÀÚ°¡ À߸ø ÀÐÀ» ¼ö ÀÖ´Â ºÎºÐÀÌ´Ù. Java Coding Style¿¡¼´Â if¹® ´ÙÀ½¿¡ ÇÑÁÙÀÇ Äڵ尡 ÀÖ´õ¶óµµ {} ¸¦ »ç¿ëÇÏ±æ ±Ç°íÇÑ´Ù. ±×·¯¸é ù¹øÂ° if¹®°ú °°Àº ¿À·ù¸¦ ¹æÁöÇÒ ¼ö ÀÖ°í µÎ¹øÂ° if¹®¿¡¼µµ º¸´Ù °¡µ¶¼ºÀÌ »ý±æ °ÍÀÌ´Ù.</DIV><BR> <DIV>ÀÌ¿Í À¯»çÇÑ °ÍÀ¸·Î switch¹®ÀÇ case Àý¿¡¼ break¸¦ ¾²Áö ¾Ê¾Æ Ç×»ó µ¿ÀÏÇÏ°Ô Ã³¸®µÇ´Â ¹ö±×µµ °æÇèÇØ º¸¾ÒÀ» °ÍÀÌ´Ù.</DIV></DIV> <DIV> <H2><A class=con_link id=s-7 target=_blank name=s-7></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>7</FONT></A> </SPAN>Java ±â´É Àû¿ë ¸î°¡Áö <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-7.1 target=_blank name=s-7.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.1</A> </SPAN>´ë±Ô¸ð °³¹ß¿¡¼ interface ºÐ¸®Çϱâ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1" target=_blank>#</A></H3></DIV> <DIV> <H4><A class=con_link id=s-7.1.1 target=_blank name=s-7.1.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.1.1</A> </SPAN>"interface ºÐ¸®ÀÇ Çʿ伺" <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.1.1" target=_blank>#</A></H4> <DIV>Java¿Í °°Àº °´Ã¼ÁöÇâ¾ð¾î¿¡¼´Â °ø°³ÇØ¾ß ÇÒ method¸¸À» publicÀ¸·Î Çϰí, °ø°³ÇÒ Çʿ䰡 ¾ø´Â °ÍÀº privateÀ¸·Î ÇÏ¿© classÀÇ »ó¼¼ÇÑ ³»¿ëÀ» ÀºÆóÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ´Ù. ±×·±µ¥ private ºÎºÐÀÌ ÀºÆóµÇ¾î ÀÖ´Â°Í Ã³·³ º¸À̴°¡?</DIV><BR> <DIV>¼Ò½º¸¦ º¸¸é ÈÍÈ÷ µé¿©´Ù º¸À̴µ¥?</DIV><BR> <DIV>´ë±Ô¸ð °³¹ßÀº ÇϺΠclassºÎÅÍ bottom-upÀ¸·Î ÁøÇàÇÏ´Â °ÍÀÌ ÀÌ»óÀûÀÎ ÇüÅÂÀÏ °ÍÀÌ´Ù. ±×·± ÇüÅ·Π°³¹ßÇϸé ÀÓÀÇÀÇ ½ÃÁ¡¿¡¼ Å×½ºÆ®¸¦ ÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª Çö½ÇÀûÀ¸·Î ´Ü±â°£¿¡ ¸¹Àº ¼öÀÇ °³¹ßÀÚ°¡ ºÙ¾î¼ ´Ü½Ã°£¿¡ °³¹ßÀ» ÁøÇàÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ¶ÇÇÑ ¼·Î È£ÀÀÇÏ´Â °ü°è¿¡ ÀÖ´Â classµéÀº ¾î´ÀÂÊÀÌ ÇϺÎÀÎÁö Á¤ÀÇÇϱⰡ ³°¨ÇÒ¶§°¡ ¸¹´Ù. ÀÌ·±°æ¿ì ¿ì¸®´Â ÈçÈ÷ package´ÜÀ§·Î ³ª´©¾î °³¹ßÇÑ´Ù. ÇÏÁö¸¸ ÀÌ·²°æ¿ì ¾î´ÀÁ¤µµ ÄÚµùÀÌ Á¾·áµÉ¶§±îÁö Å×½ºÆ®ÇϱⰡ »ó´çÈ÷ Èûµé¾î Áø´Ù. Java¿¡¼´Â private member¿Í method ±¸Çö±îÁö ÇϳªÀÇ ÆÄÀÏ¿¡ ÄÚµùÇϴµ¥ °³¹ß Áß°£¿¡ °ø°³ÇÏ¿© ´Ù¸¥ °³¹ßÀÚ°¡ ÀÌ¿ëÇØ¾ß ÇÏ´Â class¸¦ ¹èÆ÷ÇÒ ¼ö ¾øÀ¸¹Ç·Î µ¿½Ã °³¹ßÀÌ ±îÄ¥ÇØ Áø´Ù.</DIV><BR> <DIV>ÀÌ »óȲ¿¡¼ ´Ù¸¥ package(°³¹ßÀÚ)¿¡ °ø°³ÇØ¾ß ÇÏ´Â class ºÎºÐÀ» interface·Î °ø°³ÇÏ¸é ¸¹Àº ºÎºÐ À¯¿¬ÇÏ°Ô µÈ´Ù. ÀÌ interface¸¦ ´Ù¸¥ °³¹ßÀÚ´Â °³¹ßÀ» Çϰí Å×½ºÆ®°¡ ÇÊ¿äÇÏ´Ù¸é TestImpl class¸¦ ¸¸µé¾î ÇϸéµÈ´Ù. RMI³ª CORBA¿¡¼µµ StubÀº ÀÌ·±½ÄÀ¸·Î IDLÀ» Á¤ÀÇÇÑ´Ù.</DIV></DIV> <DIV> <H3><A class=con_link id=s-7.2 target=_blank name=s-7.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.2</A> </SPAN>Java¿¡¼ÀÇ ¿°ÅÇü <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.2" target=_blank>#</A></H3> <DIV>Java¿¡¼´Â ¿°ÅÇü-CÀÇ ±¸Á¶Ã¼, °ø¿ëü-ÀÌ ¾ø´Ù. ¿°ÅÇüÀÌ ¿Ö ÇÊ¿äÇÏ³Ä°í ¹Ý¹®ÇÏ´Â °³¹ßÀÚµµ ÀÖÀ» °ÍÀÌ´Ù.</DIV><BR> <DIV>ÇÏÁö¸¸ ¿°ÅÇüÀÌ ¾ø¾î °ï¶õÀ» °æÇèÇÑ °³¹ßÀÚµµ ²Ï ÀÖÀ¸¸®¶ó º»´Ù. ÃÖ±Ù¾ð¾î(ƯÈ÷ °´Ã¼ÁöÇâ ¾ð¾î) - Java, Eiffel, Oberonµî - ¿¡´Â ¿°ÅÇüÀº Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. C#¿¡´Â ÀÖ±ä ÇÏÁö¸¸.</DIV><BR> <DIV>ÀÌ·± ÀÌÀ¯·Î Java AWTÀÇ Label class´Â ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù.(ÅØ½ºÆ®ÀÇ Á¤·Ä°ª°ü·Ã)</DIV><BR> <DIV><PRE class=wiki>public static final int LEFT = 0; public static final int CENTER = 1; public static final int RIGHT = 2; ... label.setAlignment(Label.CENTER); ...</PRE></DIV><BR> <DIV>ÇÏÁö¸¸ À§ÀÇ ¼Ò½º¿¡´Â ¹®Á¦°¡ ÀÖ´Ù. setAlignment() methodÀÇ ÀÎÀÚ°¡ intÀÎ °ÍÀÌ´Ù. ¸¸¾à À§¿¡ Á¤ÀÇÇÑ 0, 1, 2°¡ ¾Æ´Ñ ´Ù¸¥ int °ªÀÌ µé¾î°¡µµ compile/runtime½Ã ¾Ë¼ö°¡ ¾ø´Ù. ±×·¡¼ ÁÖ¼®À» ´Þ°Ô µÇ´Âµ¥, ÁÖ¼®À̶ó ÇÔÀº Á¤¸»ÀÌÁö ÃÖÈÄÀÇ ¼ö´ÜÀ̶ó°í ºÁ¾ß ÇÑ´Ù.</DIV><BR> <DIV>½ÇÁ¦·Î ¿ì¸®°¡ °³¹ßÇØ ³õÀº ¼Ò½º¿¡µµ ÀÌ·±ºÎºÐÀÌ ÀÖÀ¸¸®¶ó ¿¹»óµÈ´Ù. ÀÌ ¹®Á¦¸¦ ¾î¶»°Ô Çϸé ÇØ°áÇÒ ¼ö ÀÖÀ»±î? <DIV class=indent> </DIV>Java¿¡¼ ¿°ÅÇüÀ» Çѹø ¸¸µé¾î º¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>//LabelAlignment.java public class LabelAlignment { private LabelAlignment() {} //ÀÌ´Â »ý¼ºÀÚ¸¦ privateÀ¸·Î ÇÏ¿© ´Ù¸¥µ¥¼´Â ¸¸µéÁö ¸øÇϵµ·Ï ÇϱâÀ§ÇÔÀÌ´Ù. public static final LabelAlignment LEFT = new LabelAlignment(): public static final LabelAlignment CENTER = new LabelAlignment(): public static final LabelAlignment RIGHT = new LabelAlignment(): } //º¯ÇüµÈ Label.java ÀÇ ÀϺÎ.. public synchronized void setAlignment(LabelAlignment alignment){ if( alignment == LabelAlignment.LEFT ){ ...//¿ÞÂÊÀ¸·Î ¸ÂÃß±â.. }else if( ... ... } } ...</PRE></DIV><BR> <DIV>À§¿¡¼ ÀÛ¼ºÇÑ ¼Ò½º´Â Àß ÀÛµ¿ÇÑ´Ù. ¼·Î ´Ù¸¥ 3°³ÀÇ instanceÀ̹ǷΠreference°¡ ´Þ¶ó '==' ¿¬»êµµ °¡´ÉÇϰí, ÈǸ¢ÇÏ´Ù.</DIV><BR> <DIV>ÇÏÁö¸¸ ÇѰ¡Áö ¹®Á¦°¡ ÀÖ´Ù. LabelAlignment°¡ SerializableÇÑ class¿¡¼ serializeµÇ¾ú´Ù deserialize µÈ´Ù¸é?</DIV><BR> <DIV>LabelAlignment alignment ´Â »õ·Î¿î instance°¡ µÇ°í serializeÀüÀÇ reference¿Í ´Ù¸¥ ÂüÁ¶ À§Ä¡¸¦ °®°Ô µÇ¾î '==' ¿¬»êÀº ¹ö±×¸¦ ¹ß»ý½ÃŲ´Ù. <DIV class=indent> </DIV>±×·³ À̰͸¸ ÇØ°áÇÏ¸é µÇ°Ú´Âµ¥, ¾î¶»°Ô refactoringÇÏ¸é µÉ °ÍÀΰ¡? '==' ¿¬»ê ´ë½Å equals·Î º¯ÇüÇÏ¸é µÇ°Ú´Âµ¥.</DIV><BR> <DIV><PRE class=wiki>//LabelAlignment.java public class LabelAlignment { private int flag; private LabelAlignment(int flag){ this.flag = flag; } public static final LabelAlignment LEFT = new LabelAlignment(0): public static final LabelAlignment CENTER = new LabelAlignment(1): public static final LabelAlignment RIGHT = new LabelAlignment(2): public boolean equals(Object obj){ return ((LabelAlignment)obj).flag == this.flag; } } //º¯ÇüµÈ Label.java ÀÇ ÀϺÎ.. public synchronized void setAlignment(LabelAlignment alignment){ if( LabelAlignment.LEFT.equals(alignment) ){ ...//¿ÞÂÊÀ¸·Î ¸ÂÃß±â.. }else if( ... ... } } ...</PRE></DIV><BR> <DIV>ÇÏÇÏ, Serialize±îÁö Àß ÀÛµ¿ÇÑ´Ù. ^^;</DIV><BR> <DIV>¿©±â¼ Debug¸¦ °í·ÁÇÑ´Ù¸é 0, 1, 2 ´ë½Å ¹®ÀÚ¿·Î "LEFT", "CENTER", "RIGHT"·Î ÇÑ´Ù¸é ´õ¿í ¸íÈ®ÇÏÁö ¾ÊÀ»±î?</DIV><BR> <DIV>(ÁÖÀÇ) À§¿¡¼Ã³·³ LabelAlignment.LEFT ¶ó°í ¾²±â ½È¾î¼ »ó¼ö interface¸¦ ¸¸µé¾î ±×°É implements ÇÏ¿© ±×³É LEFT ¶ó°í ¾²´Â °ÍÀ» »ÑµíÇØ ÇÏ¸ç ¾²´Â °³¹ßÀÚµéÀÌ ÀÖ´Ù. ¹°·Ð SwingÀÇ ¼Ò½ºµéÀ» º¸´Ùº¸¸é SwingConstants¶ó´Â interface¿¡ LEFT¸¦ ºñ·ÔÇÏ¿© ¿Â°® Àâ´ÙÇÑ »ó¼ö¸¦ Áý¾î³Ö¾î³õ°í ¿©±â Àú±â¼ implementsÇØ¼ »ç¿ëÇϰí ÀÖ´Ù. ÀÌ·± ÄÚµù ½ºÅ¸ÀÏÀº '³» ½ºÅ¸ÀÏÀ̾ß~' °¡ ¾Æ´Ï¶ó ³¿»õ³ª´Â ÄÚµåÀÌ´Ù.</DIV><BR> <DIV>LEFT¶ó´Â °ÍÀÌ ±¸ÇöÇÑ class¿¡ ÀÌ¹Ì ÀÖÀ» ¼ö ÀÖÀ» ¼ö ÀÖÀ»»Ó¾Æ´Ï¶ó ±¸ÇöÇÑ ¸ðµç Ŭ·¡½º¿¡¼ LEFT¸¦ º¸À¯ÇÏ¿© SwingConstants.LEFT»Ó ¾Æ´Ï¶ó Impl.LEFT·Îµµ »ç¿ëµÇ°Ô µÇ¾î ¿Â°® È¥¶õÀ» ÃÊ·¡ÇÏ°Ô µÈ´Ù. ÀԷ·®À» ÁÙÀ̱â À§ÇØ interface¸¦ implements ÇØ¼´Â ¾ÈµÇÁö ¾ÊÀ»±î?</DIV></DIV> <DIV> <H3><A class=con_link id=s-7.3 target=_blank name=s-7.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>7.3</A> </SPAN>Debug write <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-7.3" target=_blank>#</A></H3> <DIV>C¿¡¼´Â ´ÙÀ½°ú °°ÀÌ pre-process·Î Á¤ÀÇÇϸé DEBUG¶ó´Â ½Äº°ÀÚ¸¦ #defineÇÏÁö ¾ÊÀ¸¸é ÄÄÆÄÀÏÈÄ ÇØ´ç ¼Ò½ºÀÇ ºÎºÐÀÌ »èÁ¦µÈ´Ù.</DIV><BR> <DIV><PRE class=wiki>#ifdef DEBUG fprintf(stderr, "error...%dn", error); #endif /* DEBUG */</PRE></DIV><BR> <DIV>±×·³ Java¿¡¼´Â?</DIV><BR> <DIV>Java¿¡¼´Â Pre-process°¡ ¾øÁö¸¸ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇßÀ»¶§ Debug.isDebug °¡ final·Î ¼±¾ðµÇ¾î ÀÖÀ¸¸é compileÈÄ ¾Æ·¡ 3ÁÙ ¸ðµÎ »èÁ¦ µÈ´Ù.(´Ü Debug.isDebug °¡ false ·Î ÃʱâÈ µÇ¾ú´Ù¸é Á¦°ÅµÈ´Ù.)</DIV><BR> <DIV><PRE class=wiki>if( Debug.isDebug ){ System.out.println("error..." + error); }</PRE></DIV><BR> <DIV>Java´Â compile½Ã byte code »ý¼º½Ã finalÀº Á¤ÀûÀ¸·Î ÆÇ´ÜÇÏ¿© ¹Ì¸® Á¤ÀÇÇϱ⠶§¹®¿¡ À§ÀÇ 3ÁÙÀº »èÁ¦µÉ ¼ö ÀÖ´Ù. if¹®°ú ÇÔ²² ¾ø¾îÁö°Ô µÇ¹Ç·Î ó¸® ¼Óµµ¿¡ ÇÇÇØ¸¦ ÁÖÁö ¾Ê´Â´Ù. ´Ü, ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº Debug.isDebug °ªÀÌ º¯°æµÇ¸é ÀÌ °ÍÀ» »ç¿ëÇϰí ÀÖ´Â Ãøµµ ¸ðµÎ ÇÔ²² ´Ù½Ã compileÇØ¾ß ÇÑ´Ù. bytecode¸¦ ´Ù½Ã ¸¸µé¾î¾ß Çϱ⠶§¹®ÀÌ´Ù.</DIV><BR> <DIV>±×·±µ¥, ÀÌ ¼Ò½º¸¦ Debug.write()¿Í °°ÀÌ static À¸·Î ÇÏ¿© ÀÌ method³»¿¡¼ ÆÇ´ÜÇÏ°Ô ÇÏ¸é Æí¸®ÇÒÅÙµ¥. ±×¸®°í classº°·Î ON/OFF 󸮸¦ ÇÒ ¼ö ÀÖÀ¸¸é ÁÁÀ»ÅÙµ¥, ¾îÂî ÇÏ¸é °¡´ÉÇÒ °ÍÀΰ¡?</DIV><BR> <DIV>±×·³ ¸ÕÀú È£ÃâÇÑ ÂÊÀÇ classÀ̸§À» ã¾Æº¸ÀÚ. Á¢±ÙÀº ExceptionÀÇ printStackTrace()·Î ºÎÅÍ ½ÃÀ۵Ǿú´Ù. ÇÏÁö¸¸ ÀÌ ¼Ò½º¿¡´Â Exception °´Ã¼¸¦ newÇÑ ½ÃÁ¡¿¡ °áÁ¤µÇ¾î ÀÖ´Ù. ±×·¡¼ ºÎ¸ðÀÎ ThrowableÀÇ »ý¼ºÀÚ¸¦ È®ÀÎÇØ º¸´Ï fillInStackTrace() ·Î µÇ¾îÀִµ¥ ÀÌ method´Â native method¿´´Ù.</DIV><BR> <DIV>API Reference¸¦ º¸¸é Thread class¿¡¼´Â dumpStackTrace()¶ó´Â method°¡ ÀÖ¾ú´Ù. ¼Ò½º¸¦ º¸´Ï, ±×°Íµµ »ý¼º½ÃÁ¡À̾ú´Ù. ¾Æ¹«·¡µµ ¿¹¿Ü¹æ¸é¿¡¼ ã´Â°Ç ¹«¸®Àεí Çß´Ù.</DIV><BR> <DIV>±×·¡¼ classÀÇ È£Ãâ°èÃþÀ» ³ªÅ¸³»´Â java.lang.SecurityManagerÀÇ getClassContext() method·Î Á¢±ÙÇÏ¿´´Ù. sample ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>// 1. GetCallerSecurityManager.java public final class GetCallerSecurityManager extends SecurityManager { public Class[] getStackTrace(){ return this.getClassContext(); } } // 2. GetCallerClass.java public final class GetCallerClass { private static GetCallerSecurityManager mgr; static{ mgr = new GetCallerSecurityManager(); System.setSecurityManager(mgr); } public static void writeCaller(String str){ Class[] stk = mgr.getStackTrace(); int size = stk.length; for(int i = 0; i < size; i++){ System.out.println("stk[" + i + "] = " + stk[i]); } String className = stk[2].getName(); System.out.println("className is " + className + " : " + str); } } // 3. GetCallerClassMain1 : È£ÃâÇϴ Ŭ·¡½º ¿¹Á¦ 1 public class GetCallerClassMain1 { public static void main(String[] args){ GetCallerClass.writeCaller(", real is 1."); } } // 4. GetCallerClassMain1 : È£ÃâÇϴ Ŭ·¡½º ¿¹Á¦ 2 public class GetCallerClassMain2 { public static void main(String[] args){ GetCallerClass.writeCaller(", real is 2."); } }</PRE></DIV><BR> <DIV>À§ÀÇ 3¹ø ÁÖ¼®°ú 4¹ø ÁÖ¼® ºÎºÐÀ» ¼öÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ ³ª¿Â´Ù.</DIV><BR> <DIV><PRE class=wiki>className is GetCallerClassMain1 : , real is 1. className is GetCallerClassMain2 : , real is 2.</PRE></DIV><BR> <DIV>Á¤È®È÷ È£ÃâÇÑ Å¬·¡½º¸¦ Ç¥ÇöÇϰí ÀÖ´Ù. À̰ÍÀ» ºñ±³Çؼ Ŭ·¡½ºº° ON/OFF¸¦ ±¸ÇöÇÏ¸é µÈ´Ù. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H2><A class=con_link id=s-8 target=_blank name=s-8></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>8</FONT></A> </SPAN>Java 5.0 Tiger ¿¡ ´ëÇÏ¿© <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8" target=_blank><FONT size=3>#</FONT></A></H2> <DIV>Tiger¿¡¼´Â »õ·Î¿î °³³äÀÇ Àû¿ëÀÌ ¸¹Àº ºÎºÐ ½Ãµµ µÇ¾ú´Ù. ÀÌÁß °¡Àå ±âº»ÀÌ µÇ´Â ¸î°¡Áö¸¦ »ìÆìº¸ÀÚ. <DIV class=indent> </DIV></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.1 target=_blank name=s-8.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.1</A> </SPAN>Working with java.util.Arrays <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.1" target=_blank>#</A></H3> <DIV>Tiger¿¡¼´Â ¹«¾ùº¸´Ùµµ Collection classµé¿¡ ´ëÇØ ¸¹Àº ºÎºÐ Á¤ºñÇÏ¿´´Ù. ¿¹¸¦ µé¸é for/in ±¸¹® Áö¿ø°ú Generic Type member¿Í Arrays Utility class µîÀÌ´Ù. ±×·³ Collection¿¡ ´ëÇÑ static methodµéÀ» ´ã°í ÀÖ´Â Arrays ¿¡ ´ëÇØ ´ÙÀ½ example·Î ÇÑ´«¿¡ »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class ArraysTester { private int[] arr; private String[] strs; public ArraysTester(int size) { arr = new int[size]; strs = new String[size]; for (int i = 0; i < size; i++) { if (i < 10) { arr[i] = 100 + i; } else if (i < 20) { arr[i] = 1000 - i; } else { arr[i] = i; } strs[i] = "str" + arr[i]; } } public int[] getArr() { return this.arr; } public String[] getStrs() { return this.strs; } public static void main(String[] args) { int size = 50; ArraysTester tester = new ArraysTester(size); int[] testerArr = tester.getArr(); int[] cloneArr = tester.getArr().clone(); String[] testerStrs = tester.getStrs(); String[] cloneStrs = tester.getStrs().clone(); // clone test if (Arrays.equals(cloneArr, testerArr)) { System.out.println("clonse int array is same."); } else { System.out.println("clonse int array is NOT same."); } if (Arrays.equals(cloneStrs, testerStrs)) { System.out.println("clonse String array is same."); } else { System.out.println("clonse String array is NOT same."); } // 2ºÎÅÍ 10±îÁö °ª ¼ÂÆÃ Arrays.fill(cloneArr, 2, 10, new Double(Math.PI).intValue()); testerArr[10] = 98; testerStrs[10] = "corea"; testerStrs[11] = null; List<String> listTest = Arrays.asList(testerStrs); System.out.println("listTest[10] = " + listTest.get(10)); System.out.println("------- unsorted arr -------"); System.out.println("Arrays.toString(int[]) = " + Arrays.toString(testerArr)); System.out.println("Arrays.toString(String[]) = " + Arrays.toString(testerStrs)); Arrays.sort(testerArr); // Arrays.sort(testerStrs); //NullPointerException in sort method..(nullÀÌ ¾ø´õ¶óµµ ±æÀÌ¿¡ ´ëÇÑ Å©±â üũ´Â ¸øÇÔ) Arrays.sort(testerStrs, new Comparator<String>() { public int compare(String s1, String s2) { if (s1 == null && s2 == null) { return 0; } else if (s1 == null && s2 != null) { return -1; } else if (s1 != null && s2 == null) { return 1; } else if (s1.length() < s2.length()) { return -1; } else if (s1.length() > s2.length()) { return 1; } else if (s1.length() == s2.length()) { return 0; } else { return s1.compareTo(s2); } } }); System.out.println("------- sorted arr -------"); System.out.println("Arrays.toString(int[]) = " + Arrays.toString(testerArr)); System.out.println("Arrays.toString(String[]) = " + Arrays.toString(testerStrs)); System.out.println("------------------------------------------------"); String[][] mstrs1 = { { "A", "B" }, { "C", "D" } }; String[][] mstrs2 = { { "a", "b" }, { "c", "d" } }; String[][] mstrs3 = { { "A", "B" }, { "C", "D" } }; System.out.println("Arrays.deepToString(mstrs1) = " + Arrays.deepToString(mstrs1)); System.out.println("Arrays.deepToString(mstrs2) = " + Arrays.deepToString(mstrs2)); System.out.println("Arrays.deepToString(mstrs3) = " + Arrays.deepToString(mstrs3)); if( Arrays.deepEquals(mstrs1, mstrs2)) { System.out.println("mstrs1 is same the mstrs2."); }else { System.out.println("mstrs1 is NOT same the mstrs2."); } if( Arrays.deepEquals(mstrs1, mstrs3)) { System.out.println("mstrs1 is same the mstrs3."); }else { System.out.println("mstrs1 is NOT same the mstrs3."); } System.out.println("mstrs1's hashCode = " + Arrays.deepHashCode(mstrs1)); System.out.println("mstrs2's hashCode = " + Arrays.deepHashCode(mstrs2)); System.out.println("mstrs3's hashCode = " + Arrays.deepHashCode(mstrs3)); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.2 target=_blank name=s-8.2></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.2</A> </SPAN>Using java.util.Queue interface <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.2" target=_blank>#</A></H3> <DIV>Queue¸¦ ÀÌ¿ëÇÏ¿© First In First OutOrderingÇÑ Queue¸¦ ±¸Çö °¡´ÉÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; public class QueueTester { public static void main(String[] args) { System.out.println("---------- testFIFO ----------"); testFIFO(); System.out.println("---------- testOrdering ----------"); testOrdering(); } private static void testFIFO() { Queue<String> q = new LinkedList<String>(); q.add("First"); q.add("Second"); q.add("Third"); String str; while ((str = q.poll()) != null) { System.out.println(str); } } private static void testOrdering() { int size = 10; Queue<Integer> qi = new PriorityQueue<Integer>(size); Queue<String> qs = new PriorityQueue<String>(size); for (int i = 0; i < size; i++) { qi.offer(10 - i); qs.offer("str" + (10 - i)); } for (int i = 0; i < size; i++) { System.out.println("qi[" + i + "] = " + qi.poll() + ", qs[" + i + "] = " + qs.poll()); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.3 target=_blank name=s-8.3></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.3</A> </SPAN>java.lang.StringBuilder »ç¿ëÇϱâ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.3" target=_blank>#</A></H3> <DIV>StringBuffer°¡ synchronizeÇÏÁö ¾ÊÀº methodµé·Î ±¸¼ºµÈ µíÇÑ StringBuilder¸¦ »ç¿ëÇϹǷΠ¼º´É Çâ»óÀ» µµ¸ðÇÒ¼ö ÀÖ´Ù. »ç¿ë¹ýÀº StringBuffer¿Í µ¿ÀÏÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class StringBuilderTester { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("str1"); list.add("str2"); list.add("str3"); String ret = appendItems(list); System.out.println("ret = " + ret); } private static String appendItems(List<String> list) { StringBuilder sb = new StringBuilder(); for (Iterator<String> iter = list.iterator(); iter.hasNext();) { sb.append(iter.next()).append(" "); } return sb.toString(); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.4 target=_blank name=s-8.4></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.4</A> </SPAN>Using Type-Safe Lists <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.4" target=_blank>#</A></H3> <DIV>Collection¿¡ typeÀ» ¸í½ÃÇÏ¿© type-safe ÇÏ°Ô Ã³¸® °¡´É. ¾Æ·¡¿¡¼ typeÀ» ¸í½ÃÇÏÁö ¾ÊÀ» °æ¿ì compile error°¡ ³²À» º¸¿©ÁØ´Ù. tipÀ¸·Î Number¸¦ ÀÌ¿ëÇÏ¿© byte, short, int, long, double, float µ¿½Ã »ç¿ëÇÏ´Â ºÎºÐ ÂüÁ¶.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class ListTester { public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add("str1"); list.add("str2"); list.add(new Integer(123)); // <-- StringÀÌ ¾Æ´Ï¹Ç·Î compile error!! //Iterator¿¡ String typeÀ» ¸í½ÃÇϹǷΠÁ¤»èÀÛµ¿µÊ. for (Iterator<String> iter = list.iterator(); iter.hasNext();) { String str = iter.next(); System.out.println("srt = " + str); } //Iterator¿¡ String typeÀ» ¸í½ÃÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î ¾Æ·¡ A ºÎºÐ¿¡¼ compile ¿À·ù ¹ß»ý!! for (Iterator iter = list.iterator(); iter.hasNext();) { String str = iter.next(); //A System.out.println("srt = " + str); } //byte, short, int, long, double, float µ¿½Ã »ç¿ë List<Number> lstNum = new LinkedList<Number>(); lstNum.add(1); lstNum.add(1.2); for (Iterator<Number> iter = lstNum.iterator(); iter.hasNext();) { Number num = iter.next(); System.out.println("num = " + num); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.5 target=_blank name=s-8.5></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.5</A> </SPAN>Writing Generic Types <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.5" target=_blank>#</A></H3> <DIV>class ³ª interface keyword¿¡ typeÀ» ¸í½ÃÇÏ¿© µ¿ÀÏ Å¸ÀÔ ¸í½Ã °¡´É. ÁÖÀÇ ÇÒ Á¡Àº any typeÀº static ÀÏ ¼ö ¾ø´Ù.(µ¿ÀûÀ¸·Î typeÀÌ Á¤ÇØÁö¹Ç·Î)</DIV><BR> <DIV><PRE class=wiki>class AnyTypeList<T> { //class AnyTypeList<T extends Number> { // <-- ÀÌ´Â Number¸¦ »ó¼ÓÇÑ typeÀº Çã¿ëÇϰڴٴ ÀǹÌ. private List<T> list; //private static List<T> list; // <-- ÀÌ´Â Á¤ÀûÀ̹ǷΠcompile error ¹ß»ý!!! public AnyTypeList(){ list = new LinkedList<T>(); } public boolean isEmpty(){ return list == null || list.size() == 0; } public void add(T t){ list.add(t); } public T grap(){ if (!isEmpty() ) { return list.get(0); } else { return null; } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.6 target=_blank name=s-8.6></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.6</A> </SPAN>»õ·Î¿î static final enum <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.6" target=_blank>#</A></H3> <DIV>¿¹Á¦¸¦ ÅëÇØ ¾Ë¾Æº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import com.jeid.BaseObject; import com.jeid.MyLevel; public class EnumTester extends BaseObject { private static long start = System.currentTimeMillis(); public static void main(String[] args) { try { test(); enum1(); } catch (Exception e) { e.printStackTrace(); } printEllapseTime(); } private static void test() throws Exception { byte[] b = new byte[0]; System.out.println(b.length); } private static void enum1() { //enum TestEnum { A, B }; //enum cannot be local!!! for(MyVO.TestEnum te: MyVO.TestEnum.values()){ System.out.println("Allow TestEnum value : " + te); } System.out.println("---------------------------------------"); MyVO vo = new MyVO(); vo.setName("enum1"); vo.setLevel(MyLevel.A); System.out.println(vo); System.out.println("isA = " + vo.isA() + ", isGradeA = " + vo.isLevelA()+ ", isValueOfA = " + vo.isValueOfA()); System.out.println("getLevelInKorean = " + vo.getLevelInKorean()); } private static void printEllapseTime() { System.out.println("==> ellapseTime is " + (System.currentTimeMillis() - start) + " ms."); } } package com.jeid.tiger; import com.jeid.BaseObject; import com.jeid.MyLevel; public class MyVO extends BaseObject { enum TestEnum { A, B }; // this is same public static final private int id; private String name; private MyLevel grade; // private List<T> list; public MyLevel getLevel() { return grade; } public void setLevel(MyLevel grade) { this.grade = grade; } public boolean isA() { return "A".equals(this.grade); } public boolean isValueOfA() { return MyLevel.valueOf("A").equals(grade); } public boolean isLevelA() { return MyLevel.A.equals(this.grade); } //A,B,C..´ë½Å 0,1,2... µµ µ¿ÀÏÇÔ. public String getLevelInKorean() { switch(this.grade){ case A: return "¼ö"; case B: return "¿ì"; case C: return "¹Ì"; case D: return "¾ç"; case E: return "°¡"; default: return "¾øÀ½"; } } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.7 target=_blank name=s-8.7></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.7</A> </SPAN>Using java.util.EnumMap <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.7" target=_blank>#</A></H3> <DIV>java.util.Map°ú µ¿ÀÏÇϳª key°¡ enum typeÀ̾î ÇÑ´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.EnumMap; public class EnumMapTester { private enum MyEnum { A, B, C }; // this is same the static final.. public static void main(String[] args) { MyEnum[] enums = MyEnum.values(); System.out.println("MyEnum is " + enums[0] + ", " + enums[1] + ", " + enums[2]); EnumMap<MyEnum, String> em = new EnumMap<MyEnum, String>(MyEnum.class); em.put(MyEnum.A, "¼ö"); em.put(MyEnum.B, "¿ì"); em.put(MyEnum.C, "¹Ì"); em.put(MyEnum.B, "°¡"); //key Áߺ¹Àº HashMap°ú µ¿ÀÏÇÏ°Ô overwriteÀÓ. for (MyEnum myEnum : MyEnum.values()) { System.out.println(myEnum + " => " + em.get(myEnum)); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.8 target=_blank name=s-8.8></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.8</A> </SPAN>Using java.util.EnumSet <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.8" target=_blank>#</A></H3> <DIV>java.util.Set°ú µ¿ÀÏÇϳª value°¡ enum typeÀ̾î ÇÑ´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.EnumSet; public class EnumSetTester { private enum MyEnum { A, B, C, a, b, c }; // this is same the static final.. public static void main(String[] args) { MyEnum[] enums = MyEnum.values(); System.out.println("MyEnum is " + enums[0] + ", " + enums[1] + ", " + enums[2]); EnumSet<MyEnum> es1 = EnumSet.of(MyEnum.A, MyEnum.B, MyEnum.C); EnumSet<MyEnum> es2 = EnumSet.of(MyEnum.a, MyEnum.b, MyEnum.c); EnumSet<MyEnum> es3 = EnumSet.range(MyEnum.a, MyEnum.c); if (es2.equals(es3)) { System.out.println("e2 is same e3."); } for (MyEnum myEnum : MyEnum.values()) { System.out.println(myEnum + " contains => " + es1.contains(myEnum)); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.9 target=_blank name=s-8.9></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.9</A> </SPAN>Convert Primitives to Wrapper Types <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.9" target=_blank>#</A></H3> <DIV>int, short, char, long, doubleµî primitive¿Í À̵éÀÇ Object Wrapper ÀÎ Integer, Shrt, Charµî °£ÀÇ converting¿¡ ÀÖ¾î ÀÚµ¿À¸·Î ó¸®ÇØÁÖ´Â boxing°ú unboxingÀÌ Áö¿ø µÊ¿¡ µû¶ó type¿¡ ´ëÇÑ À¯¿¬ÇÑ Ã³¸®°¡ °¡´ÉÇØÁ³´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class AutoBoxingTester { public static void main(String[] args) { int i = 0; Integer ii = i; // boxing. JDK 1.4¿¡¼´Â incompatible type error°¡ ¹ß»ý Çß¾úÀ¸³ª Tiger¿¡¼´Â ±¦Âú´Ù. int j = ii; // unboxing for (ii = 0; ii < 5; ii++) { // IntegerÀε¥µµ ++ ¿¬»êÀÚ Áö¿ø. } i = 129; ii = 129; if (ii == i) { System.out.println("i is same ii."); } // -128 ~ 127 »çÀÌÀÇ ¼ö´Â unboxingÀÌ µÇ¾î == ¿¬»êÀÌ Çã¿ëµÇÁö¸¸, // ±× ¹üÀ§ ¿ÜÀÇ °æ¿ì Integer·Î boxingµÈ »óŹǷΠequals¸¦ ÀÌ¿ëÇØ¾ßÇÔ. // ÀÌ´Â ¹ö±×°¡ ¹ß»ýÇßÀ» °æ¿ì ã±â ½±Áö ¾ÊÀº ´ÜÁ¡µµ ³»Æ÷Çϰí ÀÖ´Ù.!! checkIntegerSame(127, 127); // same checkIntegerSame(128, 128); // Not same checkIntegerEquals(128, 128); // equals checkIntegerSame(-128, -128); // same checkIntegerSame(-129, -129); // Not same checkIntegerEquals(-129, -129); // equals System.out.println("--------------------------------------------"); Boolean arriving = false; Boolean late = true; String ret = arriving ? (late ? "µµÂøÇßÁö¸¸ ´Ê¾ú³×¿ä." : "Á¦½Ã°£¿¡ Àß µµÂøÇß±º¿ä.") : (late ? "µµÂøµµ ¸øÇÏ°í ´Ê¾ú±º¿ä." : "µµÂøÀº ¸øÇßÁö¸¸ ´ÊÁø ¾Ê¾Ò±º¿ä."); System.out.println(ret); StringBuilder sb = new StringBuilder(); sb.append("appended String"); String str = "just String"; boolean mutable = true; CharSequence chSeq = mutable ? sb : str; System.out.println(chSeq); } private static void checkIntegerSame(Integer ii, Integer jj) { if (ii == jj) { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is same ii."); } else { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is NOT same ii!!"); } } private static void checkIntegerEquals(Integer ii, Integer jj) { if (ii.equals(jj)) { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is equals ii."); } else { System.out.println("ii = " + ii + ", jj = " + jj + " ==> jj is NOT equals ii!!"); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.10 target=_blank name=s-8.10></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.10</A> </SPAN>Method Overload resolution in AutoBoxing <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.10" target=_blank>#</A></H3> <DIV>int°¡ 127À» ÃʰúÇÒ °æ¿ì boxingÀÌ ÀÌ·ç¾î Áúµí ÇÏÁö¸¸, method overload¿¡ À־ boxingÀÌ ÀÌ·ç¾î ÁöÁö ¾Ê¾Æ JDK1.4¿Í µ¿ÀÏÇÑ °á°ú¸¦ ¾ò´Â´Ù. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class OverloadTester { public static void main(String[] args) { double d = 10; Integer ii = new Integer(10); doSomething(10); doSomething(1000); doSomething(ii); doSomething(d); } private static void doSomething(Integer ii) { System.out.println("This is doSomething(Integer)"); } private static void doSomething(double d) { System.out.println("This is doSomething(double)"); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.11 target=_blank name=s-8.11></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.11</A> </SPAN>°¡º¯ÀûÀÎ argument °³¼ö <STRONG>...</STRONG> <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.11" target=_blank>#</A></H3> <DIV>Àμö°¡ °¡º¯ÀûÀÏ °æ¿ì ÀμöÀÇ °³¼ö°¡ ¾ø´Â°Í ºÎÅÍ ´Ù¼ö°³±îÁö ¸ðµÎ Áö¿ø. ¿¹Á¦·Î »ìÆìº¸ÀÚ.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class VarArgsTester { public static void main(String[] args) { setNumbers(1, 2); setNumbers(1, 2, 3, 4); setNumbers(1); // setNumbers(); //ÇØ´ç µÇ´Â method°¡ ¾ø¾î compile error!! System.out.println("=============================================="); setNumbers2(1, 2, 3, 4); setNumbers2(1); setNumbers2(); } // this is same setNumbers(int first, int[] others) private static void setNumbers(int first, int... others) { System.out.println("-----------setNumbers()----------- : " + first); for (int i : others) { System.out.println("i = " + i); } } // this is same setNumbers(int[] others) private static void setNumbers2(int... others) { System.out.println("-----------setNumbers2()----------- : " + (others != null && others.length > 0 ? others[0] : "null")); for (int i : others) { System.out.println("i = " + i); } } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.12 target=_blank name=s-8.12></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.12</A> </SPAN>The Three Standard Annotation <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.12" target=_blank>#</A></H3> <DIV>@Override - sign the override from superclass.</DIV><BR> <DIV><PRE class=wiki>//Á¤»óÀûÀÎ »ç¿ë @Override public int hashCode(){ return toString().hashCode(); } //½ºÆç¸µÀÌ Æ²·Á compile error!! @Override public int hasCode(){ //misspelled => method does not override a method from its superclass error!! return toString().hashCode(); }</PRE></DIV><BR> <DIV>@Deprecated deprecated ÁÖ¼®°ú µ¿ÀÏÇϳª ºÎ¸ðÀÇ method°¡ deprecatedµÇ¸é ÀÚ½ÄÀÇ method¸¦ »ç¿ëÇØµµ deprecated·Î ³ª¿Â´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; public class AnnotationDeprecateTester { public static void main(String[] args){ DeprecatedClass dep = new DeprecatedTester(); dep.doSomething(10); //deprecated } } class DeprecatedClass { @Deprecated public void doSomething(int ii){ //deprecated System.out.println("This is DeprecatedClass's doSomething(int)"); } public void doSomethingElse(int ii){ System.out.println("This is DeprecatedClass's doSomethingElse(int)"); } } class DeprecatedTester extends DeprecatedClass { @Override public void doSomething(int ii){ System.out.println("This is DeprecatedTester's doSomething(int)"); } }</PRE></DIV><BR> <DIV>@SuppressWarnings SuppressWarnings¿¡ ÀÎÀÚ´Â String[] typeÀ¸·Î ¿©·¯°³¸¦ ¹è¿ÇüÅ·Π¾µ¼ö ÀÖ´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.util.ArrayList; import java.util.List; public class AnnotationSuppressWarningsTester { @SuppressWarnings({"unchecked", "fallthrough"} ) private static void test1(){ List list = new ArrayList(); list.add("aaaaaa"); } @SuppressWarnings("unchecked") private static void test2(){ List list = new ArrayList(); list.add("aaaaaa"); } //warningÀÌ ¾ø´Â ¼Ò½º. private static void test3(){ List<String> list = new ArrayList<String>(); list.add("aaaaaa"); } }</PRE></DIV></DIV> <DIV> <H3><A class=con_link id=s-8.13 target=_blank name=s-8.13></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>8.13</A> </SPAN>Creating Custom Annotation Types <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-8.13" target=_blank>#</A></H3> <DIV>³ª¸¸ÀÇ annotationÀ» Á¤ÀÇÇÒ ¼ö Àִµ¥ Ű¿öµå´Â @interfaceÀÌ °¢ methodÁ¤Àǰ¡ member¶ó°í º¸¸é µÈ´Ù. °£´ÜÇÑ ¿¹¸¦ º¸¸é ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>package com.jeid.tiger; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Target( { ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String columnName(); String methodName() default ""; } //»ç¿ëÇÏ´Â ÂÊ.. public class AnnotationTester { @MyAnnotation(columnName = "test", methodName = "setTest") private String test; @MyAnnotation(columnName = "grpid") public String grpid; .... } //À§ÀÇ test ¸â¹öÀÇ °æ¿ì ´ÙÀ½°ú °°ÀÌ Á¢±Ù °¡´ÉÇÏ´Ù. Field testField = cls.getDeclaredField("test"); if (testField.isAnnotationPresent(MyAnnotation.class)) { Annotatioin anno = testField.getAnnotation(MyAnnotation.class); System.out.println(anno.columnName() + ", method = " + anno.methodName()); }</PRE></DIV></DIV> <DIV> <H2><A class=con_link id=s-9 target=_blank name=s-9></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>9</FONT></A> </SPAN>The for/in Statement <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-9.1 target=_blank name=s-9.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>9.1</A> </SPAN>for/in ÀÇ ÀÚÁÖ »ç¿ëµÇ´Â ÇüÅ <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-9.1" target=_blank>#</A></H3> <DIV>for/inÀº ¹«¾ùº¸´Ù ´Ù¾çÇÑ À¯ÇüÀÇ ¿¹Á¦¸¦ º¸´Â°ÍÀÌ Á¦ÀÏ ºü¸¦°ÍÀÌ´Ù. Çüź° »ç¿ë ¿¹Á¦¸¦ »ìÆìº¸¸é ´ÙÀ½°ú °°´Ù.</DIV><BR> <DIV><PRE class=wiki>//1. °¡Àå ´Ü¼øÇÑ ÇüÅÂÀÎ ¹è¿(array) String[] strs = { "aaa", "bbb", "ccc" }; for (String str : strs) { System.out.println(str); } //2. List by using Iterator List<Number> lstNum = new LinkedList<Number>(); lstNum.add(1); lstNum.add(1.2); for (Iterator<Number> iter = lstNum.iterator(); iter.hasNext();) { Number num = iter.next(); System.out.println("num = " + num); } //3. List¸¦ ¹Ù·Î »ç¿ë List<String> lst = new LinkedList<String>(); lst.add("aaaaa"); lst.add("bbbbb"); lst.add("ccccc"); lst.add("ddddd"); for (String str : lst) { System.out.println("str = " + str); } // 4. List of List List[] lists = { lst, lst }; for (List<String> l : lists) { for (String str : l) { System.out.println("str = " + str); } }</PRE></DIV></DIV> <DIV> <H2><A class=con_link id=s-10 target=_blank name=s-10></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>10</FONT></A> </SPAN>Static Import <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10" target=_blank><FONT size=3>#</FONT></A></H2></DIV> <DIV> <H3><A class=con_link id=s-10.1 target=_blank name=s-10.1></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank>10.1</A> </SPAN>static member/method import <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-10.1" target=_blank>#</A></H3> <DIV>Tiger¿¡¼´Â ´Ù¸¥ Ŭ·¡½ºÀÇ member¿Í method¸¦ import ÇÒ¼ö ÀÖ´Ù. ´Ü, static ÀÏ °æ¿ì¸¸ °¡´ÉÇÏ´Ù.</DIV><BR> <DIV><PRE class=wiki>//¿¹¸¦ µé¾î System.out.println() À̶ó´Â °ÍÀ» »ç¿ëÇϱâ À§Çؼ´Â ´ÙÀ½ÀÇ import ¹®ÀÌ ÇÊ¿äÇÏ´Ù. import java.lang.System; //¹°·Ð java.lang À̱⿡ import ¹®ÀÌ ÇÊ¿ä¾øÁö¸¸ ¿¹¸¦ µéÀÚ¸é ±×·¸´Ù´Â °ÍÀÌ´Ù.&^^ //Ç㳪, Tiger¿¡¼´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ¼ö ÀÖ´Ù. import static java.lang.System.out; ... out.println(...); // method¸¦ import ÇÑ´Ù¸é.. import static java.lang.System.out.println; ... println(...);</PRE></DIV></DIV> <DIV> <H2><A class=con_link id=s-11 target=_blank name=s-11></A><SPAN class=tocnumber><A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#toc" target=_blank><FONT size=3>11</FONT></A> </SPAN>References <A class=con_link href="http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost#s-11" target=_blank><FONT size=3>#</FONT></A></H2> <UL> <LI><A class=con_link href="http://java.sun.com/j2se/1.4.2/docs/index.html" target=_blank>http://java.sun.com/j2se/1.4.2/docs/index.html</A> <LI><A class=con_link href="http://java.sun.com/j2se/1.5.0/docs/index.html" target=_blank>http://java.sun.com/j2se/1.5.0/docs/index.html</A> <LI>SUNÀÇ JLS <LI><A class=con_link href="http://java.sun.com/docs/books/jls/html/index.html" target=_blank>http://java.sun.com/docs/books/jls/html/index.html</A> <LI>Java Çٽɿø¸® - ¸¶¿¡¹Ù½Ã °¡Áî¾ß Àú - ¿µÁø´åÄÄ <LI>Java 1.5 Tiger - Brett McLaughlin Àú - O'Reilly </LI></UL><BR>from: <A href="http://www.twelo.com/96">http://www.twelo.com/96</A></DIV>
÷ºÎÆÄÀÏ
ºñ¹Ð±Û
ºñ¹Ð±Û
°ßÀû°è»êÇϱâ
ÀÛ¾÷ÀÇ·Ú
°ßÀû¹®ÀÇ
°øÁö»çÇ×