¼¼·ÃµÇ°í È¿À²ÀûÀÎ ÄÚµù¹æ¹ý - ½ÇÀü - ÃÊ±Þ °³¹ßÀÚ
ÀÌÆåƼºê ÀÚ¹Ù -
Á¶½´¾Æ ºí·ÎÄ¡ ÁöÀ½, ½ÉÀçö ¿Å±è/´ë¿õ
Effective Java ´Â Java ¶ó´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ Àß »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¼³¸íÇÑ Ã¥À¸·Î Java ¸¦ ¹è¿ì´Â ºÐ²² ÃßõÇÏ°í ½ÍÀº Ã¥Àº ¾Æ´Õ´Ï´Ù. ÀÌ¹Ì Java ¼¼°è¿¡ ÀÔ¹®ÇÑ ÃÊ±Þ ¶Ç´Â Áß±Þ ÇÁ·Î±×·¡¸Ó¿¡°Ô ÃßõÇÏ°í ½ÍÀº Ã¥ÀÔ´Ï´Ù. ÀÌ ÆäÀÌÁö´Â Effective Java ¿¡¼ ¸î °³ÀÇ ¹®ÀåÀ» ¹ßÃéÇÏ¿© °£´ÜÈ÷ ¿ä¾àÇÑ ±ÛÀÔ´Ï´Ù. ÀúÀ۱ǿ¡ ¹®Á¦°¡ µÉ °æ¿ì ¾Ë·ÁÁֽøé ÀÚÁø »èÁ¦ÇÏ°Ú½À´Ï´Ù.
±×¸®°í ¹ø¿ª°ú ÆíÁýÀÌ ±×¸® ÈǸ¢ÇÑ ÆíÀº ¾Æ´Õ´Ï´Ù. ¿µ¾î°¡ °¡´ÉÇϽŠºÐµéÀº ¿ø¼¸¦ º¸´Â °Íµµ ÁÁ½À´Ï´Ù.
¼¹®
...ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¹®¹ýÀ» ¹è¿ï ¼ö Àִ åÀº Á¤¸» ¸¹´Ù...¸¶Âù°¡Áö·Î ÀÚ¹Ù ¶óÀ̺귯¸®³ª API¸¦ ´Ù·ç´Â Ã¥µéµµ Á¤¸» ¸¹´Ù.
ÀÌ Ã¥Àº ´ç½ÅÀÌ ¿øÇÏ´Â °Í, ¹Ù·Î ÀÚ¿¬½º·´°í À¯Ã¢ÇÏ°¡ ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ¸»ÇÏ´Â ¹ýÀ» ¾Ë·ÁÁØ´Ù...Àß ÀÛµ¿ÇÏ´Â ´ç½ÅÀÇ Äڵ带 ´Ù¸¥ »ç¶÷ÀÌ ÀÌÇØÇϱ⠽±°í, °íÄ¡±âµµ ½±°í, º° ¹®Á¦ ¾øÀÌ ±â´Éµµ Çâ»ó½Ãų ¼ö ÀÖ°Ô ¸¸µé ¼ö Àִ¹æ¹ýÀ» ÀÌ Ã¥¿¡¼ ã±â ¹Ù¶õ´Ù. ¾Æ¸¶µµ ¿¹Àüº¸´Ù Àç¹Ì ÀÖ°í ¿ì¾ÆÇÏ°í ¼¼·ÃµÈ ¹æ½ÄÀ¸·Î ÈξÀ ´õ ÁÁÀº ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù...
CHAPTER 1 °³¿ä
CHAPTER 2 °´Ã¼ÀÇ »ý¼º°ú ¼Ò¸ê
[Ç׸ñ 1] »ý¼ºÀÚ ´ë½Å static factory method »ç¿ëÀ» °í·ÁÇÏÀÚ
"A class can provide a public static factory method, which is simply a static method that returns an instance of the class." (static factory method ´Â class ÀÇ instance ¸¦ ¸®ÅÏÇÏ´Â static method ÀÔ´Ï´Ù.)
"One advantage of static factory methods is that, unlike constructors, they have names." (»ý¼ºÀÚ¿Í ºñ±³Çϸé, static factory method ´Â À̸§À» Á¤ÇÒ ¼ö ÀÖ´Â Á¡ÀÌ ÀåÁ¡ÀÔ´Ï´Ù.)
"A second advantage of static factory methods is that, unlike constructors, they are not
required to create a new object each time they're invoked." (static factory method ÀÇ µÎ ¹ø° ÀåÁ¡Àº »ý¼ºÀÚ¿Í´Â ´Þ¸® ´Ã »õ·Î¿î object ¸¦ »ý¼ºÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â Á¡ÀÔ´Ï´Ù.)
»ý¼ºÀÚ´Â ÀÚ½ÅÀÌ Á¤ÀÇµÈ class ÀÇ instance ¸¸ return ÇÒ ¼ö ÀÖÁö¸¸, static factory method ´Â ÀÚ½ÅÀÌ ¼±¾ðµÈ °Í°ú °°Àº ŸÀÔÀÇ instance ´Â ¸ðµÎ return ÇÒ ¼ö ÀÖ´Ù.
static factory method ÀÇ °¡Àå Å« ´ÜÁ¡Àº ÀÌ method ¸¦ Á¤ÀÇÇÑ class °¡ public À̳ª protected »ý¼ºÀÚ¸¦ Á¦°øÇÏÁöÀ¸¸é ´Ù¸¥ class °¡ ÀÌ class ¸¦ »ó¼Ó¹ÞÀ» ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù.
static factory method ÀÇ µÎ ¹ø° ´ÜÁ¡Àº ´Ù¸¥ static method ¿ÍÀÇ Â÷À̸¦ ¸í½ÃÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù.
[Ç׸ñ 2] »ý¼ºÀÚÀÇ parameter °¡ ¸¹À» ¶§´Â builder ¸¦ °í·ÁÇÏÀÚ
Static factories and constructors share a limitation: they do not scale well to large numbers of optional parameters.(static factory ¿Í »ý¼ºÀÚ´Â optional parameter ÀÇ ¼ö°¡ ¸¹¾ÆÁú ¶§ È®ÀåÇÏ´Â °ÍÀÌ ¿ëÀÌÇÏÁö ¾Ê´Ù´Â ÇÑ°è°¡ ÀÖ½À´Ï´Ù.)
Traditionally, programmers have used the telescoping constructor pattern, in which you provide a constructor with only the required parameters, another with a single optional parameter, a third with two optional parameters, and so on, culminating in a constructor with all the optional parameters.(ÀüÅëÀûÀ¸·Î ÇÁ·Î±×·¡¸Ó´Â telescoping constructor pattern - Çʼö parameter ·Î ±¸¼ºµÈ »ý¼ºÀÚ, optional parameter °¡ ÇÑ °³ Ãß°¡µÈ »ý¼ºÀÚ, optional parameter °¡ µÎ °³ Ãß°¡µÈ »ý¼ºÀÚ, ... ¸ðµç optional parameter °¡ Ãß°¡µÈ »ý¼ºÀÚ¸¦ Á¦°ø - À» »ç¿ëÇÕ´Ï´Ù.)
"the telescoping constructor pattern works, but it is hard to write client code when there are many parameters, and harder still to read it."(telescoping constructor pattern Àº µ¿ÀÛ¿¡ ¹®Á¦°¡ ¾øÁö¸¸, parameter °¡ ¸¹Àº °æ¿ì Ŭ¶óÀ̾ðÆ® Äڵ带 ÀÛ¼ºÇϱ⠾î·Æ°í Ŭ¶óÀ̾ðÆ® Äڵ带 Àд °ÍÀº ´õ¿í ¾î·Æ½À´Ï´Ù.)
A second alternative when you are faced with many constructor parameters is the JavaBeans pattern, in which you call a parameterless constructor to create the object and then call setter methods to set each required parameter and each optional parameter of interes(»ý¼ºÀÚ parameter °¡ ¸¹À» °æ¿ì µÎ ¹ø° ´ë¾ÈÀº JavaBeans pattern - parameter °¡ ¾ø´Â »ý¼ºÀÚ¸¦ È£ÃâÇÏ¿© object ¸¦ »ý¼ºÇÑ ÈÄ setter method ¸¦ È£ÃâÇÏ¿© Çʼö parameter ¿Í optional parameter ¸¦ ¼³Á¤ - À» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.)
"a JavaBean may be in an inconsistent state partway through its construction."(JavaBean Àº »ý¼º Áß¿¡ ÀÏ°ü¼ºÀ» ÀÒÀ» ¼ö ÀÖ½À´Ï´Ù)
"the JavaBeans pattern precludes the possibility of making a class immutable"(JavaBean pattern Àº immutable class »ý¼ºÀ» ºÒ°¡´ÉÇÏ°Ô ÇÕ´Ï´Ù)
Luckily, there is a third alternative that combines the safety of the telescoping constructor pattern with the readability of the JavaBeans pattern. It is a form of the Builder pattern.(´ÙÇàÈ÷ telescoping constructor pattern ÀÇ ¾ÈÀü¼º°ú JavaBeans pattern ÀÇ °¡µ¶¼ºÀ» °áÇÕÇÑ ¼¼ ¹ø° ´ë¾ÈÀÌ ÀÖ½À´Ï´Ù. ±× °ÍÀº Builder pattern ÀÔ´Ï´Ù.)
"The Builder pattern simulates named optional parameters"
"Class.newInstance breaks compile-time exception checking."
"the Builder pattern is a good choice when designing classes whose constructors or static factories would have more than a handful of parameters"(»ý¼ºÀÚ³ª static factory °¡ 5°³ ÀÌ»óÀÇ parameter ¸¦ °®´Â class ¸¦ ¼³°èÇÒ ¶§ Builder pattern Àº ÁÁÀº ´ë¾ÈÀÔ´Ï´Ù.)
[Ç׸ñ 3] private »ý¼ºÀÚ³ª enum ŸÀÔÀ» »ç¿ëÇؼ ½Ì±ÛÅæÀÇ Æ¯¼ºÀ» À¯ÁöÇÏÀÚ
http://en.wikipedia.org/wiki/Singleton_pattern#Java
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() {...}
}
[Ç׸ñ 4] private »ý¼ºÀÚ¸¦ »ç¿ëÇؼ ÀνºÅϽº »ý¼ºÀ» ¸øÇÏ°Ô ÇÏÀÚ
[Ç׸ñ 5] ºÒÇÊ¿äÇÑ °´Ã¼ÀÇ »ý¼ºÀ» ÇÇÇÏÀÚ
[Ç׸ñ 6] ¾µ¸ð ¾ø´Â °´Ã¼ ÂüÁ¶¸¦ Á¦°ÅÇÏÀÚ
[Ç׸ñ 7] finalizer ÀÇ »ç¿ëÀ» ÇÇÇÏÀÚ
¾Ë¸ÂÀº ½Ã°£ ¾È¿¡ ¹Ýµå½Ã ¼öÇàÇØ¾ß ÇÏ´Â ÀÛ¾÷À» finalizer ¿¡¼ ó¸®Çϸé Àý´ë ¾È µÈ´Ù.
Áß¿äÇÑ persistant »óŸ¦ °»½ÅÇÏ´Â ÀÛ¾÷Àº finalizer ¿¡¼ ó¸®ÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù.
¸í½ÃÀûÀÎ termination method ¸¦ Á¦°øÇÏ°í,
¸í½ÃÀûÀÎ termination method ´Â Áï°¢ÀûÀÎ Á¾°á󸮸¦ À§ÇØ try-finally ±¸¹®°ú ÇÔ²² ¾²´Â °ÍÀÌ ÁÁ´Ù.
CHAPTER 3 ¸ðµç °´Ã¼¿¡ °øÅëÀûÀÎ method
[Ç׸ñ 8] equals method ¸¦ overriding ÇÒ ¶§´Â º¸ÆíÀû °è¾àÀ» µû¸£ÀÚ
°¢ instance °¡ ¿ø·¡ºÎÅÍ À¯ÀÏÇÑ °æ¿ì, logical equality °Ë»ç°¡ Å« Àǹ̰¡ ¾ø´Â °æ¿ì, »óÀ§ class ¿¡¼ ÀÌ¹Ì ÀûÀýÇÏ°Ô equals ¸¦ overriding Çß°í ÀÌ °ÍÀ» ±×´ë·Î ¾²¸é µÇ´Â °æ¿ì, private À̰ųª package-private class ÀÌ°í equals °¡ Àý´ë È£ÃâµÇÁö ¾Ê´Â °æ¿ì¶ó¸é equals ¸¦ overriding ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.
instance ¸¦ ¸¸µé ¼ö ÀÖ´Â class ¸¦ »ó¼Ó¹Þ¾Æ »õ·Î¿î ºÎºÐÀ» Ãß°¡ÇÒ ¶§, Ç¥ÁØ ±¸Çö °è¾àÀ» ÁؼöÇÏ´Â equals method ¸¦ ¸¸µé ¼ö ÀÖ´Â °£´ÜÇÑ ¹æ¹ýÀº ¾ø´Ù.
ÁÁÀº equals method ¸¦ ¸¸µå´Â ¹æ¹ý: 1 == ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© this ÀÎÁö °Ë»çÇÑ´Ù. 2 instanceof ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ŸÀÔÀÌ ¿Ã¹Ù¸¥Áö °Ë»çÇÑ´Ù. 3 ÀÎÀÚ¸¦ Á¤È®ÇÑ Å¸ÀÔÀ¸·Î º¯È¯ÇÑ´Ù. 4 significant field ¿¡ ´ëÇØ ÀÎÀÚÀÇ Çʵå¿Í this ÀÇ ÇØ´ç ÇʵåÀÇ °ªÀÌ µ¿µîÇÑÁö °Ë»çÇÑ´Ù. 5 equals method ¸¦ ´Ù ¸¸µé¾ú´Ù¸é, ´ëĪ¼º, ¸Å°³¼º, ÀÏ°ü¼ºÀ» ÁöÅ°´ÂÁö È®ÀÎÇÑ´Ù.
equals method ¸¦ overriding Çϸé hashCode method µµ ¹Ýµå½Ã overriding Ç϶ó.
³Ê¹« ¿µ¸®ÇÏ°Ô ±¼Áö ¸¶¶ó.
ºÒ¾ÈÁ¤ÇÑ ÀÚ¿ø¿¡ ÀÇÁ¸ÇÏ´Â equals method ¸¦ ÀÛ¼ºÇÏÁö ¸¶¶ó.
equals method ÀÇ ÀÎÀÚ¸¦ Object ŸÀÔÀÌ ¾Æ´Ñ ´Ù¸¥ ŸÀÔÀ¸·Î ¼±¾ðÇÏÁö ¸¶¶ó.
[Ç׸ñ 9] equals method ¸¦ overriding ÇÒ ¶§´Â hashCode method µµ Ç×»ó °°ÀÌ overriding ÇÏÀÚ
equals method ¸¦ overriding ÇÏ°íµµ hashCode method ¸¦ overriding ÇÏÁö ¾ÊÀ¸¸é Object.hashCode ÀÇ Ç¥ÁØ ±¸Çö °è¾àÀ» ¾î±â´Â °ÍÀÌ´Ù.
hashCode method ¸¦ overriding ÇÏÁö ¾ÊÀ¸¸é µÎ ¹ø° Ç׸ñÀ» À§¹ÝÇϱ⠽±´Ù. ³í¸®ÀûÀ¸·Î µ¿µîÇÑ object ´Â ¹Ýµå½Ã hash code °¡ °°¾Æ¾ß ÇÑ´Ù.
hash code ¸¦ °è»êÇÒ ¶§ ´ÜÁö ¼º´ÉÀ» Çâ»ó½ÃŲ´Ù´Â ÀÌÀ¯·Î ÁÖ¿ä Çʵå Áß Çϳª¶óµµ °è»ê¿¡¼ »©¸ÔÁö ¸¶¶ó.
[Ç׸ñ 10] toString method ´Â Ç×»ó overriding ÇÏÀÚ
toString method ¸¦ Àß ±¸ÇöÇØ ³õÀº class ´Â ¾²±â ÈξÀ ÆíÇÒ °ÍÀÌ´Ù.
toString method ´Â object °¡ °¡Áø °ü½É ÀÖ´Â ¸ðµç Á¤º¸¸¦ return ÇØ¾ß ÇÑ´Ù.
¹®ÀÚ¿ Çü½ÄÀ» ¸í¼¼ÈÇÏÁö ¾Ê´õ¶óµµ toString method ÀÇ Àǵµ´Â ¸íÈ®È÷ ¹®¼ÈÇÏ´Â °ÍÀÌ ÁÁ´Ù.
toString method °¡ returnÇÏ´Â ¹®ÀÚ¿¿¡ Æ÷ÇÔµÈ ¸ðµç Á¤º¸¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â °ÍÀÌ ÁÁ´Ù.
[Ç׸ñ 11] clone method ´Â ½ÅÁßÇÏ°Ô overriding ÇÏÀÚ
final ÀÌ ¾Æ´Ñ class ¿¡¼ clone method ¸¦ overriding ÇÏ·Á¸é ¹Ýµå½Ã super.clone method ¸¦ È£ÃâÇÏ¿© ¾òÀº object ¸¦ return ÇØ¾ß ÇÑ´Ù.
½ÇÁ¦·Î, Clonable interface ¸¦ implements ÇÏ´Â class ´Â Á¦´ë·Î µ¿ÀÛÇÏ´Â public clone method ¸¦ Á¦°øÇØ¾ß ÇÑ´Ù.
º»ÁúÀûÀ¸·Î clone method ´Â ¶Ç ´Ù¸¥ Á¾·ùÀÇ »ý¼ºÀÚ³ª ¸¶Âù°¡Áö´Ù. clone method °¡ »ý¼ºÇÏ´Â º¹Á¦º» object ´Â class ÀÇ invariant ¸¦ ÁöÄÑ¾ß ÇÑ´Ù.
±Ùº»ÀûÀ¸·Î °´Ã¼ÀÇ º¹Á¦º»À» ¸¸µé¾î¾ß ÇÏ´Â clone ¾ÆÅ°ÅØó´Â final Çʵå·Î °¡º¯ °´Ã¼¸¦ ÂüÁ¶Çϴ Ŭ·¡½º¿Í °°ÀÌ ¾µ ¼ö ¾ø´Ù.
º¹Á¦º»À» ¸¸µå´Â °ÍÀ» Çã¿ëÇÏÁö ¾Ê°Å³ª º¹Á¦º»À» ¾òÀ» ¼ö ÀÖ´Â ´õ ³ªÀº ´Ù¸¥ ¹æ¹ýÀ» Á¦°øÇØ¾ß ÇÑ´Ù.
object ¸¦ º¹Á¦ÇÏ´Â ¶Ç ´Ù¸¥ ÁÁÀº ¹æ¹ýÀº copy constructor ¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù.
[Ç׸ñ 12] Comparable interface ÀÇ ±¸ÇöÀ» °í·ÁÇÏÀÚ
CHAPTER 4 class ¿Í interface
[Ç׸ñ 13] class ¿Í ±× member ÀÇ Á¢±Ù¼ºÀ» ÃÖ¼ÒÈÇÏÀÚ
°¡Àå Áß¿äÇÑ ¹ýÄ¢Àº class ³ª class member ¿¡ ´ëÇÑ Á¢±ÙÀº °¡´ÉÇϸé ÃÖ¼ÒÈ Ç϶ó´Â °ÍÀÌ´Ù.
public static final ÇʵåÀÎ ¹è¿Àº °ÅÀÇ È®½ÇÇÏ°Ô ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù.
[Ç׸ñ 14] public Ŭ·¡½º¿¡¼´Â public Çʵ尡 ¾Æ´Ñ Á¢±ÙÀÚ(accessor) ¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù
[Ç׸ñ 15] °¡º¯¼ºÀ» ÃÖ¼ÒÈ ÇÏÀÚ
[Ç׸ñ 16] °¡±ÞÀû inheritance º¸´Ù´Â composition À» »ç¿ëÇÏÀÚ
method È£Ãâ°ú ´Þ¸® inheritance ´Â encapsulation ±ÔÄ¢À» ¾î±ä´Ù.
[Ç׸ñ 17] inheritance À» À§ÇÑ ¼³°è¿Í ¹®¼È¸¦ ÇÏÀÚ. ±×·¸Áö ¾Ê´Ù¸é inheritance ÀÇ »ç¿ëÀ» ±ÝÁö½ÃŲ´Ù
class ¸í¼¼ ¹®¼¿¡ method ¸¦ overriding ÇÏ¸é ¹ß»ýÇÒ ¼ö ÀÖ´Â ¸ðµç ÆÄ±Þ È¿°ú¸¦ ÀÚ¼¼ÇÏ°í Á¤È®ÇÏ°Ô ±â¼úÇØ¾ß ÇÑ´Ù.
protected method ¸¦ Á¦°øÇÏ¿© ÀÌ class ÀÇ ³»ºÎ µ¿ÀÛ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¿¬°á °í¸®¸¦ Á¦°øÇØ¾ß ÇÒ Áöµµ ¸ð¸¥´Ù.
Á÷Á¢ÀÌµç °£Á¢À̵ç, »ý¼ºÀÚ¿¡¼ ÀçÁ¤ÀÇ °¡´ÉÇÑ method ¸¦ Àý´ë·Î È£ÃâÇؼ± ¾È µÈ´Ù.
clone À̳ª readObject method ¿¡¼ overriding °¡´ÉÇÑ method ¸¦ Àý´ë·Î È£ÃâÇÏ¸é ¾È µÈ´Ù.
readResolve ³ª writeResolve method ¸¦ Á¦°øÇÑ´Ù¸é ¹Ýµå½Ã ÀÌ method µéÀ» private ÀÌ ¾Æ´Ï protected ·Î ¸¸µé¾î¾ß ÇÑ´Ù.
inheritance ¸¦ À§ÇØ class ¸¦ ¼³°èÇÏ·Á¸é ÀÌ class ¿¡ ½ÇÁ¦·Î Á¦¾àÀ» ÁÙ ¼ö ¹Û¿¡ ¾ø´Ù.
inheritance ¿Í °ü·ÃµÈ ¹®Á¦¸¦ ÇØ°áÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ¾ÈÀüÇÏ°Ô inheritance ÇÒ ¼ö ÀÖµµ·Ï ¼³°èÇÏÁöµµ ¾Ê°í ¹®¼È ÇÏÁöµµ ¾ÊÀº class ´Â ¾Æ¿¹ inheritance °¡ ºÒ°¡´ÉÇÏ°Ô ¸¸µå´Â °ÍÀÌ´Ù.
[Ç׸ñ 18] abstract class º¸´Ù´Â interface ¸¦ »ç¿ëÇÏÀÚ
ÀÌ¹Ì Á¸ÀçÇÏ´Â class °¡ »õ·Î¿î interface ¸¦ ±¸ÇöÇϵµ·Ï °íÄ¡´Â °ÍÀº ¾î·Á¿î ÀÏÀÌ ¾Æ´Ï´Ù.
interface ¸¦ ¾²¸é ±ò²ûÇÏ°Ô mixin ŸÀÔÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
interface ¸¦ ¾²¸é °èÃþ ±¸Á¶°¡ ¾ø´Â ŸÀÔ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¸¸µé ¼ö ÀÖ´Ù.
interface ´Â ¾ÈÀüÇÏ°í °·ÂÇÏ°Ô Å¬·¡½º¿¡ »õ·Î¿î ±â´ÉÀ» ´õÇÒ ¼ö ÀÖ´Ù.
interface ¿Í abstract class ÀÇ ÀåÁ¡¸¸ °áÇÕÇؼ, ¿ÜºÎ¿¡ Á¦°øÇÏ´Â Áß¿äÇÑ ÀÎÅÍÆäÀ̽ºµé¿¡ ´ëÇØ skeleton inplementation À» ÇØ ³õÀº abstract class ¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.
interface ¸¦ ¹ßÀü½ÃÄÑ °¡´Â °Íº¸´Ù abstract class ¸¦ ¹ßÀü½ÃÄÑ °¡´Â °ÍÀÌ ÈξÀ ´õ ½±´Ù´Â °ÍÀÌ´Ù.
[Ç׸ñ 19] ŸÀÔÀ» Á¤ÀÇÇÒ ¶§¸¸ interface ¸¦ »ç¿ëÇÏÀÚ
[Ç׸ñ 20] ű×(tagged) Ŭ·¡½ºº¸´Ù´Â Ŭ·¡½º °èÃþÀ» »ç¿ëÇÏÀÚ
[Ç׸ñ 21] Àü·«À» Ç¥ÇöÇÒ ¶§ ÇÔ¼ö °´Ã¼¸¦ »ç¿ëÇÏÀÚ
[Ç׸ñ 22] static ¸â¹ö Ŭ·¡½º¸¦ ¸¹ÀÌ »ç¿ëÇÏÀÚ
CHAPTER 5 Á¦³×¸¯(Generics)
[Ç׸ñ 23] »õ·Î ÀÛ¼ºÇÏ´Â Äڵ忡¼´Â ¿øõ(raw) ŸÀÔÀ» »ç¿ëÇÏÁö ¸»ÀÚ
[Ç׸ñ 24] ÄÄÆÄÀÏ °æ°í ¸Þ½ÃÁö°¡ ¾ø°Ô ÇÏÀÚ
[Ç׸ñ 25] ¹è¿º¸´Ù´Â List¸¦ »ç¿ëÇÏÀÚ
[Ç׸ñ 26] Á¦³×¸¯ ŸÀÔÀ» ¾Ö¿ëÇÏÀÚ
[Ç׸ñ 27] Á¦³×¸¯ ¸Þ¼Òµå¸¦ ¾Ö¿ëÇÏÀÚ
[Ç׸ñ 28] ¹Ù¿îµå ¿ÍÀϵå Ä«µå¸¦ »ç¿ëÇؼ APIÀÇ À¯¿¬¼ºÀ» ³ôÀÌÀÚ
[Ç׸ñ 29] ŸÀÔ ¾ÈÀüÀÌ º¸ÀåµÇ´Â È¥¼º(heterogeneous) ÄÁÅ×À̳ÊÀÇ »ç¿ëÀ» °í·ÁÇÏÀÚ
CHAPTER 6 ¿°ÅÇü(Enum)°ú ÁÖ¼®(Annotation)
[Ç׸ñ 30] int »ó¼ö ´ë½Å enumÀ» »ç¿ëÇÏÀÚ
[Ç׸ñ 31] ¼¼ö(ßíâ¦) ´ë½Å ÀνºÅϽº Çʵ带 »ç¿ëÇÏÀÚ
[Ç׸ñ 32] ºñÆ®(bit) ÇÊµå ´ë½Å EnumSetÀ» »ç¿ëÇÏÀÚ
[Ç׸ñ 33] ¼¼ö(ßíâ¦) À妽º ´ë½Å EnumMapÀ» »ç¿ëÇÏÀÚ
[Ç׸ñ 34] ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇؼ È®Àå °¡´ÉÇÑ enumÀ» ¸¸µéÀÚ
[Ç׸ñ 35] ÀÛ¸í ÆÐÅϺ¸´Ù´Â ÁÖ¼®(annotation)À» »ç¿ëÇÏÀÚ
[Ç׸ñ 36] Override ÁÖ¼®À» ÀÏ°ü¼º ÀÖ°Ô »ç¿ëÇÏÀÚ
[Ç׸ñ 37] ŸÀÔ Á¤ÀǴ ǥ½Ã ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏÀÚ
CHAPTER 7 method
[Ç׸ñ 38] parameter °¡ À¯È¿ÇÑÁö °Ë»çÇÏÀÚ
[Ç׸ñ 39] ÇÊ¿äÇϸé defensive copy ¸¦ ¸¸µéÀÚ
class ÀÇ ¸ðµç client ´Â Ç×»ó ºÒº¯ ±ÔÄ¢À» ±ú¶ß¸®±â À§ÇØ ÃÖ¼±À» ´ÙÇÑ´Ù°í °¡Á¤ÇÏ°í, ÇÁ·Î±×·¡¹ÖÇÒ ¶§ Ç×»ó ¹æ¾îÇÏ´Â ÀÚ¼¼¸¦ °¡Á®¾ß ÇÑ´Ù.
»ý¼ºÀÚ¿¡ Àü´ÞµÇ´Â º¯°æ°¡´É ÀÎÀÚµéÀ» ¹æ¾îº¹»çÇØ¾ß ÇÏ°í
ÀÎÀÚÀÇ À¯È¿¼ºÀ» °Ë»çÇϱâ Àü¿¡ ¸ÕÀú º¹»çÇÏ°í ³ª¼ ¿ì³Êº»ÀÌ ¾Æ´Ñ º¹»çº»ÀÇ À¯È¿¼ºÀ» °Ë»çÇÑ´Ù
¹ÏÀ» ¼ö ¾ø´Â ÇÏÀ§ Ŭ·¡½º°¡ »ý±æ ¼ö ÀÖ´Â ÀÎÀڵ鿡 ´ëÇÑ ¹æ¾îº¹»ç¿¡ clone method ¸¦ ¾²Áö ¸»¾Æ¾ß ÇÑ´Ù.
[Ç׸ñ 40] method signiture ¸¦ ½ÅÁßÇÏ°Ô ¼³°èÇÏÀÚ
method À̸§À» ½ÅÁßÇÏ°Ô °áÁ¤Ç϶ó.
Æí¸®ÇÑ method ¸¦ Á¦°øÇϱâ À§ÇØ ³Ê¹« ¾Ö¾²Áö ¸¶¶ó.
Á¶±ÝÀÌ¶óµµ ÀǽÉÀÌ »ý±â¸é "¼Ó±â" method ¸¦ ±×³É Á¦°ÅÇ϶ó.
ÀÎÀÚ¸¦ ³Ê¹« ¸¹ÀÌ ¹ÞÁö ¸¶¶ó.
ÀÎÀÚÀÇ Å¸ÀÔÀ¸·Î class º¸´Ù interface ¸¦ ½á¶ó.
function object ´Â ½ÅÁßÇÏ°Ô ½á¶ó.
[Ç׸ñ 41] overloading À» ºÐº°·Â ÀÖ°Ô »ç¿ëÇÏÀÚ
overloading method Áß¿¡¼ ¾î¶² °ÍÀ» È£ÃâÇÒÁö °í¸£´Â °ÍÀº ÄÄÆÄÀÏ ½ÃÁ¡¿¡ °áÁ¤³´Ù.
overloading method ¼±ÅÃÀº Á¤ÀûÀ¸·Î °áÁ¤µÇ°í, overriding method ¼±ÅÃÀº µ¿ÀûÀ¸·Î °áÁ¤³´Ù.
overloading method °¡ È¥¶õÀ» ÁÖ¸é ¾ÈµÈ´Ù.
¾ÈÀüÇÏ°í º¸¼öÀûÀÎ Á¤Ã¥Àº °°Àº °³¼öÀÇ ÀÎÀÚ¸¦ °®´Â overloading method ¸¦ ¸¸µéÁö ¾Ê´Â °ÍÀÌ´Ù.
[Ç׸ñ 42] °¡º¯ ÀÎÀÚ(varargs)¸¦ ºÐº°·Â ÀÖ°Ô »ç¿ëÇÏÀÚ
[Ç׸ñ 43] null´ë½Å ºñ¾îÀÖ´Â ¹è¿À̳ª Ä÷º¼ÇÀ» ¹ÝȯÇÏÀÚ
¹è¿À» return ÇÏ´Â method ¿¡¼ null À» return ÇÒ ÀÌÀ¯°¡ ÀüÇô ¾ø´Ù. null À» return ÇÒ »óȲÀ̶ó¸é ±æÀÌ°¡ 0 ÀÎ ¹è¿À» return ÇÏ¸é µÈ´Ù.
[Ç׸ñ 44] ¿ÜºÎ¿¡ Á¦°øÇÏ´Â ¸ðµç API ¿ä¼Ò¿¡ ´ëÇØ ¹®¼È ÁÖ¼®À» ³ÖÀÚ
API ¸¦ ¹®¼È ÇÏ·Á¸é, ¿ÜºÎ¿¡ Á¦°øÇÏ´Â ¸ðµç class, interface, »ý¼ºÀÚ method, Çʵ忡 ¹®¼È ÁÖ¼®À» ´Þ¾Æ¾ß ÇÑ´Ù.
method ÀÇ ¹®¼È ÁÖ¼®Àº method ¿Í client »çÀÌÀÇ °è¾àÀ» °£¸íÇÏ°Ô ±â¼úÇØ¾ß ÇÑ´Ù.
CHAPTER 8 ÇÁ·Î±×·¡¹Ö ÀϹÝ
[Ç׸ñ 45] Áö¿ª º¯¼öÀÇ À¯È¿ ¹üÀ§¸¦ ÃÖ¼ÒÈ ÇÏÀÚ
Áö¿ª º¯¼öÀÇ À¯È¿ ¹üÀ§¸¦ ÃÖ¼ÒÈ ÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ¾²±â ¹Ù·Î Àü¿¡ ¼±¾ðÇÏ´Â °ÍÀÌ´Ù.
´ëºÎºÐ Áö¿ª º¯¼ö´Â ¼±¾ð°ú ÇÔ²² ÃʱâÈ ÇØ¾ß ÇÑ´Ù.
while ¹Ýº¹¹® º¸´Ù´Â for ¹Ýº¹¹®À» ¾²´Â °ÍÀÌ ÁÁ´Ù.
ÇÑ method ´Â ÇÑ °¡Áö ÀÛ¾÷¸¸ ó¸®Çϵµ·Ï °¡´ÉÇϸé ÀÛ°Ô ¸¸µé¾î¾ß ÇÑ´Ù.
[Ç׸ñ 46] Á¾ÀüÀÇ for ·çÇÁº¸´Ù´Â for-each ·çÇÁ¸¦ »ç¿ëÇÏÀÚ
[Ç׸ñ 47] ¶óÀ̺귯¸®¸¦ ¹è¿ì°í »ç¿ëÇÏÀÚ
Ç¥ÁØ ¶óÀ̺귯¸®¸¦ ¾²¸é, ÀÌ °ÍÀ» ÀÛ¼ºÇÑ Àü¹®°¡ÀÇ Áö½Ä°ú ¸ÕÀú ½á º» »ç¶÷µéÀÇ °æÇè±îÁö ¾òÀ» ¼ö ÀÖ´Ù.
ÁÖ¿ä ¹èÆ÷ÆÇÀÌ »õ·Ó°Ô ¹ßÇ¥µÉ ¶§¸¶´Ù ¶óÀ̺귯¸®¿¡ Ãß°¡µÇ´Â ¸¹Àº¤· ±â´ÉÀ» ¾Ë¾ÆµÑ ÇÊ¿ä°¡ ÀÖ´Ù.
Àû¾îµµ java.lang.util ÆÐÅ°Áö¿Í Á¶±Ý Á߿伺ÀÌ ¶³¾îÁö±â´Â ÇÏÁö¸¸ java.lang.io ÆÐÅ°ÁöÀÇ ³»¿ë¸¸Àº ¹Ýµå½Ã ¾Ë¾Æ µÎ¾î¾ß ÇÑ´Ù.
[Ç׸ñ 48] Á¤È®ÇÑ °è»ê¿¡´Â float³ª double ŸÀÔÀ» ¾²Áö ¸»ÀÚ
ƯÈ÷, ±ÝÀüÀ» °è»êÇÒ ¶§ float ³ª double ŸÀÔÀ» Àý´ë·Î ¾²Áö ¸»¾Æ¾ß ÇÑ´Ù.
[Ç׸ñ 49] ¹Ú½ºÈ ±âº»Çüº¸´Ù´Â ±âº»ÇüÀ» »ç¿ëÇÏÀÚ
[Ç׸ñ 50] ´Ù¸¥ ŸÀÔÀ» ¾µ ¼ö ÀÖ´Â °÷¿¡¼´Â String »ç¿ëÀ» ÇÇÇÏÀÚ
String À¸·Î ´Ù¸¥ value type À» ´ë½ÅÇÏÁö ¸¶¶ó.
String À¸·Î ¿°ÅŸÀÔÀ» ´ë½ÅÇÏÁö ¸¶¶ó. ŸÀÔ¾ÈÀü ¿°Å¸¦ ¾²´Â °ÍÀÌ °¡Àå ÁÁ´Ù.
String À¸·Î aggregate type À» ´ë½ÅÇÏÁö ¸¶¶ó.
String À¸·Î ¾î¶² capability ¸¦ ´ë½ÅÇÏÁö ¸¶¶ó.
[Ç׸ñ 51] String °áÇÕÀÇ ¼º´É ÀúÇϸ¦ ÁÖÀÇÇÏÀÚ
n °³ÀÇ String À» ¿¬°áÇÒ ¶§ String ¿¬°á ¿¬»êÀÚ¸¦ ¹Ýº¹Çؼ ¾²¸é °É¸®´Â ½Ã°£Àº n ÀÇ Á¦°ö¿¡ ºñ·ÊÇÑ´Ù.
[Ç׸ñ 52] object reference ´Â ±× object ÀÇ interface ŸÀÔÀ¸·Î ÇÏÀÚ
ÀûÀýÇÑ interface ŸÀÔÀÌ ÀÖ´Ù¸é ÀÎÀÚ, return °ª, º¯¼ö, Çʵå´Â ¹Ýµå½Ã interface ŸÀÔÀ¸·Î ¼±¾ðÇØ¾ß ÇÑ´Ù.
object reference ÀÇ Å¸ÀÔÀ» interface ŸÀÔÀ¸·Î ¼±¾ðÇϸé À¯¿¬ÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Ù.
ÀûÀýÇÑ interface °¡ ¾ø´Ù¸é, interface ŸÀÔÀÌ ¾Æ´Ñ class ŸÀÔÀ¸·Î object ¸¦ ÂüÁ¶Çصµ ±¦Âú´Ù.
[Ç׸ñ 53] ¸®Ç÷º¼Çº¸´Ù´Â interface ¸¦ »ç¿ëÇÏÀÚ
reflection À» ¾²¸é ¿¹¿Ü¿¡ ´ëÇÑ °Ë»ç¸¦ Æ÷ÇÔÇÏ¿©, ¸ðµç ÄÄÆÄÀÏ ½ÃÁ¡ÀÇ Å¸ÀÔ °Ë»ç¸¦ Æ÷±âÇØ¾ß ÇÑ´Ù. reflection À» ¾²¸é Äڵ尡 ¸Å¿ì ¹ø°Å·Î¿öÁö°í ¾çµµ ¸¹¾ÆÁø´Ù. ¼º´ÉÀÌ ¶³¾îÁø´Ù.
ÀÏ¹Ý ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ½ÇÇà ½ÃÁ¡¿¡ reflection À» ½á¼ object ¿¡ Á¢±ÙÇÏ¸é ¾È µÈ´Ù.
¾ÆÁÖ Á¦ÇÑµÈ ÇüÅ·Πreflection À» ¾´´Ù¸é °ÅÀÇ ºñ¿ëÀ» µéÀÌÁö ¾Ê°í reflection ÀÇ ¸¹Àº ÀåÁ¡¸¸ È°¿ëÇÒ ¼ö ÀÖ´Ù.
reflection À¸·Î ÇöÀç Á¸ÀçÇÏÁö ¾Ê´Â class ÀÇ instance ¸¦ »ý¼ºÇÏ°í, interface ³ª »óÀ§ class ·Î ÀÌ instance ¿¡ Á¢±ÙÇÏ´Â ¹æ½ÄÀ» ¾µ ¼ö ÀÖ´Ù.
[Ç׸ñ 54] native method ¸¦ ºÐº°·Â ÀÖ°Ô »ç¿ëÇÏÀÚ
1.3 ºÎÅÍ native method ¸¦ ½á¼ ¼º´ÉÀ» ³ôÀÌ´Â °ÍÀ» ±ÇÀåÇÏÁö ¾Ê´Â´Ù.
[Ç׸ñ 55] Àß ÆÇ´ÜÇؼ ÃÖÀûÈÇÏÀÚ
¹«Áö¸¦ ºñ·ÔÇÑ ´Ù¸¥ ¾î´ø ÀÌÀ¯º¸´Ù È¿À²¼º(½ÇÁ¦ ´Þ¼ºÇÏÁöµµ ¸øÇϸé¼)À̶õ ¸í¸ñÀ¸·Î ¸ðµç Àü»ê ÀÛ¾÷ÀÇ Á˾ÇÀº ÀúÁú·¯Áø´Ù - William A. Wulf
»ç¼ÒÇÑ È¿À²¼ºÀº Àؾî¾ß ÇÑ´Ù. ³ª¸ÓÁö 97%ÀÇ ½Ã°£À» À̾߱âÇÏÀÚ. ¼º±ÞÇÑ ÃÖÀûÈ´Â ¸ðµç Á˾ÇÀÇ ±Ù¿øÀÌ´Ù. - Donald E. Knuth
ÃÖÀûÈ¿¡´Â ´ÙÀ½°ú °°Àº µÎ °¡Áö ±ÔÄ¢ÀÌ ÀÖ´Ù.
±ÔÄ¢ 1. ÇÏÁö ¸¶¶ó.
±ÔÄ¢ 2 (Àü¹®°¡¸¸ ÇØ´çÇÔ). ¾ÆÁ÷Àº ÇÏÁö ¸¶¶ó. ÃÖÀûÈ°¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀ» 100% È®½ÅÇÏÁö ¸øÇÑ´Ù¸é ÇÏÁö ¸¶¶ó. - M. A. Jackson
ºü¸¥ ÇÁ·Î±×·¥º¸´Ù´Â ÁÁÀº ÇÁ·Î±×·¥À» ¸¸µé±â À§ÇØ ³ë·ÂÇ϶ó.
¼º´ÉÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Â ¼³°è¸¦ ÇÏÁö ¸¶¶ó.
API ¿¡ ´ëÇÑ ¼³°è °áÁ¤ÀÌ ¼º´É¿¡ ¹ÌÄ¡´Â ¿µÇâÀ» °í·ÁÇØ¾ß ÇÑ´Ù.
¼º´ÉÀ» ³ôÀ̱â À§ÇØ API ¸¦ ÇÑ ¹ø ´õ °¨½Î´Â °ÍÀº ¾ÆÁÖ ³ª»Û »ý°¢ÀÌ´Ù.
ÃÖÀûÈ ÀüÈÄÀÇ ¼º´ÉÀ» ÃøÁ¤ÇÏ¿© ºñ±³Ç϶ó.
[Ç׸ñ 56] º¸ÆíÈµÈ ÀÛ¸í ±ÔÄ¢À» µû¸£ÀÚ
CHAPTER 9 Exceptions
[Ç׸ñ 57] ¿¹¿Ü »óȲ¿¡¼¸¸ exception À» »ç¿ëÇÏÀÚ
exception Àº ¸» ±×´ë·Î ¿¹¿Ü»óȲ¿¡¼¸¸ ½á¾ß ÇÑ´Ù.ÇÁ·Î±×·¥ È帧À» exception À¸·Î Á¦¾îÇÏ·Á ÇÏ¸é ¾È µÈ´Ù.
ÁÁÀº API ´Â Ŭ¶óÀ̾ðÆ®°¡ ÇÁ·Î±×·¥ È帧À» Á¦¾îÇÒ ¶§ Exception À» ¾µ ¼ö ¹Û¿¡ ¾øµµ·Ï ¸¸µéÁö ¾Ê´Â´Ù.
[Ç׸ñ 58] º¹±¸ °¡´É »óȲ¿¡´Â checked exception À» »ç¿ëÇÏ°í runtime exception Àº ÇÁ·Î±×·¥ ¿¡·¯¿¡ »ç¿ëÇÏÀÚ
checked exception Àº È£ÃâÀÚ°¡ ¿¹¿Ü»óȲÀ» º¹±¸ÇÒ ¼ö ÀÖ´Ù°í ±â´ëÇÒ ¼ö ÀÖÀ» ¶§ ´øÁø´Ù.
runtime exception Àº ÇÁ·Î±×·¡¹Ö ¿À·ù°¡ ¹ß»ýÇßÀ» ¶§¸¸ ½á¾ß ÇÑ´Ù.
ó¸®ÇÏÁö ¾Ê´Â exception Àº ¸ðµÎ RuntimeException ÀÇ ÇÏÀ§ class ¿©¾ß ÇÑ´Ù.
[Ç׸ñ 59] checked exception ÀÇ ºÒÇÊ¿äÇÑ »ç¿ëÀ» ÇÇÇÏÀÚ
[Ç׸ñ 60] Ç¥ÁØ exception À» »ç¿ëÇÏÀÚ
[Ç׸ñ 61] ÇÏÀ§ °èÃþÀÇ ¿¹¿Ü 󸮸¦ ½ÅÁßÇÏ°Ô ÇÏÀÚ
[Ç׸ñ 62] method °¡ ´øÁö´Â ¸ðµç exception À» ¹®¼ÈÇÏÀÚ
ó¸®ÇØ¾ß ÇÏ´Â exception Àº method ¼±¾ðºÎ¿¡ Çϳª¾¿ ¼±¾ðÇÏ°í, @throws ű׸¦ ½á¼ ¸ðµç exception ÀÌ ¹ß»ýÇÏ´Â »óȲÀ» Á¤È®ÇÏ°Ô ¹®¼ÈÇ϶ó.
unchecked exception Àº @throws ű׸¦ ½á¼ ¸í¼¼ ¹®¼¿¡ ±â¼úÇÏÁö¸¸, method ¼±¾ðÀÇ throws Àý¿¡´Â ³ªÅ¸³ªÁö ¸»¾Æ¾ß ÇÑ´Ù.
´ëºÎºÐ method °¡ °°Àº exception À» ´øÁö´Â class ¶ó¸é, ÀÌ·± ¿¹¿Ü´Â °¢ method ÀÇ ¹®¼È ÁÖ¼®¿¡ ±â¼úÇÏ´Â °Íº¸´Ù Ŭ·¡½ºÀÇ ¹®¼È ÁÖ¼®¿¡ ±â¼úÇÏ´Â °ÍÀÌ ÁÁ´Ù.
[Ç׸ñ 63] ½ÇÆÐ »óȲ Á¤º¸¸¦ »ó¼¼ ¸Þ½ÃÁö¿¡ Æ÷ÇÔÇÏÀÚ
½ÇÆÐ ¿øÀÎÀ» Æ÷ÂøÇÏ·Á¸é, exception ÀÇ ¹®ÀÚ¿ Ç¥Çö¿¡ ¹Ýµå½Ã exception ¹ß»ý¿¡ ¿µÇâÀ» ÁØ ¸ðµç Çʵå¿Í ÀÎÀÚÀÇ °ªÀÌ µé¾î ÀÖ¾î¾ß ÇÑ´Ù.
[Ç׸ñ 64] ½ÇÆÐ ¿øÀÚ¼ºÀ» °®µµ·Ï ³ë·ÂÇÏÀÚ
method È£ÃâÀÌ ½ÇÆÐÇÏ´õ¶óµµ object »óÅ´ method È£Ãâ Àü°ú °°¾Æ¾ß ÇÑ´Ù.
[Ç׸ñ 65] exception À» ¹¬»ìÇÏÁö ¸»ÀÚ
ºó catch ºí·ÏÀº "exception À» ó¸®Ç϶ó"¶ó°í ¾Ë·ÁÁÖ´Â exception ÀÇ Á¸Àç ÀÌÀ¯ ÀÚü¸¦ Áþ¹â´Â °ÍÀÌ´Ù.
catch ºí·Ï ¾È¿¡¼ Á¤¸» ¾Æ¹« °Íµµ ÇÒ °ÍÀÌ ¾ø´Ù¸é ÃÖ¼ÒÇÑ ¿Ö exception À» Àâ¾Æ¼ ó¸®ÇÏÁö ¾Ê°í ¹ö¸®´ÂÁö ±× ÀÌÀ¯¶óµµ ÁÖ¼®À¸·Î ´Þ¾Æ ³õ¾Æ¾ß ÇÑ´Ù.
CHAPTER 10 µ¿½Ã¼º(Concurrency)
[Ç׸ñ 66] °øÀ¯ÇÏ´Â °¡º¯ µ¥ÀÌÅÍ¿¡ Á¢±Ù ½Ã µ¿±âÈÇÏÀÚ
Ȥ½Ã ¼º´ÉÀ» Çâ»ó½ÃÅ°·Á°í ´õ ÀÌ»ó ÂÉ°³ÁöÁö ¾Ê´Â Àϱâ/¾²±â ÀÛ¾÷¿¡ µ¿±âȸ¦ ¾²Áö ¸»¾Æ¾ß ÇÑ´Ù´Â À̾߱⸦ µé¾úÀ»Áö ¸ð¸£Áö¸¸, ÀÌ°ÍÀº ¸Å¿ì À§ÇèÇÑ »ý°¢ÀÌ´Ù.
µ¿±âÈ´Â »óÈ£¹èÁ¦»Ó¸¸ ¾Æ´Ï¶ó, thread ³¢¸® ¹ÏÀ» ¼ö ÀÖ°Ô º¯¼öÀÇ °ªÀ» Àü´ÞÇÒ ¶§µµ ²À ÇÊ¿äÇÑ ÀÛ¾÷ÀÌ´Ù.
ÀÌÁßÈ®ÀÎ ±¸ÇöÆÐÅÏÀº Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.
¿©·¯ thread °¡ º¯°æ °¡´ÉÇÑ µ¥ÀÌÅ͸¦ °øÀ¯ÇÏ·Á¸é ÀÐ°í ¾µ ¶§ ¹Ýµå½Ã Àá±ÝÀåÄ¡¸¦ ¾ò¾î¾ß ÇÑ´Ù.
[Ç׸ñ 67] Áö³ªÄ£ µ¿±âÈ´Â ÇÇÇÏÀÚ
±³Âø »óÅ¿¡ ºüÁöÁö ¾ÊÀ¸·Á¸é µ¿±âÈ method ´Â µ¿±âÈ ºí·Ï ¾È¿¡¼ Ŭ¶óÀ̾ðÆ®¿¡°Ô Á¦¾î¸¦ Àý´ë ³Ñ°Ü¼´Â ¾È µÈ´Ù.
µ¿±âÈ ¿µ¿ª ¾È¿¡¼´Â ÀÛ¾÷À» Á¶±Ý¸¸ ó¸®ÇÏ´Â °ÍÀ» ¿øÄ¢À¸·Î »ï¾Æ¾ß ÇÑ´Ù.
[Ç׸ñ 68] ½º·¹µå ±×·ìº¸´Ù´Â ½ÇÇàÀÚ¿Í ÀÛ¾÷À» »ç¿ëÇÏÀÚ
[Ç׸ñ 69] wait¿Í notify ´ë½Å µ¿½Ã¼º À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇÏÀÚ
[Ç׸ñ 70] ½º·¹µå ¾ÈÀüÀ» ¹®¼È ÇÏÀÚ
[Ç׸ñ 71] ´Ê Ãʱâȸ¦ ºÐº°·Â ÀÖ°Ô »ç¿ëÇÏÀÚ
[Ç׸ñ 72] thread ½ºÄÉÁÙ·¯¿¡ ÀÇÁ¸ÇÏÁö ¸»ÀÚ
ÇÁ·Î±×·¥ÀÇ Á¤È®¼º°ú ¼º´ÉÀ» thread ½ºÄÉÁÙ·¯¿¡ ÀÇÁ¸Çϸé À̽ļºÀÌ ¾ø¾îÁú È®·üÀÌ Ä¿Áø´Ù.
Thread.yield method ¸¦ ½á¼ ÀÌ·± ¹®Á¦¸¦ ¾ïÁö·Î ¶â¾î °íÄ¡·Á ÇÏÁö ¸¶¶ó.
Java Ç÷§Æû¿¡¼ À̽ļºÀÌ °¡Àå ¶³¾îÁö´Â °Í Áß Çϳª°¡ ¹Ù·Î thread ¿ì¼± ¼øÀ§ÀÌ´Ù.
Thread.yield method ·Î ¾òÀ» ¼ö ÀÖ´Â °ÍÀ̶ó°í´Â ÇÁ·Î±×·¥À» ½ÃÇèÇØ º¸±â À§ÇØ ÀϺη¯ µ¿½Ã Á¢±ÙÀ» ´Ã¸± ¼ö ÀÖ´Ù´Â °Í ¹Û¿¡ ¾ø´Ù.
[Ç׸ñ 73] thread ±×·ìÀ» »ç¿ëÇÏÁö ¸»ÀÚ
thread ±×·ìÀº Æó¹°À̳ª ´Ù¸§ ¾ø´Ù.
CHAPTER 11 Á÷·ÄÈ(Serialization)
[Ç׸ñ 74] Serializable interface ¸¦ ºÐº°·Â ÀÖ°Ô ±¸ÇöÇÏÀÚ
¾î¶² class °¡ Serializable interface ¸¦ implements ÇÏ°í ³ª¸é, ÀÏ´Ü ÀÌ class °¡ ¹èÆ÷µÈ ÈÄ¿¡ ±¸ÇöÀ» ¹Ù²Ù´Â µ¥ µå´Â ºñ¿ëÀÌ ¸Å¿ì Ä¿Áø´Ù.
Serializable interface ¸¦ implements ÇÒ ¶§ µÎ ¹ø°·Î °í·ÁÇØ¾ß ÇÒ °ÍÀº ¹ö±×¿Í º¸¾È ±¸¸ÛÀÌ »ý±æ °¡´É¼ºÀÌ Ä¿Áø´Ù´Â °ÍÀÌ´Ù.
Serializable interface ¸¦ implements ÇÒ ¶§ ¼¼ ¹ø°·Î °í·ÁÇØ¾ß ÇÏ´Â °ÍÀº, »õ ¹öÀüÀÇ class ¸¦ ¹èÆ÷ÇÒ ¶§ ½ÃÇèÇØ¾ß ÇÒ °ÍÀÌ ´õ ¸¹¾ÆÁø´Ù´Â °ÍÀÌ´Ù.
Serializable interface ¸¦ implements ÇÏ´Â °ÍÀº ½±°Ô °áÁ¤ÇÒ ¹®Á¦°¡ ¾Æ´Ï´Ù.
inheritance ¸¦ À§ÇØ ¼³°èÇÑ class ¿Í interface ´Â Serializable interface ¸¦ implements, extends ÇÏÁö ¾Ê´Â °ÍÀÌ´Ù.
inheritance ¸¦ À§ÇÑ class °¡ Á÷·Äȸ¦ Áö¿øÇÏÁö ¾Ê±â·Î Çß´Ù¸é, Á¢±ÙÇÒ ¼ö ÀÖ´Â ±âº» »ý¼ºÀÚ¸¦ Á¦°øÇÏ´Â °ÍÀÌ ÁÁ´Ù.
inner class ´Â Serializable interface ¸¦ implements ÇÏÁö ¸» °ÍÀ» °·ÂÇÏ°Ô ±Ç°íÇÑ´Ù.
inner class ÀÇ ±âº» Á÷·ÂÈ ÇüÅ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Á¤ÀÇ°¡ ¾ø´Ù´Â °ÍÀÌ´Ù.
[Ç׸ñ 75] µ¶ÀÚÀûÀÎ Á÷·ÄÈ ÇüÅÂÀÇ »ç¿ëÀ» °í·ÁÇÏÀÚ
±âº» Á÷·ÄÈ ÇüŸ¦ ¾²±â·Î °áÁ¤Çϱâ Àü¿¡ ¹Ýµå½Ã ÀÌ°ÍÀÌ ¿Ã¹Ù¸¥ ¼±ÅÃÀÎÁö ´Ù½Ã ÇÑ ¹ø »ý°¢ÇØ º¸¾Æ¾ß ÇÑ´Ù.
object ÀÇ ³í¸®Àû ³»¿ë°ú ¹°¸®Àû Ç¥ÇöÀÌ °°´Ù¸é ±âº» Á÷·ÄÈ ÇüŸ¦ ½áµµ ÁÁ´Ù.
±âº» Á÷·ÄÈ ÇüŸ¦ ¾²´õ¶óµµ, readObject method ¸¦ Á¦°øÇÏ¿© ºÒº¯±ÔÄ¢°ú º¸¾ÈÀ» È®½ÇÈ÷ º¸ÀåÇØ¾ß ÇÑ´Ù.
object ÀÇ ¹°¸®Àû Ç¥ÇöÀÌ ³í¸®Àû ³»¿ë°ú Â÷ÀÌ°¡ ¸¹ÀÌ ³¯ ¶§ ±âº» Á÷·ÄÈ ÇüŸ¦ ¾²¸é ´ÙÀ½°ú °°Àº ³× °¡Áö ¹®Á¦°¡ »ý±ä´Ù. ¿ÜºÎ¿¡ Á¦°øÇÏ´Â API °¡ class ³»ºÎ »ó¼¼ ±¸Çö¿¡ ¿µ¿øÈ÷ ¾ô¸ÅÀÌ°Ô µÈ´Ù. ¸¹Àº ÀúÀå°ø°£ÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù. ¼º´ÉÀÌ ¶³¾îÁø´Ù. ½ºÅà ¿À¹öÇ÷ο츦 ÀÏÀ¸Å³ ¼ö ÀÖ´Ù.
¸ðµç instance Çʵ尡 transient ¶ó¸é defaultWriteObject ¿Í defaultReadObject method ¸¦ È£ÃâÇÏÁö ¾Ê¾Æµµ ¹®Á¦´Â ¾øÁö¸¸ ±×·¡µµ È£ÃâÇÏ´Â °ÍÀÌ ÁÁ´Ù.
transient °¡ ¾Æ´Ñ Çʵ带 ¸¸µé ¶§´Â Ç×»ó ÀÌ ÇʵåÀÇ °ªÀÌ °´Ã¼ÀÇ ³í¸®Àû ³»¿ëÀÇ ÀϺÎÀÎÁö ´Ù½Ã ÇÑ ¹ø È®ÀÎÇØ¾ß ÇÑ´Ù.
±âº» Á÷·ÄÈ ÇüŸ¦ ¾²´ø ¸ÂÃã Á÷·ÄÈ ÇüŸ¦ ¾²´ø Á÷·Äȸ¦ Á¦°øÇÏ´Â ¸ðµç class ´Â Serial Version UID ¸¦ ¸í½ÃÀûÀ¸·Î Á¦°øÇÏ´Â °ÍÀÌ ÁÁ´Ù.
[Ç׸ñ 76] ¹æ¾î °¡´ÉÇÑ readObject ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÏÀÚ
object ¸¦ ¿ªÁ÷·ÄÈÇÒ ¶§, Ŭ¶óÀ̾ðÆ®°¡ Àý´ë ¾ò¾î¼´Â ¾ÈµÇ´Â object ¸¦ ÂüÁ¶ÇÏ´Â ÇʵåµéÀº ¹Ýµå½Ã ¹æ¾îº¹»çÇØ¾ß ÇÑ´Ù.
[Ç׸ñ 77] ÀνºÅϽº Á¦¾î¿¡´Â readResolve ¸Þ¼Òµåº¸´Ù enum ŸÀÔÀ» »ç¿ëÇÏÀÚ
[Ç׸ñ 78] Á÷·ÄÈµÈ ÀνºÅϽº ´ë½Å Á÷·ÄÈ ÇÁ·Ï½ÃÀÇ »ç¿ëÀ» °í·ÁÇÏÀÚ
Ãâó: http://devx.tistory.com/entry/¼¼·ÃµÇ°í-È¿À²ÀûÀÎ-ÄÚµù¹æ¹ý [Meta Developer Story]