![]() |
||||||
|
||||||
|
À̹ø È£¿¡¼´Â, » Singleton ÆÐÅÏ » Observer ÆÐÅÏ À» ´Ù·ì´Ï´Ù. ÀÌ ¹®¼´Â Java 2 Platform, Standard Edition Development Kit 5.0 (JDK 5.0)À» ±â¹ÝÀ¸·Î °³¹ßµÇ¾ú½À´Ï´Ù. JDK 5.0 ´Ù¿î·Îµå |
||
| Singleton ÆÐÅÏ | ||
|
¼³°è ÆÐÅÏÀº ¼ÒÇÁÆ®¿þ¾î ¼³°è¿¡¼ »ó¿¡¼ÀÇ °øÅë ¹®Á¦¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ¼Ö·ç¼ÇÀ̶ó ÇÒ ¼ö Àִµ¥, ±× ±âº» °³³äÀº ¼Ö·ç¼ÇÀ» ÄÚµå·Î º¯È¯ÇÏ¸é ±× Äڵ带 ´Ù¾çÇÑ ¹®Á¦ »óȲ¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¼³°è ÆÐÅÏ¿¡ °üÇÑ ³íÀÇ´Â Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides µîÀÌ °øµ¿ ÁýÇÊÇÑ Design Patterns: Elements of Reusable Object-Oriented Software¿¡¼ ½ÃÀ۵Ǿú´Ù. ÀÌ Ã¥¿¡¼´Â ÆÐÅÏÀ» »ý¼º, ±¸Á¶, µ¿ÀÛÀÇ ¼¼ °¡Áö ÁÖ¿ä ¿µ¿ªÀÌ Æ÷ÇÔÇÏ¿© ´Ù¾çÇÑ ÁÖÁ¦ ¿µ¿ªÀ¸·Î ºÐ·ùÇϰí ÀÖ´Ù. »ý¼º ÆÐÅÏ(Creational patterns)Àº °´Ã¼°¡ »ý¼ºµÇ´Â(°´Ã¼ ÁöÇâ ¿ë¾î·Î´Â ¡®¿¹½ÃµÇ´Â(instantiated)¡¯) ¹æ½ÄÀ» ±â¼úÇÑ´Ù. ±¸Á¶ ÆÐÅÏ(Structural patterns)Àº °´Ã¼µéÀ» ¿¬°áÇÏ°í °áÇÕÇÏ´Â ¹æ½ÄÀ» µµ¿ÍÁÖ°í, µ¿ÀÛ ÆÐÅÏ(Behavioral patterns)Àº ¾Ë°í¸®Áò ¶Ç´Â Åë½Å ¸ÞÄ¿´ÏÁòÀ» ±â¼úÇÑ´Ù. ¸î °¡Áö °øÅë ÆÐÅÏÀÇ À̸§À¸·Î´Â »ý¼º ¿µ¿ªÀÇ Singleton, µ¿ÀÛ ¿µ¿ªÀÇ Observer, ±¸Á¶ ¿µ¿ª Facade¸¦ µé ¼ö ÀÖ´Ù. º» Å×Å© ÆÁ¿¡¼´Â ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¸Æ¶ô¿¡¼ Singleton ÆÐÅÏÀ» ¸é¹ÐÈ÷ »ìÆìº¸µµ·Ï ÇÑ´Ù. Singleton ÆÐÅÏÀº ÈçÈ÷ »ç¿ëµÇ´Â »ý¼º ÆÐÅÏÀÇ ÇϳªÀÌ´Ù. ÀÌ´Â ÇϳªÀÇ Å¬·¡½º¿¡¼ ¿ÀÁ÷ ÇϳªÀÇ ÀνºÅϽº¸¸ »ý¼ºµÇµµ·Ï º¸ÀåÇÏ´Â ±â¹ýÀ» ±â¼úÇÑ´Ù. ÀÌ´Â º»ÁúÀûÀ¸·Î, Ŭ·¡½º ¿ÜºÎÀÇ ´©±¸µµ °´Ã¼ÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÏÁö ¸øÇÏ°Ô ÇÏ´Â Á¢±Ù¹ýÀ» »ç¿ëÇÑ´Ù. ÀϹÝÀûÀ¸·Î SingletonÀº ´À¸®°Ô »ý¼ºµÇ¾î ÇÊ¿ä ½ÃÁ¡±îÁö ¸Þ¸ð¸®ÀÇ ¿ä±¸¸¦ ÁÙ¿©ÁØ´Ù. ÀÌ Á¢±Ù¹ýÀº ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ±¸ÇöÀÌ °¡´ÉÇÏ´Ù. »ý¼ºµÇ°í ÀÖ´Â ÇϳªÀÇ ÀνºÅϽº°¡ ¼ºêŬ·¡½º°¡ µÇ¸®¶ó´Â °ÍÀ» ¾Ë°í ÀÖ´Ù¸é, »óÀ§(parant) Ŭ·¡½º¸¦ Ãß»óÈÇÏ°í ¸Þ¼Òµå¸¦ Á¦°øÇÏ¿© ÇöÀçÀÇ ÀνºÅϽº¸¦ ¾òµµ·Ï ÇÑ´Ù. ±× ÀÏ·Ê·Î AWT ÆÐŰÁöÀÇ Toolkit Ŭ·¡½º¸¦ µé ¼ö ÀÖÀ¸¸ç, ToolkitÀ» À§ÇÑ »ý¼ºÀÚ´Â public(ÀÌ Æ¯Á¤ °æ¿ì¿¡´Â µðÆúÆ® »ý¼ºÀÚ)ÀÌ´Ù.
public Toolkit()±×¸®°í Ŭ·¡½º´Â ƯÁ¤ ¼ºêŬ·¡½º(ÀÌ °æ¿ì¿¡´Â Ç÷§ÆûÀ» µû¸§)¸¦ ¾ò±â À§ÇÑ getDefaultToolkit() ¸Þ¼Òµå¸¦ °¡Áø´Ù.
public static Toolkit getDefaultToolkit()½ã ÀÚ¹Ù ·±Å¸ÀÓÀ» žÀçÇÑ Linux Ç÷§Æû »ó¿¡¼ ƯÁ¤ ¼ºêŬ·¡½º´Â sun.awt.X11.XToolkit ŸÀÔÀÌ´Ù. ÇÏÁö¸¸ »ç¿ëÀÚ´Â °øÅë Ãß»ó »óÀ§ Ŭ·¡½ºÀÎ ToolkitÀ» ÅëÇØ Ŭ·¡½º¿¡ ¾×¼¼½ºÇÒ »ÓÀ̹ǷΠÀÌ ºÎºÐ±îÁö ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù.
Collator Ŭ·¡½º´Â ÀÌ ÆÐÅÏÀÇ ¶Ç ´Ù¸¥ ¿¹·Î, ¾à°£ÀÇ Â÷À̰¡ ÀÖ´Ù. ÀÌ Å¬·¡½º´Â 2°³ÀÇ getInstance() ¸Þ¼Òµå¸¦ Á¦°øÇϰí, ¹«ÀÎÀÚ(no-argument) ¹öÀüÀº µðÆúÆ® localeÀ» À§ÇÑ Collator¸¦ ¾ò´Â´Ù. ÀÌ ¶§, »ç¿ëÀÚ´Â ÀÚü localeÀ» Àü´ÞÇÏ¿© ÇØ´ç localeÀ» À§ÇÑ Collator ÀνºÅϽº¸¦ ¾òÀ» ¼ö ÀÖ´Ù. µ¿ÀÏ locale¿¡ ´ëÇÑ Collator¸¦ ¿©·¯ Â÷·Ê ¿äÃ»ÇØµµ µ¿ÀÏÇÑ Collator ÀνºÅϽº¸¦ µ¹·Á¹Þ°Ô µÇ¸ç, »ý¼ºÀÚ ÀÚü´Â º¸È£µÈ´Ù. ÇÑÆí, J2SE Ç¥ÁØ ¶óÀ̺귯¸® Àü¹Ý¿¡ °ÉÃÄ Å¬·¡¼ »ý¼ºÀ» Á¦ÇÑÇÏ´Â À¯»çÇÑ ¹æ½ÄÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Ù.
ÀÌ ½ÃÁ¡¿¡¼ Ŭ·¡½º »ý¼ºÀÚ¿¡ ´ëÇÑ ¾×¼¼½º¸¦ Á¦ÇÑÇϸé ÀÚµ¿ÀûÀ¸·Î SingletonÀÌ µÈ´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖ°ÚÀ¸³ª, ±×·¸Áö ¾Ê´Ù. ¹®Á¦°¡ µÇ´Â ÄÉÀ̽º´Â Calendar Ŭ·¡½ºÀε¥, Calendar Ŭ·¡½º »ý¼ºÀÚ´Â º¸È£µÇ¸ç, ÀÌ Å¬·¡½º´Â Ŭ·¡½º ÀνºÅϽº¸¦ ¾ò±â À§ÇÑ getInstance() ¸Þ¼Òµå¸¦ Á¦°øÇÑ´Ù. ±×·¯³ª getInstance() ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§¸¶´Ù »õ·Î¿î Ŭ·¡½º ÀνºÅϽº°¡ ¾ò¾îÁüÀ¸·Î °á±¹ ÀÌ´Â SingletonÀÌ ¾Æ´Ñ °ÍÀÌ´Ù.
»ç¿ëÀÚÀÇ ÀÚü Singleton Ŭ·¡½º »ý¼º ½Ã¿¡´Â ¿ÀÁ÷ ÇϳªÀÇ ÀνºÅϽº¸¸ »ý¼ºµÇµµ·Ï À¯ÀÇÇØ¾ß ÇÑ´Ù.
public class MySingleton {
private static final MySingleton INSTANCE =
new MySingleton();
private MySingleton() {
}
public static final MySingleton getInstance() {
return INSTANCE;
}
}
Á¤Àû ¸Þ¼Òµå getInstance()´Â ´ÜÀÏ Å¬·¡½º ÀνºÅϽº¸¦ ¸®ÅÏÇÑ´Ù. ´ÜÀÏ ÀνºÅϽº°¡ ¼ºêŬ·¡½ºÀÏ Çʿ䰡 ÀÖ´õ¶óµµ API¸¦ º¯°æÇÒ ÇÊ¿ä´Â ¾ø´Ù´Â Á¡¿¡ ÁÖ¸ñÇÒ °Í.
ÀÌ·ÐÀûÀ¸·Î´Â INSTANCE º¯¼ö°¡ publicÀÏ ¼ö ÀÖÀ¸¹Ç·Î getInstance() ¸Þ¼Òµå´Â ÇÊ¿äÄ¡ ¾ÊÀ¸³ª getInstance() ¸Þ¼Òµå´Â ÇâÈÄ¿¡ ½Ã½ºÅÛÀ» º¯°æÇÒ °æ¿ì À¯¿¬¼ºÀ» Á¦°øÇÑ´Ù. ¹Ù¶÷Á÷ÇÑ °¡»ó ¸Ó½Å ±¸ÇöÀ̶ó¸é Á¤Àû getInstance() ¸Þ¼Òµå¿¡ ´ëÇÑ È£ÃâÀ» Áï½Ã ó¸®(inline)ÇØ¾ß ÇÑ´Ù.
Singleton »ý¼º ÀÛ¾÷Àº À̰ÍÀ¸·Î ±×Ä¡Áö ¾Ê´Â´Ù. Áï, Singleton Ŭ·¡½º¸¦ Serializable·Î ¸¸µé Çʿ䰡 ÀÖ´Ù¸é ¹Ýµå½Ã readResolve() ¸Þ¼Òµå¸¦ Á¦°øÇØ¾ß ÇÑ´Ù.
/**
* Ensure Singleton class
*/
private Object readResolve() throws ObjectStreamException {
return INSTANCE;
}
readResolve() ¸Þ¼Òµå°¡ °®Ãß¾îÁø »óÅ¿¡¼ deserializationÀº ´ÜÀÏ(¿ÀÁ÷ ÇϳªÀÇ) °´Ã¼(getInstance() ¸Þ¼Òµå¿¡ ´ëÇÑ È£Ãâ¿¡ ÀÇÇØ »ý¼ºµÇ´Â °Í°ú µ¿ÀÏÇÑ °´Ã¼ÀÌ´Ù)·Î ±Í°áµÇ´Âµ¥, »ç¿ëÀÚ°¡ readResolve() ¸Þ¼Òµå¸¦ Á¦°øÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â °´Ã¼¸¦ deserializeÇÒ ¶§¸¶´Ù °´Ã¼ ÀνºÅϽº°¡ »ý¼ºµÈ´Ù.
Singleton ÆÐÅÏÀº ¿ÀÁ÷ ´ÜÀÏÇÑ ¸®¼Ò½º¸¸ °¡Áö°í ÀÖ°í ±× ´ÜÀÏ ¸®¼Ò½ºÀÇ »óÅ Á¤º¸¿¡ ´ëÇÑ ¾×¼¼½º¸¦ °øÀ¯ÇÒ Çʿ䰡 ÀÖÀ½À» ¾Ë°í ÀÖÀ» °æ¿ì¿¡ À¯¿ëÇÏ´Ù. ¼³°è ½Ã¿¡ Singleton ÆÐÅÏÀÇ Çʿ伺À» ÆÄ¾ÇÇÏ¸é °³¹ßÀ» °£¼ÒÈÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ¶§·Î´Â ¼º´É ¹®Á¦·Î Äڵ带 refactorÇÏ°í ³ªÁß¿¡ ÆÐÅÏÀ» »ç¿ëÇÏ°Ô µÇ±â±îÁö Çʿ伺À» ÀνÄÇÏÁö ¸øÇÏ´Â ¼ö°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î, ÇÁ·Î±×·¥ÀÌ µ¿ÀÏÇÑ Å¬·¡½ºÀÇ ÀνºÅϽº¸¦ ¹Ýº¹ »ý¼ºÇÏ¿© »óÅ Á¤º¸¿Í ÇÔ²² Àü´ÞÇϱ⠶§¹®¿¡ ½Ã½ºÅÛ ¼º´ÉÀÌ ÀúÇϵǴ °æ¿ì°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. Singleton ÆÐÅÏÀ¸·Î º¯°æÇÏ¸é µ¿ÀÏÇÑ °´Ã¼°¡ ¹Ýº¹µÇ´Â °ÍÀ» ¹æÁöÇÒ ¼ö Àִµ¥, ÀÌ´Â ½Ã½ºÅÛÀÌ °´Ã¼¸¦ Àç»ý¼ºÇϴµ¥ µå´Â ½Ã°£À» Á¦°ÅÇØÁÙ »Ó ¾Æ´Ï¶ó garbage collector°¡ ÀνºÅϽºµéÀ» »èÁ¦ÇÏ´Â µ¥ ¼Ò¿äµÇ´Â ½Ã°£À» ÁÙ¿©ÁØ´Ù. °£´ÜÈ÷ ¸»Çؼ, ´ÜÀÏÀÇ, ±×¸®°í ¿ÀÁ÷ ÇϳªÀÇ Å¬·¡½º ÀνºÅϽº¸¸ »ý¼ºµÇµµ·Ï ÇϰíÀÚ ÇÒ ¶§ Singleton ¼³°è ÆÐÅÏÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù. »ý¼ºÀÚ°¡ ¿¬»êÀ» ¿ä±¸ÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â ºó private »ý¼ºÀÚ(¶Ç´Â ¼ºêŬ·¡½º°¡ ÇÊ¿äÇÒ °æ¿ì¿¡´Â º¸È£µÈ »ý¼ºÀÚ)¸¦ Á¦°øÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é µðÆúÆ®°ªÀ¸·Î ½Ã½ºÅÛÀÌ public »ý¼ºÀÚ¸¦ Á¦°øÇÏ°Ô µÇ´Âµ¥, ÀÌ´Â SingletonÀ¸·Î ÀÛ¾÷ ½Ã ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº °á°ú¶ó ÇÒ ¼ö ÀÖ´Ù. SingletonÀº ÁÖ¾îÁø Ŭ·¡½º ·Î´õ ³»¿¡¼¸¸ °íÀ¯¼ºÀÌ º¸ÀåµÈ´Ù´Â Á¡¿¡ À¯ÀÇÇÒ °Í. º¹¼öÀÇ ¼·Î ´Ù¸¥ ¿£ÅÍÇÁ¶óÀÌÁî ÄÁÅ×À̳ʿ¡ °ÉÃÄ µ¿ÀÏÇÑ Å¬·¡½º¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â °¢ ÄÁÅ×À̳ʿ¡ ´ëÇØ ÇϳªÀÇ ÀνºÅϽº¸¦ ¾ò°Ô µÈ´Ù. Singleton ÆÐÅÏÀº Á¾Á¾ Factory ÆÐÅÏÀ̶ó ºÒ¸®´Â ´Ù¸¥ ÆÐÅϰú ÇÔ²² »ç¿ëµÇ´Âµ¥, Factory ÆÐÅϵµ Singleton ÆÐÅϰú ¸¶Âù°¡Áö·Î »ý¼º ÆÐÅÏÀÇ ÀÏÁ¾ÀÌ´Ù. ÀÌ ÆÐÅÏÀº ƯÁ¤ °´Ã¼ÀÇ ¼ºêŬ·¡½º, ¶Ç´Â º¸´Ù ÀϹÝÀûÀ¸·Î ƯÁ¤ÇÑ ÀÎÅÍÆäÀ̽ºÀÇ ±¸ÇöÀÌ ¾î¶»°Ô ½ÇÁ¦·Î °´Ã¼¸¦ »ý¼ºÇÏ´ÂÁö ±â¼úÇÑ´Ù. Factory ÆÐÅÏÀÇ ÁÁÀº º¸±â·Î Swing BorderFactory Ŭ·¡½º¸¦ µé ¼ö ÀÖ´Ù. ÀÌ Å¬·¡½º´Â ´Ù¾çÇÑ Á¾·ùÀÇ Border °´Ã¼¸¦ ¸®ÅÏÇÏ´Â ÀÏ·ÃÀÇ Á¤Àû ¸Þ¼Òµå¸¦ °¡Áö´Âµ¥, ¼ºêŬ·¡½ºÀÇ ±¸Çö ¼¼ºÎ»çÇ×À» ¼û°Ü¼ factory°¡ ÀÎÅÍÆäÀ̽º ±¸ÇöÀ» À§ÇÑ »ý¼ºÀÚ¸¦ Á÷Á¢ È£ÃâÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ´ÙÀ½Àº BorderFactoryÀÇ »ç¿ë ¿¹Á¦ÀÌ´Ù.
Border line = BorderFactory.createLineBorder(Color.RED);
JLabel label = new JLabel("Red Line");
label.setBorder(line);
¿©±â¼ BorderFactory°¡ LineBorder¸¦ »ý¼ºÇÑ´Ù´Â »ç½ÇÀ̳ª ±× »ý¼º ¹æ¹ýÀº ¼û°ÜÁ® ÀÖ´Ù. À̹ø ƯÁ¤ ¿¹Á¦¿¡¼´Â LineBorder »ý¼ºÀÚ¸¦ Á÷Á¢ È£ÃâÇÒ ¼ö ÀÖÁö¸¸ Factory ÆÐÅÏÀ» ÀÌ¿ëÇÏ´Â ´ëºÎºÐÀÇ °æ¿ì¿¡´Â Á÷Á¢ È£ÃâÀÌ ºÒ°¡´ÉÇÏ´Ù.
Singleton ÆÐÅÏÀ» ±¸ÇöÇϴ Ŭ·¡½º´Â ´Ù¸¥ Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ »ý¼ºÇϱâ À§ÇØ Factory·Î »ç¿ëÇÒ °´Ã¼¸¦ ¸®ÅÏÇÏ´Â °æ¿ì°¡ ÈçÈ÷ Àִµ¥, ÀÌ´Â PopupFactory Ŭ·¡½º¿¡ ÀÇÇÑ Popup °´Ã¼ »ý¼º ¹æ½Ä¿¡ ÀÇÇØ ¿¹ÁõµÈ´Ù.
Singleton factory¸¦ ¾òÀ¸·Á¸é PopupFactoryÀÇ getSharedInstance() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
PopupFactory factory = PopupFactory.getSharedInstance();±×·± ´ÙÀ½ factoryÀÇ getPopup() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© factory¿¡¼ Popup °´Ã¼¸¦ »ý¼ºÇϰí, »óÀ§ ÄÄÆ÷³ÍÆ®, ±× ÄÜÅÙÃ÷, Æ÷Áö¼ÇÀ» Àü´ÞÇÑ´Ù.
Popup popup = factory.getPopup(owner, contents, x, y);º¸¾È ÄÁÅØ½ºÆ®¿¡¼ Factory ÆÐÅÏÀÌ ÀÚÁÖ »ç¿ëµÇ´Â °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦¿¡¼´Â ƯÁ¤ ¾Ë°í¸®Áò¿¡ ´ëÇÑ certificate factory¸¦ ȹµæÇÑ ´ÙÀ½ stream certificate¸¦ »ý¼ºÇÑ´Ù.
FileInputStream fis = new FileInputStream(filename);
CertificateFactory cf =
CertificateFactory.getInstance("X.509");
Collection c = cf.generateCertificates(fis);
BorderFactory¿¡¼ º» °Íó·³, Factory ÆÐÅÏÀÌ ¹Ýµå½Ã Singleton ÆÐÅϰú ÇÔ²² »ç¿ëµÇ¾î¾ß ÇÏ´Â °ÍÀº ¾Æ´ÏÁö¸¸ ½ÇÁ¦·Î´Â µÎ ÆÐÅÏÀÌ ÇÔ²² »ç¿ëµÇ´Â °æ¿ìµµ Á¾Á¾ º¼ ¼ö ÀÖ´Ù.
¸Ç À§·Î |
||
| Observer ÆÐÅÏ | ||
¾Õ¼ ´Ù·é Singleton ÆÐÅϰú ¸¶Âù°¡Áö·Î, Observer ÆÐÅÏÀº ÀÚ¹Ù ÇÁ·Î±×·¥¿¡¼ ¸¹ÀÌ »ç¿ëµÇ´Â ¼³°è ÆÐÅÏÀÌ´Ù. ÀÌ ÆÐÅÏÀº µ¿ÀÛ ¼³°è ÆÐÅÏÀ¸·Î, Ŭ·¡½º°¡ ´À½¼ÇÏ°Ô ¿¬°áµÇ´Â ¹æ½Ä°ú Ÿ Ŭ·¡½º ¾÷µ¥ÀÌÆ® ½Ã ÇϳªÀÇ(¶Ç´Â ´Ù¼öÀÇ) Ŭ·¡½º°¡ ÅëÁöµÇ´Â ¹æ½ÄÀ» Á¤ÀÇÇÑ´Ù. ±âº»ÀûÀ¸·Î, À̴ ƯÁ¤ Àå¼Ò¿¡¼ ¹«½¼ ÀÏÀÌ ¹ß»ýÇÒ °æ¿ì, À̸¦ º¸°íÀÖ¾ú°Å³ª °ü½ÉÀ» °¡Áö°í ÀÖ´ø »ç¶÷µé¿¡°Ô »óȲÀ» ÅëÁöÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. Observer ÆÐÅÏÀ» Ãë±ÞÇÏ´Â ¹æ½Ä¿¡´Â µÎ °¡Áö°¡ Àִµ¥, ù ¹øÂ° ¹æ½ÄÀº java.util package¿¡¼ º¼ ¼ö ÀÖ´Â Observer¿Í Observable Ŭ·¡½º¸¦ ¼ö¹ÝÇÏ´Â °ÍÀ̰í, µÎ ¹øÂ° ¹æ½ÄÀº ÄÄÆ÷³ÍÆ®¿¡ À̺¥Æ® ¸®½º³Ê¸¦ µî·ÏÇÏ´Â JavaBeans ÄÄÆ÷³ÍÆ® ¸ðµ¨À» µû¸£´Â °ÍÀÌ´Ù.
JavaBeans À̺¥Æ® ¸ðµ¨ »ý¼º¿¡ ¾Õ¼ Observer¿Í Observable Ŭ·¡½º´Â Observable ÆÐÅÏÀÇ ±¸ÇöÀ» ±â¼úÇÑ´Ù. ´Þ¸® ¸»Çؼ ÀÌ Å¬·¡½ºµéÀº Java Ç÷§Æû 1.0 ¹öÀü ¶§ºÎÅÍ »ç¿ëµÇ¾î ¿Ô°í, ±â¼úÀûÀ¸·Î ÇÏÀÚ°¡ ¾ø¾úÀ¸¸ç ¿©ÀüÈ÷ ¶óÀ̺귯¸®¿¡ Á¸ÀçÇϰí ÀÖ´Â °ÍÀÌ´Ù. ¶ÇÇÑ, ÀÌ Å¬·¡½ºµéÀº ¿©ÀüÈ÷ Observable ÆÐÅÏ ±¸Çö¿¡ »ç¿ëÇÒ ¼ö´Â ÀÖÁö¸¸, µÎ ¹øÂ° ¸ðµ¨ÀÎ JavaBeans ÄÄÆ÷³ÍÆ® ¸ðµ¨ÀÌ ÀϹÝÀûÀ¸·Î »ç¿ëµÈ´Ù. Observable ÆÐÅÏ ±¸ÇöÀ» À§ÇØ ÀÌ Å¬·¡½ºµéÀ» »ç¿ëÇÏ´Â µ¥ µû¸¥ ÇÑ °¡Áö Áß¿äÇÑ ¹®Á¦´Â Observable È®ÀåÀÌ ÇÊ¿äÇÏ´Ù´Â Á¡Àε¥, ÀÌ °æ¿ì ÀÚ¹Ù Ç÷§ÆûÀÇ ´ÜÀÏ »ó¼Ó ¼¼°è¿¡¼´Â ºÒ°¡´ÉÇÒ ¼öµµ Àִ Ŭ·¡½º ÇÏÀ̾î¶óŰ ±¸Á¶¸¦ °¿ä ¹Þ°Ô µÈ´Ù.
À̺¥Æ® ¸®½º³Ê¸¦ µî·ÏÇÏ´Â JavaBeans ÄÄÆ÷³ÍÆ® ¸ðµ¨Àº ÀÏ·ÃÀÇ add ¹× remove ¸Þ¼Òµå¸¦ ¼ö¹ÝÇϴµ¥, ¿©±â¼ ¸®½º³Ê ŸÀÔÀº ¸Þ¼Òµå À̸§¿¡ ³»ÀåµÇ¾î ÀÖ´Ù. ¿¹¸¦ µé¾î, ¹öưÀÇ ¼±ÅÃÀ» °üÂûÇϱâ À§Çؼ´Â ÄÄÆ÷³ÍÆ®¿¡ ActionListener¸¦ µî·ÏÇÑ´Ù.
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
...
}
};
JButton button = new JButton("Pick Me");
button.addActionListener(listener);
½Ã½ºÅÛ Á¤ÀÇ Å¬·¡½º¸¦ À§ÇÑ Observer ÆÐÅÏÀº À̰ÍÀÌ ÀüºÎ¶ó°í ÇÒ ¼ö Àִµ¥, ¸®½º³Ê ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϰí, ±×°ÍÀ» °üÂû Subject¿¡ ÷ºÎÇÑ ´ÙÀ½ ±â´Ù¸°´Ù. Subject´Â °üÂûµÇ´Â ´ë»óÀ¸·Î, ´©°¡ °üÂûÇϰí ÀÖ´ÂÁö¸¦ ±â¾ïÇÏ´Â ÀÏÀ» Ã¥ÀÓÁø´Ù. JavaBeans ÄÄÆ÷³ÍÆ® ¸ðµ¨ÀÇ °æ¿ì, Observer °´Ã¼¸¦ ÷ºÎ, ºÐ¸®Çϱâ À§ÇÑ ÀÎÅÍÆäÀ̽º·Î add/remove ¸®½º³Ê ³×ÀÌ¹Ö ÆÐÅÏÀÌ »ç¿ëµÈ´Ù. SubjectÀÇ »óŰ¡ º¯°æµÇ¸é À̸¦ Observer °´Ã¼¿¡ ÅëÁöÇÑ´Ù.
ÆÐÅÏÀÇ ÁÖµÈ ¸ñÇ¥ Áß Çϳª´Â Subject¿Í ObserverÀÇ ´À½¼ÇÑ ¿¬°áÀ» °¡´ÉÄÉ ÇÏ´Â °ÍÀÌ´Ù. JButtonÀÌ ¼±ÅõǸé, ButtonNotificationÀ̶ó ºÒ¸®´Â °¡»ó ¼ºêŬ·¡½ºÀÇ Æ¯Á¤ ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â ´ë½Å ´©±¸³ª ±¸ÇöÇÒ ¼ö ÀÖ´Â ÀÎÅÍÆäÀ̽º·Î ÅëÁö°¡ Ãß»óȵȴÙ. JButtonÀº ÷ºÎµÈ Observer(¸®½º³Ê)°¡ ¾î¶² Ŭ·¡½ºÀÎÁö ÀüÇô °³ÀÇÄ¡ ¾Ê´Âµ¥, ½ÇÁ¦·Î ¹öưÀº ±¸Çö Ŭ·¡½º°¡ ¼öÁ¤µÇ´õ¶óµµ ¿À·ÎÁö Observer°¡ ¸®½º³Ê¸¦ ±¸ÇöÇÑ´Ù´Â »ç½Ç¿¡¸¸ °ü½ÉÀ» °¡Áø´Ù.
Observer ÆÐÅÏ »ç¿ë ½Ã ÁÖÀÇÇÒ Çʿ䰡 ÀÖ´Â ¿©·¯ °¡Áö º¹ÀâÇÑ ¹®Á¦µéÀÌ ÀÖ´Ù. ù°´Â ¸Þ¸ð¸® ´©ÃâÀÇ °¡´É¼ºÀÌ´Ù. Observer¿¡ ´ëÇÑ ·¹ÆÛ·±½º´Â Subject¿¡ ÀÇÇØ °ü¸®µÇ´Âµ¥, Subject°¡ ·¹ÆÛ·±½º¸¦ ÇØÁ¦ÇÒ ¶§±îÁö´Â garbage collector·Î Observer¸¦ Á¦°ÅÇÒ ¼ö ¾ø´Ù. ÀÌ·± °¡´É¼º¿¡ À¯ÀÇÇÏ¿© ÀûÀýÇÑ »óȲ¿¡¼ Observer¸¦ Á¦°ÅÇØ¾ß ÇÑ´Ù. ¾Æ¿ï·¯ (Àû¾îµµ À̺¥Æ® ¸®½º³Ê¸¦ µî·ÏÇÒ ¶§´Â) ÀÏ·ÃÀÇ Observer °´Ã¼°¡ unordered collection¿¡¼ °ü¸®µÈ´Ù´Â Á¡¿¡ ÁÖ¸ñÇÒ °Í. ¸ÕÀú µî·ÏµÈ ¸®½º³Ê°¡ ¸ÕÀú ÅëÁöµÇ´ÂÁö ¸¶Áö¸·¿¡ ÅëÁöµÇ´ÂÁö¸¦ ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä´Â ¾øÀ¸³ª ¹Ýµå½Ã °´Ã¼ A°¡ ¸ÕÀú ÅëÁöµÇ°í ÀÌ¾î¼ °´Ã¼ B°¡ ÅëÁöµÇ´Â cascading ¹æ½ÄÀÇ ÅëÁö°¡ ÇÊ¿äÇÑ °æ¿ì¿¡´Â Áß°£ °´Ã¼¸¦ µµÀÔÇÏ¿© ¼ø¼°¡ ÁöÄÑÁöµµ·Ï ÇØ¾ßÇÑ´Ù. ´ÜÁö Observer¸¦ ƯÁ¤ ¼ø¼·Î µî·ÏÇÑ´Ù°í ÇØ¼ ¹Ýµå½Ã ±× ¼ø¼¿¡ µû¶ó ÅëÁö°¡ ÀÌ·ç¾îÁö´Â °ÍÀº ¾Æ´Ï´Ù.
Observer ÆÐÅÏÀ» ¸ðµ¨¸µÇÏ´Â ÀÚ¹Ù Ç÷§ÆûÀÇ ¶Ç ´Ù¸¥ ¿µ¿ªÀ¸·Î´Â, guaranteed delivery, non-local distribution, persistence µîÀÇ ÀÌÁ¡À» °®Ãá JMS(Java Message Service)¸¦ µé ¼ö ÀÖ´Ù. JMS publish-subscribe ¸Þ½Ã¡ ¸ðµ¨Àº ¹«ÇÑÇÑ ¼öÀÇ °¡ÀÔÀÚ°¡ °ü½É ÀÖ´Â ÁÖÁ¦¸¦ ûÃëÇÒ ¼ö ÀÖ°Ô ÇØÁִµ¥, publishµÈ ÁÖÁ¦¿¡ ´ëÇÑ ¸Þ½ÃÁö°¡ »ý¼ºµÇ¸é ¸ðµç °¡ÀÔÀڵ鿡°Ô ³»¿ëÀÌ ÅëÁöµÈ´Ù. ±× ¹Û¿¡µµ ÀÚ¹Ù Ç÷§Æû¿¡´Â Observer ÆÐÅÏÀ» ¸ðµ¨¸µÇÏ´Â ¿©·¯ ´Ù¸¥ ºÐ¾ß°¡ ÀÖÀ¸¸ç, ÀÌ ÆÐÅÏÀº ÀÚ¹Ù Ç÷§Æû Àü¹Ý¿¡ °ÉÃÄ ÀÚÁÖ »ç¿ëµÈ´Ù. 1995³â¼³°è ÆÐÅÏ(Design Patterns)ÀÌ Ãâ°£µÈ ÀÌ·¡·Î ÀÌ ÆÐÅϵ鿡 ´ëÇØ ´Ù¾çÇÑ °üÁ¡À» Á¦½ÃÇϰí Ãß°¡ ÆÐÅÏÀ» ¼Ò°³ÇÏ´Â ´Ù¸¥ Ã¥µéÀÌ ¹ßÇ¥µÈ ¹Ù ÀÖ´Ù. ±× Áß ´ÙÀ½ µÎ °¡Áö°¡ Àα⸦ ²ø¾ú´Ù. ¶ÇÇÑ, º¸´Ù ½Éµµ ÀÖ´Â ¼³°è ÆÐÅÏ¿¡ °ü½ÉÀÌ ÀÖ´Â µ¶ÀÚ¸¦ À§ÇØ ±â¾÷ ¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÅ°ÅØÃ³ÀÇ ÆÐÅÏ(Patterns of Enterprise Application Architecture) °°Àº Ã¥µéµµ ³ª¿Í ÀÖ´Ù. ¼³°è ÆÐÅÏ ÀϹݿ¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» º¸·Á¸é Wikipedia ¿£Æ®¸®(¿µ¹®)À» ÂüÁ¶Çϱ⠹ٶõ´Ù. ¸Ç À§·Î |
||
º»
¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù. SKDN(Sun Korea Developers Network)¿¡¼ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä. Copyright 2003-2006 Sun Korea, Ltd. All rights reserved. |