CORE
HOME > JAVA > J2SE > CORE
2017.05.22 / 18:00

¼¼·ÃµÇ°í È¿À²ÀûÀÎ ÄÚµù¹æ¹ý - ½ÇÀü - ÃÊ±Þ °³¹ßÀÚ

ducati
Ãßõ ¼ö 261

ÀÌÆåƼºê ÀÚ¹Ù - 10Á¡
Á¶½´¾Æ ºí·ÎÄ¡ ÁöÀ½, ½ÉÀçö ¿Å±è/´ë¿õ 
  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]