Ã¥¼Ò°³
"ÀÚ¹Ù ÄÚµå ÀÛ¼ºÀÇ ÇÔÁ¤, Á¤Àû ºÐ¼® µµ±¸·Î ÇØ°áÇ϶ó
ÀÌ Ã¥Àº ÀÚ¹Ù °³¹ß¿¡¼ ¹Ýº¹ÀûÀ¸·Î ¹ß»ýÇÏ´Â 100°¡Áö ½Ç¼ö¸¦ ¸ð¾Æ ´õ ³ªÀº Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï µ½´Â ½ÇÀü °¡À̵å´Ù. ´Ü¼øÇÑ ÄÚµå ¸®ºä¸¦ ³Ñ¾î, ½ÇÁ¦ »ç·Ê¿Í ÄÚµå ¿¹Á¦¸¦ ÅëÇØ Ç¥Çö½Ä, ÇÁ·Î±×·¥ ±¸Á¶, ¼ýÀÚ Ã³¸®, ¿¹¿Ü ó¸®, À¯´Ö Å×½ºÆ® µî¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ ¹®Á¦ÀÇ ¿øÀΰú ÇØ°áÃ¥À» ±íÀÌ ÀÖ°Ô Å½±¸ÇÑ´Ù. °¢ ÀåÀº µ¶¸³ÀûÀ¸·Î ±¸¼ºµÇ¾î ÀÖ¾î °ü½É ÀÖ´Â ÁÖÁ¦º°·Î ÀÚÀ¯·Ó°Ô ÇнÀÇÒ ¼ö ÀÖÀ¸¸ç, Ãʺ¸ÀÚºÎÅÍ ¼÷·ÃÀÚ±îÁö ¸ðµç ¼öÁØÀÇ ÀÚ¹Ù °³¹ßÀÚ¿¡°Ô À¯¿ëÇÏ´Ù.
ÀÌ Ã¥À» ÅëÇØ ÀÚÁÖ ¹ß»ýÇÏ´Â ¿À·ù¸¦ ÇÇÇÏ°í ´õ °ß°íÇÏ°í ³ôÀº Ç°ÁúÀÇ Äڵ带 ÀÛ¼ºÇÏ¸ç ¼ºÀåÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ Ã¥ÀÌ ¿©·¯ºÐÀÇ °³¹ß ¿©Á¤¿¡ µçµçÇÑ ±æÀâÀÌ°¡ µÇ±æ ¹Ù¶õ´Ù.
´Ü¼øÇÑ ½Ç¼ö°¡ Å« ¹ö±×·Î À̾îÁø´Ù!
½Ç¹«¿¡¼ ¹Ù·Î Àû¿ëÇÏ´Â 100°¡Áö ÀÚ¹Ù ±â¼ú
´ëºÎºÐÀÇ °³¹ßÀÚ´Â ÀÛÀº ½Ç¼ö Çϳª°¡ ¿¹»óÄ¡ ¸øÇÑ ¹ö±×·Î À̾îÁö´Â °æÇèÀ» Á¾Á¾ ÇÑ´Ù. ƯÈ÷ °´Ã¼¸¦ ºñ±³ÇÒ ¶§ equals()¿Í hashCode()¸¦ ¿Ã¹Ù¸£°Ô ±¸ÇöÇÏÁö ¾Ê¾Æ ¹ß»ýÇÏ´Â ¹®Á¦´Â ÈçÈ÷ °£°úµÇÁö¸¸, ½ÇÁ¦·Î´Â ½É°¢ÇÑ ¿À·ù¸¦ ÃÊ·¡ÇÑ´Ù. ¶ÇÇÑ Stream API¸¦ È°¿ëÇÑ Äڵ尡 ¿ì¾ÆÇØ º¸ÀÌÁö¸¸, ³»ºÎ µ¿ÀÛÀ» ±íÀÌ ÀÌÇØÇÏÁö ¾ÊÀ¸¸é ¼º´É ÀúÇϳª À¯Áöº¸¼öÀÇ ¾î·Á¿òÀ» °Þ°Ô µÈ´Ù.
ÀÌ Ã¥Àº ½Ç¹«¿¡¼ ¸¶ÁÖÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ ¹®Á¦¸¦ ±íÀÌ ÀÖ°Ô Å½±¸Çϸç, ´Ü¼øÇÑ °³³ä ¼³¸íÀÌ ¾Æ´Ï¶ó ½ÇÀü¿¡¼ ¹ß»ýÇÏ´Â ¹ö±×¿Í ±× ÇØ°á ¹æ¹ýÀ» Áß½ÉÀ¸·Î ±¸¼ºµÇ¾ú´Ù. ¿¹¸¦ µé¾î, ¸¹Àº °³¹ßÀÚ°¡ NullPointerExceptionÀ» ÇÇÇϱâ À§ÇØ ½À°üÀûÀ¸·Î null üũ¸¦ ÇÏÁö¸¸, º¸´Ù ¾ÈÀüÇÏ°í È¿°úÀûÀÎ ¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù. ¶ÇÇÑ ¸ÖƼ½º·¹µå ȯ°æ¿¡¼ µ¿½Ã¼º ¹®Á¦¸¦ °£°úÇϸé ÀǵµÇÏÁö ¾ÊÀº µ¿ÀÛÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ·¯ÇÑ ¹®Á¦¸¦ ¹æÁöÇϱâ À§ÇÑ ½ÇÁúÀûÀÎ ÆÐÅÏ°ú ±â¹ýµµ ÇÔ²² ´Ù·é´Ù. ÀÌ Ã¥À» ÅëÇØ ´Ü¼øÈ÷ ½Ç¼ö¸¦ ÁÙÀÌ´Â °ÍÀ» ³Ñ¾î, º¸´Ù ¾ÈÀüÇÏ°í °ß°íÇÑ Äڵ带 ÀÛ¼ºÇÏ´Â ¹ýÀ» ¹è¿ï ¼ö ÀÖ´Ù. ½Ç¹«¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦¸¦ ¹Ì¸® ¿¹ÃøÇÏ°í ´ëÀÀÇÏ´Â ´É·ÂÀ» Å°¿ö ÀÚ¹Ù °³¹ßÀڷμ ÇÑ ´Ü°è ´õ ³ª¾Æ°¡±æ ¹Ù¶õ´Ù.
´©±¸¸¦ À§ÇÑ Ã¥Àΰ¡¿ä?
-Ãʱ޺ÎÅÍ °í±Þ±îÁö ÀÚ¹Ù °³¹ß °æÇèÀÌ ÀÖ´Â ¸ðµç ÇÁ·Î±×·¡¸Ó
ÀÌ Ã¥¿¡¼ ´Ù·ç´Â ÁÖ¿ä ³»¿ëÀº ¹«¾ùÀΰ¡¿ä?
-°ß°íÇÏ°í ¾ÈÀüÇÑ ÀÚ¹Ù ÄÚµå ÀÛ¼º¹ý
-½Ç¹«¿¡¼ ÈçÈ÷ ¹ß»ýÇÏ´Â ½Ç¼ö¸¦ ¿¹ÃøÇÏ°í ÁÙÀÌ´Â ¹ý
-µð¹ö±ë°ú Å×½ºÆ® ½Ã°£À» Àý¾àÇÏ´Â ¹æ¹ý
-Á¤Àû ºÐ¼® µµ±¸ È°¿ë°ú ¿ÀŽ(false reports) ¼ö ÁÙÀ̱â
-»ç¿ëÀÚ Á¤ÀÇ Ç÷¯±×ÀÎÀ¸·Î Á¤Àû ºÐ¼® µµ±¸ È®ÀåÇϱâ"
ÀúÀÚ¼Ò°³
¹ÀÇî Áö»ç¿¡ ÀÖ´Â Á¬ºê·¹ÀÎÀÇ Å×Å©´ÏÄà ¸®´õÀ̸ç IntelliJ IDEAÀÇ ÀÚ¹Ù ¾ð¾î Áö¿ø ÆÀ¿¡ ¼Ò¼ÓµÇ¾î ÀÖ´Ù. ±×ÀÇ ÁÖ¿ä °ü½É»ç´Â Á¤Àû ºÐ¼®°ú ÄÚµå ¸®ÆÑÅ͸µÀÌ´Ù. IntelliJ IDEA¿¡ ³»ÀåµÈ Á¤Àû ÄÚµå ºÐ¼®±â¸¦ ¼³°èÇÏ°í °³¹ßÇßÀ¸¸ç ÀÚ¹Ù ¹ÙÀÌÆ®ÄÚµå Á¤Àû ºÐ¼® µµ±¸ÀÎ FindBugs¿¡µµ ±â¿©ÇÑ ¹Ù ÀÖ´Ù. 15³â°£ ÀÚ¹Ù·Î »ó¾÷¿ë ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇØ¿Ô°í Á¤Àû ºÐ¼® ºÐ¾ß¿¡¼¸¸ 10³â ÀÌ»óÀÇ °æÇèÀ» º¸À¯ÇÏ°í ÀÖ´Ù. ¶ÇÇÑ 2006³â¿¡ ÄÄÇ»ÅÍ °úÇÐ ¹Ú»ç ÇÐÀ§¸¦ ÃëµæÇßÀ¸¸ç, 2020³â¿¡ Àڹ٠èÇǾð Īȣ¸¦ ȹµæÇß´Ù.
¸ñÂ÷
CHAPTER 1 ÄÚµå Ç°Áú °ü¸®
ÄÚµå ¸®ºä¿Í Æä¾î ÇÁ·Î±×·¡¹Ö
ÄÚµå ½ºÅ¸ÀÏ
Á¤Àû ºÐ¼®
ÀÚµ¿ÈµÈ Å×½ºÆ®
¹ÂÅ×ÀÌ¼Ç Ä¿¹ö¸®Áö
µ¿Àû ºÐ¼®
ÄÚµå ¾î¼³¼Ç
Á¤¸®
CHAPTER 2 Ç¥Çö½Ä
½Ç¼ö 001 ¼ýÀÚ ¿¬»êÀÚ ¿ì¼±¼øÀ§ ¿ÀÇØ
½Ç¼ö 002 Á¶°Ç½ÄÀÇ °ýÈ£ ´©¶ô
½Ç¼ö 003 µ¡¼ÀÀÌ ¾Æ´Ñ °áÇÕÀ¸·Î ÀÛµ¿
½Ç¼ö 004 ¸ÖƼ¶óÀÎ ¹®ÀÚ¿ ¸®ÅÍ·²
½Ç¼ö 005 ´ÜÇ× µ¡¼À ¿¬»êÀÚ
½Ç¼ö 006 Á¶°Ç Ç¥Çö½ÄÀÇ ¹¬½ÃÀû ŸÀÔ º¯È¯
½Ç¼ö 007 ºñ´Ü¶ô ³í¸® ¿¬»êÀÚ »ç¿ë
½Ç¼ö 008 &&¿Í || È¥µ¿
½Ç¼ö 009 À߸øµÈ °¡º¯ Àμö È£Ãâ
½Ç¼ö 010 Á¶°Ç ¿¬»êÀÚ¿Í °¡º¯ Àμö È£Ãâ
½Ç¼ö 011 ¹Ýȯ°ª ¹«½Ã
½Ç¼ö 012 »õ·Ó°Ô »ý¼ºµÈ °´Ã¼¸¦ »ç¿ëÇÏÁö ¾ÊÀ½
½Ç¼ö 013 À߸øµÈ ¸Þ¼µå¸¦ ÂüÁ¶ÇÏ´Â ¹ÙÀεù
½Ç¼ö 014 ¸Þ¼µå ÂüÁ¶ ½Ã À߸øµÈ ¸Þ¼µå ÁöÁ¤
Á¤¸®
CHAPTER 3 ÇÁ·Î±×·¥ ±¸Á¶
½Ç¼ö 015 À߸øµÈ if-else ¿¬¼â
½Ç¼ö 016 ÀÌÀü Á¶°ÇÀÇ ´ÙÀ½ Á¶°Ç Áö¹è
½Ç¼ö 017 switch ¹® Åë°ú ½Ç¼ö
½Ç¼ö 018 ±¸Çü for ·çÇÁ ¿À·ù
½Ç¼ö 019 ·çÇÁ º¯¼ö ¹Ì»ç¿ë
½Ç¼ö 020 À߸øµÈ ·çÇÁ ¹æÇâ
½Ç¼ö 021 ·çÇÁ ¿À¹öÇ÷Î
½Ç¼ö 022 ¸èµî ·çÇÁ º»¹®
½Ç¼ö 023 À߸øµÈ ÃʱâÈ ¼ø¼
½Ç¼ö 024 ´©¶ôµÈ ½´ÆÛŬ·¡½º ¸Þ¼µå È£Ãâ
½Ç¼ö 025 ¿ì¹ßÀûÀÎ Á¤Àû ÇÊµå ¼±¾ð
Á¤¸®
CHAPTER 4 ¼ýÀÚ
½Ç¼ö 026 ¿ì¹ßÀûÀÎ 8Áø¼ö ¸®ÅÍ·² »ç¿ë
½Ç¼ö 027 ¼öÄ¡ ¿À¹öÇ÷Î
½Ç¼ö 028 Á¤¼ö ³ª´°¼À Áß ¹Ý¿Ã¸²
½Ç¼ö 029 Integer.MIN_VALUEÀÇ Àý´ñ°ª
½Ç¼ö 030 Ȧ¼ö °Ë»ç¿Í À½¼ö
½Ç¼ö 031 È®ÀåÀ¸·Î ÀÎÇÑ Á¤¹Ðµµ ¼Õ½Ç
½Ç¼ö 032 ¹«Á¶°ÇÀûÀÎ Ãà¼Ò º¯È¯
½Ç¼ö 033 16Áø¼ö À½¼ö
½Ç¼ö 034 º¹ÇÕ ÇÒ´çÀÇ ¹¬½ÃÀû ŸÀÔ º¯È¯
½Ç¼ö 035 ³ª´°¼À°ú º¹ÇÕ ÇÒ´ç
½Ç¼ö 036 short ŸÀÔ
½Ç¼ö 037 ºñÆ® Á¶ÀÛ ¾Ë°í¸®Áò
½Ç¼ö 038 À½¼ö ¹ÙÀÌÆ®
½Ç¼ö 039 À߸øµÈ Ŭ·¥ÇÎ ¼ø¼
½Ç¼ö 040 Ư¼öÇÑ ºÎµ¿¼Ò¼öÁ¡ ¼ö
Á¤¸®
CHAPTER 5 ÀϹÝÀûÀÎ ¿¹¿Ü
½Ç¼ö 041 NullPointerException
½Ç¼ö 042 IndexOutOfBoundsException
½Ç¼ö 043 ClassCastException
½Ç¼ö 044 StackOverflowError
Á¤¸®
CHAPTER 6 ¹®ÀÚ¿
½Ç¼ö 045 char °ªÀ» ¹®ÀÚ·Î °£ÁÖ
½Ç¼ö 046 ´ë¼Ò¹®ÀÚ º¯È¯
½Ç¼ö 047 ±âº» ·ÎÄÉÀÏ¿¡¼ String.format »ç¿ë
½Ç¼ö 048 Æ÷¸Ë Àμö ºÒÀÏÄ¡
½Ç¼ö 049 Á¤±Ô Ç¥Çö½Ä ´ë½Å ÀÏ¹Ý ¹®ÀÚ¿ »ç¿ë
½Ç¼ö 050 replaceAll ¿À¿ë
½Ç¼ö 051 À̽ºÄÉÀÌÇÁ ½ÃÄö½º ¿À¿ë
½Ç¼ö 052 ¹®ÀÚ¿ÀÇ ´ë¼Ò¹®ÀÚ ºñ±³
½Ç¼ö 053 indexOf ¸Þ¼µå °á°ú ¹ÌÈ®ÀÎ ½Ç¼ö 054 indexOf Àμö ¿À¿ë
Á¤¸®
CHAPTER 7 °´Ã¼ ºñ±³
½Ç¼ö 055 equals ¸Þ¼µå ´ë½Å ÂüÁ¶ µ¿µî¼º ºñ±³
½Ç¼ö 056 equals()°¡ ³»¿ëÀ» ºñ±³ÇÑ´Ù°í °£ÁÖÇÔ
½Ç¼ö 057 URL.equals() »ç¿ë
½Ç¼ö 058 ½ºÄÉÀÏÀÌ ´Ù¸¥ BigDecimal ºñ±³
½Ç¼ö 059 °ü·Ã ¾ø´Â ŸÀÔ¿¡ equals() »ç¿ë
½Ç¼ö 060 À߸øµÈ equals() ±¸Çö
½Ç¼ö 061 ¹è¿ Çʵå hashCode()
½Ç¼ö 062 equals()¿Í hashCode() ºÒÀÏÄ¡
½Ç¼ö 063 ƯÁ¤ ¹Ýȯ°ª¿¡ ÀÇÁ¸ÇÏ´Â compare()
½Ç¼ö 064 µ¿ÀÏÇÑ °´Ã¼¸¦ ºñ±³ÇÒ ¶§ 0À» ¹ÝȯÇÏÁö ¾ÊÀ½
½Ç¼ö 065 »¬¼ÀÀ» ÀÌ¿ëÇÑ ¼ýÀÚ ºñ±³
½Ç¼ö 066 ºñ±³ ¸Þ¼µå°¡ ¹ÝȯÇÏ´Â NaN °ª ¹«½Ã
½Ç¼ö 067 ºñ±³ ¸Þ¼µå¿¡¼ °´Ã¼¸¦ Å° ½ÃÄö½º·Î Ç¥ÇöÇÏÁö ¸øÇÔ
½Ç¼ö 068 ºñ±³ÀÚÀÇ ³¼ö ¹Ýȯ
Á¤¸®
CHAPTER 8 Ä÷º¼Ç°ú ¸Ê
½Ç¼ö 069 °ü·Ã ¾ø´Â °´Ã¼ ŸÀÔ °Ë»ö
½Ç¼ö 070 ´ÜÀÏ °´Ã¼¿Í Ä÷º¼Ç È¥ÇÕ
½Ç¼ö 071 nullÀ» Çã¿ëÇÏÁö ¾Ê´Â Ä÷º¼Ç¿¡¼ nullÀ» °Ë»öÇÔ
½Ç¼ö 072 ¸Ê¿¡¼ null °ª »ç¿ë
½Ç¼ö 073 ¼öÁ¤ ºÒ°¡ Ä÷º¼ÇÀÇ ¼öÁ¤ ½Ãµµ
½Ç¼ö 074 °¡º¯ °´Ã¼¸¦ Å°·Î »ç¿ë
½Ç¼ö 075 HashMap ¹× HashSetÀÇ µîÀå ¼ø¼ ÀÇÁ¸
½Ç¼ö 076 ¼øȸ µµÁß ¼öÁ¤Çϱâ
½Ç¼ö 077 List.remove() ¿À¹ö·Îµå ¿À¿ë
½Ç¼ö 078 List.remove() Á÷ÈÄ ¿ø¼Ò »ý·«
½Ç¼ö 079 Collection.removeIf() ³»ºÎÀÇ Ä÷º¼Ç Á¶È¸
½Ç¼ö 080 Map.computeIfAbsent()ÀÇ µ¿½Ã ¼öÁ¤
½Ç¼ö 081 ÀÌÅÍ·¹ÀÌÅÍ °è¾à À§¹Ý
Á¤¸®
CHAPTER 9 ¶óÀ̺귯¸® ¸Þ¼µå
½Ç¼ö 082 StringBuilder »ý¼ºÀÚ¿¡ char Àü´Þ
½Ç¼ö 083 ½ºÆ®¸² API üÀο¡¼ ºÎ¼ö È¿°ú¸¦ ÀÏÀ¸Å´
½Ç¼ö 084 ½ºÆ®¸²À» µÎ ¹ø ¼Òºñ
½Ç¼ö 085 null »ç¿ë ºÒ°¡ ½ºÆ®¸²¿¡¼ null °ª »ç¿ë
½Ç¼ö 086 ½ºÆ®¸² API ¿¬»ê °è¾à À§¹Ý
½Ç¼ö 087 instanceof ´ë½Å getClass()¸¦ »ç¿ë
½Ç¼ö 088 ¿°ÅÇü, ¾î³ëÅ×À̼Ç, Ŭ·¡½º¿¡¼ getClass()¸¦ »ç¿ë
½Ç¼ö 089 ¹®ÀÚ¿À» ºÒ¸®¾ðÀ¸·Î À߸ø º¯È¯
½Ç¼ö 090 À߸øµÈ ³¯Â¥ Æ÷¸Ë
½Ç¼ö 091 ¾àÇÑ ÂüÁ¶, ºÎµå·¯¿î ÂüÁ¶ÀÇ ¿ì¹ßÀû ¹«È¿È
½Ç¼ö 092 ¼¼»óÀÌ ¾ÈÁ¤ÀûÀ̶ó´Â °¡Á¤
½Ç¼ö 093 µ¿½Ã ¾÷µ¥ÀÌÆ® µ¥ÀÌÅÍ ±¸Á¶¿¡ ´ëÇÑ ºñ¿øÀÚÀû Á¢±Ù
Á¤¸®
CHAPTER 10 À¯´Ö Å×½ºÆ®
½Ç¼ö 094 assert ¹®ÀÇ ºÎ¼ö È¿°ú
½Ç¼ö 095 À߸øµÈ assertion ¸Þ¼µå È£Ãâ
½Ç¼ö 096 À߸øµÈ ¿¹¿Ü Å×½ºÆ®
½Ç¼ö 097 Å×½ºÆ® ¸Þ¼µå Á¶±â Á¾·á
½Ç¼ö 098 À¯´Ö Å×½ºÆ®¿¡¼ AssertionError ¹«½ÃÇϱâ
½Ç¼ö 099 assertNotEquals()·Î µ¿µî¼º ºñ±³Çϱâ
½Ç¼ö 100 ¾ç½ÄÀÌ À߸øµÈ Å×½ºÆ® ¸Þ¼µå
Á¤¸®
APPENDIX A Á¤Àû ºÐ¼® ¾î³ëÅ×À̼Ç
¾î³ëÅ×ÀÌ¼Ç ÆÐÅ°Áö
¾î³ëÅ×ÀÌ¼Ç Á¾·ù
APPENDIX B Á¤Àû ºÐ¼® Åø È®Àå
Error Prone Ç÷¯±×ÀÎ
SpotBugs Ç÷¯±×ÀÎ
IntelliJ IDEA Ç÷¯±×ÀÎ
IntelliJ IDEAÀÇ ±¸Á¶Àû °Ë»ö ¹× ±³Ã¼ ±â´É