º¹ÀâÇÑ GUI °³¹ßÀ» ½±°Ô Çϱâ À§ÇØ iData ±â¹ý »ç¿ëÇϱâ
Jonathan
Simon Ŭ¶óÀ̾ðÆ®Ãø ¼³°èÀÚ/Swing °³¹ßÀÚ, JPMorganChase and
Entology, Inc. 2002³â 1¿ù
Swing ¾ÆÅ°ÅØó´Â ÀÚ¹Ù °³¹ßÀÚµé·Î ÇÏ¿©±Ý ¼ö¸¹Àº µ¥ÀÌÅ͸¦ Ç¥½ÃÇÏ´Â º¹ÀâÇÑ È¸éÀ» ¸¸µé ¼ö
ÀÖ°Ô ÇØÁØ´Ù. ºÒÇàÈ÷µµ ±× µ¥ÀÌÅ͸¦ ´ë±Ô¸ðÀÇ Swing ÄÄÆ÷³ÍÆ®¿¡ À¯ÁöÇÏ´Â °ÍÀº ¾Ç¸ùÀÇ ÄÚµùÀÌ µÉ ¼ö ÀÖ´Ù. ÀÌ
±Û¿¡¼ Jonathan SimonÀº iData Áï intelligent data¶ó´Â ±â¹ýÀ» Á¦½ÃÇÑ´Ù. ¿©·¯ºÐÀº
iData ¾ÆÅ°ÅØó¸¦ »ç¿ëÇؼ ¿©·¯ºÐ ¾ÖÇø®ÄÉÀÌ¼Ç ³»¿¡ Áß¾Ó µ¥ÀÌÅÍ ¸®ÆÄÁöÅ丮¸¦ ¸¸µé
¼ö ÀÖ´Ù. ±×·¸°Ô ÇÔÀ¸·Î½á ¿©·¯ºÐÀº µ¥ÀÌÅ͸¦ ȸ鿡¼ º¸´Ù ¿ÏÀüÈ÷ ºÐ¸®ÇÒ °ÍÀÌ°í ´õ¿í ±ò²ûÇÏ°í À¯Áöº¸¼öÇϱ⠽¬¿î
Äڵ带 ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿©·¯ºÐÀÇ ½ÃÀÛÀ» µµ¿Í ÁÖµµ·Ï ¿¹Á¦ Äڵ带 °®Ãá ¿ÀÇ ¼Ò½º ÅøŶµµ ³ª¿ÍÀÖ´Ù. ÀÌ
±ÛÀ» °è¼Ó ÀÐ¾î ³ª°¡¼ iData ±â¹ý¿¡ ´ëÇØ ´õ ¸¹Àº °ÍÀ» ¾Ë°Ô µÇ°í »ùÇà ±¸Çöµµ º¸±â ¹Ù¶õ´Ù.
°í±Þ Swing ¾ÆÅ°ÅØó´Â °³¹ßÀÚ·Î ÇÏ¿©±Ý À¯·Ê¾øÀÌ º¹ÀâÇÑ È¸éÀ» ¼³°èÇÒ ¼ö
ÀÖ°Ô ÇØÁØ´Ù. ±×·¯ÇÑ È¸éÀº ¿¡·¯°¡ ³ª±â ½±°í À¯Áöº¸¼ö Çϱ⵵ Èûµç ¾öû³ ¾çÀÇ ·ÎÁ÷À» ÇÊ¿ä·Î ÇÏ°ï ÇÑ´Ù. °í±Þ
Swing ÄÄÆ÷³ÍÆ® (¿¹¸¦
µé¸é, JTable°ú JTree °°Àº)¿¡¼´Â Á» ´õ ±¤¹üÀ§ÇÑ Á¤º¸°¡ ÇÊ¿äÇÒ ¶§ ÇÁ·Î±×·¥ ·ÎÁ÷ÀÌ ¼¿À» ±âÃÊ·Î
µ¥ÀÌÅ͸¦ º¸°ü, ÆíÁý, ·£´õ¸µÇÏ¿© Á¾Á¾ ¾î·Á¿î »óȲÀÌ ¹ß»ýÇÏ°ï ÇÑ´Ù. Áö´ÉÀû µ¥ÀÌÅÍ, Áï °í±Þ Á¤º¸¸¦ ´ãÀº
µ¥ÀÌÅÍ´Â °í±Þ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϱâ À§ÇØ ÇÊ¿äÇÑ Áö½ÄÀ» Á¦°øÇÏ´Â ¼¿ µ¥ÀÌÅÍ¿Í ¸¶Âù°¡Áö·Î ÄÄÆ÷³ÍÆ® ¸ðµ¨¿¡ º¸°üµÉ
¼ö ÀÖ´Ù. ÀÌ ±Û¿¡¼ ¼³¸íÇÏ´Â iData ±â¼úÀº Model-View-Controller ¾ÆÅ°ÅØó¸¦ À¯ÁöÇϸé¼
Áö´ÉÇü µ¥ÀÌÅ͸¦ Swing ÄÄÆ÷³ÍÆ®¿Í ÅëÇÕÇϱâ À§ÇÑ Æ÷°ýÀûÀÎ ¾ÆÅ°ÅØó¸¦ ±¸ÃàÇÑ´Ù. ÀÌ´Â µ¥ÀÌÅÍ º¸°ü, µ¥ÀÌÅÍ
Á¶È¸ °£Á¢ Á¢±Ù ¹× È¸é ¼³Á¤ °£Á¢ Á¢±Ù¿¡ ´ëÇØ Áö´ÉÇü µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â ¹ÐÁ¢ÇÏ°Ô ÅëÇÕµÈ °£Á¢ Á¢±ÙÇü ½ºÅ°¸¶¸¦ ÅëÇÏ¿© ÀÌ·ç¾îÁø´Ù. °á°ú·Î ³ª¿À´Â °£Á¢ Á¢±Ù °´Ã¼µéÀº º¹ÀâÇÑ ºñÁî´Ï½º È¸é ·ÎÁ÷°ú º¹À⼺À» ÃÖ¼ÒÈÇÑ »óÈ£
ÀÛ¿ë ±â´ÉÀ» ±¸ÇöÇϱâ À§ÇÑ À¯¿¬ÇÏ°í È®À强 ÀÖ´Â Áß¾Ó ÀúÀå¼Ò¸¦ ¸¸µé¾î³½´Ù.
ÀÚ½ÅÀÇ ÇÁ·ÎÁ§Æ®¿¡ iData ¾ÆÅ°ÅØó¸¦ ÅëÇÕÇÏ´Â °³¹ßÀÚµéÀ» µµ¿ÍÁÙ ¿ÀÇÂ
¼Ò½º iData ÅøŶÀÌ ³ª¿Í ÀÖ´Ù. ÀÌ ÅøŶÀº °£Á¢ Á¢±Ù ÃþÀ» Á¤ÀÇÇÏ´Â °¢Á¾ ÀÎÅ×ÆäÀ̽ºµéÀÇ ÁýÇÕ »Ó ¾Æ´Ï¶ó ±âº»
±¸Çö, ÃÖÀûÈ, »ç¿ëÀÚ Á¤ÀÇ ÆíÁý±â¿Í º¯È¯±âµé, ±×¸®°í ¼ö ¸¹Àº ¿¹Á¦·Î ±¸¼ºµÇ¾îÀÖ´Ù. (Âü°íÀÚ·á).
iData ±â¹ýÀÇ ¼¼
°¡Áö Ãþ iData ±â¹ýÀº ´ÙÀ½ ¼¼ °¡Áö
ÃþÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù
- µ¥ÀÌÅÍ
º¸°ü: iData ±â¹ýÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ DataObjects¿¡ µ¥ÀÌÅ͸¦ º¸°üÇÑ´Ù°í °¡Á¤ÇÑ´Ù.
DataObject´Â »óÀÀÇÏ´Â get[
FieldName ]()°ú
set[FieldName ]() ¸Þ¼Òµå¸¦ °¡Áø
¼ö¸¹Àº Çʵ带 Æ÷ÇÔÇÏ°í ÀÖ´Â ÀÚ¹Ùºó ¹æ½ÄÀÇ °´Ã¼·Î ´À½¼ÇÏ°Ô Á¤ÀǵȴÙ.
-
- ÄÄÆ÷³ÍÆ®¸¦ Ç¥½ÃÇÏ´Â µ¥ÀÌÅÍ °ª °£Á¢
Á¢±Ù: µ¥ÀÌÅÍ °£Á¢ Á¢±Ù ÃþÀº DataObject¸¦
Æ÷ÇÔÇÏ°í ÀÖ´Â °´Ã¼¸¦ Á¤ÀÇÇÏ´Â ÀÎÅÍÆäÀ̽º·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ÀÌ°ÍÀº Áö´ÉÇü µ¥ÀÌÅÍ,Áï iData ÃþÀ¸·Îµµ
¾Ë·ÁÁ® ÀÖ´Ù (iData ÃþÀÌ ÀüüÀûÀÎ ¾ÆÅ°ÅØÃÄÀÇ ¸íĪÀÎ iData ±â¹ý°ú È¥µ¿µÇ¾î¼´Â ¾ÈµÈ´Ù). iData
ÃþÀÇ ÀÎÅÍÆäÀ̽ºµéÀº DataObject ³»ÀÇ Çʵ忡 Á¢±ÙÇÏ°í º¯°æÇϱâ À§ÇÑ ÀϹÝÀûÀÎ ¸Þ¼Òµå¸¦ Á¤ÀÇÇÑ´Ù.
°¢°¢ÀÇ ±¸Ã¼ÀûÀÎ iData Ãþ Ŭ·¡½º´Â ƯÁ¤ ¿ä±¸»çÇ׿¡ ´ëÇØ ÀÌ ÀϹÝÀûÀÎ Á¢±ÙÀÚ¿Í º¯È¯ÀÚ ¸Þ¼Òµå¸¦ ±¸ÇöÇÑ´Ù.
º¸Åë iData ÃþÀÇ ±¸ÇöÀº DataObject¿¡¼ °ªÀ» ¾ò°í ¼³Á¤ÇÑ´Ù. ±×·¯³ª ¿¹¿¡¼µµ º¸°ÚÁö¸¸ ÀÌ·¯ÇÑ
°£Á¢ Á¢±ÙÀº ÆíÁý °ËÁõ, °¡»ó µ¥ÀÌÅÍ ¹× µ¥ÀÌÅÍ Àå½Ä µîÀ» Æ÷ÇÔÇÑ º¹ÀâÇÑ ·ÎÁ÷µéÀ» ±¸ÇöÇϱâ À§ÇÑ Áß¾ÓÀÇ
º¸°ü¼Ò¸¦ ¸¸µç´Ù. iData ·¹º§Àº º¯°æ ºÒ°¡´ÉÇÑ (Àбâ Àü¿ë) µ¥ÀÌÅÍ¿Í º¯°æ °¡´ÉÇÑ(Àбâ/¾²±â) µ¥ÀÌÅ͸¦
À§ÇÑ ±â´ÉÀ¸·Î ´õ ³ª´©¾îÁø´Ù. ÀÌ·¯ÇÑ ±¸ºÐÀº ÆíÁý ·ÎÁ÷ÀÌ ÇÊ¿ä ¾ø´Â º¹ÀâÇÑ ºñÆíÁý µ¥ÀÌÅÍ¿ÍÀÇ ÀÎÅÍÆäÀ̽º¸¦
°£´ÜÇÏ°Ô Çϱâ À§ÇØ ¸¸µé¾îÁ³´Ù.
-
- µ¥ÀÌÅÍ¿¡ ±â¹ÝÇÏ¿© ÆíÁý°ú ·£´õ¸µ ÄÄÆ÷³ÍÆ®¸¦ Ä¿½ºÅ͸¶ÀÌ¡ÇÏ´Â È¸é °£Á¢
Á¢±Ù: Áö´ÉÇü ȸé, Áï iDisplay ÃþÀº iData
Ãþ°ú ¸¶Âù°¡Áö·Î °£Á¢ Á¢±Ù ¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© Áö´ÉÇü ȸéÀ» ±¸ÇöÇÑ´Ù. iDisplay ÃþÀº iData ÃþÀÇ
°´Ã¼µéÀ» ÆíÁýÇÏ°í ·£´õ¸µÇÏ´Â ÄÄÆ÷³ÍÆ®¿¡ ´ëÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÑ´Ù. ÀÌ·¯ÇÑ iDisplay Ãþ
Ä¿½ºÅ͸¶ÀÌÁ¦À̼ÇÀÇ ¿¹¿¡´Â ¼¿ÀÇ ¹è°æ »öÀ» ¹Ù²Ù¾î ¿¡·¯ »óȲÀ» Ç¥½ÃÇÏ´Â °Í°ú iDataÃþÀÇ ±¸Çö ³»¿ëÀÌ ÀÚ½ÅÀÇ
µ¥ÀÌÅ͸¦ ÆíÁýÇϱ⿡ °¡Àå ÀûÇÕÇÑ ÄÄÆ÷³ÍÆ®¸¦ °áÁ¤ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ÀϹÝÀûÀÎ ÆíÁý±â¸¦ ¸¸µå´Â °Í µîÀ» µé ¼ö
ÀÖ´Ù. iDataÃþ°ú ¸¶Âù°¡Áö·Î iDisplay Ãþµµ º¯°æ
ºÒ°¡´ÉÇÑ µ¥ÀÌÅÍ¿Í º¯°æ °¡´ÉÇÑ µ¥ÀÌÅ͸¦ À§ÇÑ ±â´ÉÀ¸·Î ³ª´©¾îÁø´Ù.
ÀÌ ¼¼ °¡Áö ÃþÀº ¼·Î °áÇÕÇÏ¿© µ¥ÀÌÅÍ ÀÚü°¡ ¾Æ´Ñ ÄÄÆ÷³ÍÆ® ¸ðµ¨¿¡ µ¡ºÙ¿©Áö´Â ¹ÐÁ¢ÇÏ°Ô ÅëÇÕµÈ °£Á¢ Á¢±Ù
°´Ã¼ ¼¼Æ®¸¦ ¸¸µç´Ù. ÀÌ ¾ÆÅ°ÅØó´Â Swing¿¡¼ Model-View-Controller ¾ÆÅ°ÅØÃĸ¦ À¯ÁöÇÏ´Â
ÇÑÆí ¼¿ ±â¹ÝÀÇ ±â¼úÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. µ¥ÀÌÅ͸¦ Á¶È¸, Ç¥½Ã, ÆíÁýÇÏ´Â ·ÎÁ÷Àº °¢ ¼¿ ¾È¿¡ ÀÖ´Â Áö´ÉÇü µ¥ÀÌÅÍ
°´Ã¼ ³»¿¡ ĸ½¶ÈµÈ´Ù. ±× °á°ú º¹ÀâÇÑ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º Ç¥½Ã¿Í »óÈ£ÀÛ¿ëÀ» ±¸ÇöÇϱâ À§ÇÑ ±â´ÉÀûÀ¸·Î À¯¿¬ÇÏ°í
È®À强 ÀÖ´Â ±â¹ýÀÌ ¸¸µé¾îÁø´Ù.
±×¸² 1. iData ±â¹ýÀÇ Àüü ¾ÆÅ°ÅØó
Ŭ·¡½º µµÇ¥
´ÙÀ½ ¼½¼Çµé¿¡¼´Â iData ±â¹ý¿¡ ´ëÇÑ ¾ÆÅ°ÅØóÀÇ °¢ ÃþÀ» »ìÆ캼 °ÍÀÌ´Ù. ¿ì¸®´Â ÀÌ ±â¼úÀ» º¸¿© ÁÖ±â
À§ÇØ °¡»óÀÇ ÀÚÀü°Å »óÁ¡ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ºÎºÐµéÀ» ¸¸µé¾î °¥ °ÍÀÌ´Ù.
DataObjects
À§¿¡¼ ¾ð±ÞÇßµíÀÌ, DataObject´Â
»óÀÀÇÏ´Â get[FieldName ]()°ú
set[FieldName ]() ¸Þ¼Òµå¸¦ °¡Áø
¼ö¸¹Àº ÇʵåµéÀ» Æ÷ÇÔÇÏ´Â ÀÚ¹Ùºó ¹æ½Ä °´Ã¼·Î Á¤ÀǵȴÙ. µ¥ÀÌÅÍ ÇʵåµéÀº º¸Åë ºñÁî´Ï½º ¿µ¿ª¿¡ µû¶ó
DataObject ³»¿¡¼ °áÇյȴÙ. ¿ì¸®ÀÇ ¿¹ÀÎ ÀÚÀü°Å »óÁ¡ ¾ÖÇø®ÄÉÀ̼ÇÀº ¿©·¯ Çʵåµé (modelName,
manufacturer, price, cost µî)°ú »óÀÀÇÏ´Â get/set ¸Þ¼Òµå¸¦ °¡Áø BicycleÀ̶ó´Â
DataObject¸¦ °¡Áö°í ÀÖ´Ù. ÀÚÀü°Å »óÁ¡¿¡¼ÀÇ ¶Ç ´Ù¸¥ ÀáÀçÀûÀÎ DataObject·Î´Â Bicycle°ú
À¯»çÇÑ Çʵ带 °¡Áø BicycleComponen¿Í purchasorName, price,
dataOfPurchaseµîÀÇ Çʵ带 °¡Áø Purchase DataObject¸¦ µé ¼ö ÀÖ´Ù. ´ÙÀ½Àº ÀÚÀü°Å
»óÁ¡ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ Bicycle DataObjectÀÇ ÀϺθ¦ º¸¿©ÁÖ´Â ¿¹ÀÌ´Ù.
Listing
1. »ùÇÃ DataObject
public class Bicycle
{
//fields
double price = ...
String manufacturer = ...
...
//default constructor
public Bicycle(){}
//accessors
public Double getPrice()
{
//sometimes its necessary to wrap primitives in related
//Object types...
return new Double(this.price);
}
public String getManufacturer()
{
return this.manufacturer;
}
...
//mutators
public void setPrice(Double price)
{
this.price = price.doubleValue();
}
public void setManufacturer(String manufacturer)
{
this.manufacturer = manufacturer;
}
...
}
|
°£Á¢ Á¢±Ù: iData
Ãþ
À§¿¡¼ ¾ð±ÞÇßµíÀÌ, iDataÃþÀº º¯°æ ºÒ°¡´ÉÇÑ µ¥ÀÌÅÍ¿Í º¯°æ °¡´ÉÇÑ
µ¥ÀÌÅ͸¦ À§ÇÑ ±â´ÉÀ¸·Î ³ª´©¾îÁø´Ù. MutableData ÀÎÅÍÆäÀ̽º´Â ImmutableData ÀÎÅÍÆäÀ̽º¸¦
È®ÀåÇϱ⠶§¹®¿¡, ¿ì¸®´Â º¯°æ ºÒ°¡´ÉÇÑ ±â´ÉÀ» ¸ÕÀú °ËÅäÇÏ°Ú´Ù.
Àбâ Àü¿ëÀÇ Áö´ÉÇü
µ¥ÀÌÅÍ (ImmutableIData)¸¦ À§ÇÑ µ¥ÀÌÅÍ °£Á¢ Á¢±ÙÃþ
ImmutableData ÀÎÅÍÆäÀ̽º´Â iDataÃþÀÇ ÀϺκÐÀÌ´Ù; ÀÌ°ÍÀº º¯°æ
ºÒ°¡´ÉÇÑ iData °£Á¢ Á¢±ÙÀ» ³ªÅ¸³»¸ç, µÎ °¡Áö ¸Þ¼Òµå¿Í ÇϳªÀÇ ±ÇÀåµÇ´Â ¸Þ¼Òµå ¿À¹ö¶óÀ̵ùÀ¸·Î
±¸¼ºµÈ´Ù:
- getData()´Â
DataObject·ÎºÎÅÍ Á¤ÀÇµÈ À¯ÇüÀÇ µ¥ÀÌÅÍ °ªÀ» ¹ÝȯÇÑ´Ù.
- getSouce()´Â
DataObject ÀÚ½ÅÀ» ¹ÝȯÇÑ´Ù.
- toString()
¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵ùÇϸé getData()ÀÇ °á°ú¸¦ Ç¥½ÃÇÏ´Â stringÀ» ¹ÝȯÇÑ´Ù.
Manufacturer Çʵ带 À§ÇÑ ImmutableData ±¸Çö ³»¿ëÀ» ¿¹·Î »ìÆ캸ÀÚ.
Listing
2. ÀÚÀü°Å Á¦Á¶¾÷ÀÚ¸¦ À§ÇÑ ImmutableIData ±¸Çö
public class BicycleManufacturerIData implements ImmutableIData
{
//the DataObject
Bicycle bicycle = null;
public BicycleManufacturerIData(Bicycle bicycle)
{
this.bicycle = bicycle; //cache the DataObject
}
public Object getSource()
{
return this.bicycle; //this simply returns the DataObject
}
public Object getData()
{
//returns the manufacturer field from the DataObject.
//This is the main logical method of the indirection layer.
return bicycle.getManufacturer();
}
public String toString()
{
//create a safe to String method to avoid null pointer exceptions
//while painting...
Object data = this.getData();
if (data != null)
return data.toString();
else
return "";
}
}
|
iData ÅøŶÀº DefaultImmutableData¶ó´Â ImmutableData¸¦ ±¸ÇöÇÏ´Â Ãß»ó
Ŭ·¡½º¸¦ Á¦°øÇÑ´Ù. ÀÌ°ÍÀº getData()¸¦ ¾ÈÀüÇÏ°Ô ¹ÝȯÇϱâ À§ÇØ ObjectÀÇ toString() ¸Þ¼Òµå¸¦
¿À¹ö¶óÀ̵åÇÑ´Ù. ¿ì¸®ÀÇ ³ª¸ÓÁö ¿¹µéÀº iData Ãþ ÀÎÅÍÆäÀ̽ºµéÀÇ ±âº» ±¸Çö ³»¿ëÀ» È®ÀåÇÏ°Ô µÉ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ
±âº» ±¸Çö ³»¿ëµéÀº ÅøŶ¿¡µµ Æ÷ÇԵǾîÀÖ´Ù.
JTable°úÀÇ ÅëÇÕ °è¼ÓÇؼ ¿ì¸®ÀÇ ÀÚÀü°Å »óÁ¡ ¿¹Á¦¸¦ °¡Áö°í iData ±â¼úÀ» JTable¿¡
°áÇÕ½ÃÄѺ¸ÀÚ. Å×À̺íÀº manufacturer, modelName, modelID, price, cost
¹×inventory¿¡ ÇØ´çÇÏ´Â ¿À» °¡Áö°í ÀÖ´Ù. ImmutableIData ±¸ÇöÀÇ ³ª¸ÓÁö°¡
manufacturer iDataÀÇ Äڵ带 µû¶ó ÀÛ¼ºµÇ¾ú´Ù°í °¡Á¤ÇÏÀÚ.
JTable DataModel¿¡ ½ÇÁ¦·Î Ãß°¡µÈ µ¥ÀÌÅ͵éÀº °¢°¢ ÇϳªÀÇ DataObject¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â
ImmutableIDataÀÇ ±¸Çö ³»¿ëµéÀÌ´Ù. ÇϳªÀÇ DataObject¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â iData ÃþÀÇ ±¸ÇöÀ»
Ãß°¡ÇÑ´Ù¶ó´Â °³³äÀº ¾Õ¿¡¼ ¾ð±ÞÇß´ø °£Á¢ Á¢±Ù ÃþÀ» ½ÇÇöÇÑ °ÍÀÌ´Ù. .
±×¸² 2. DataObjectµéÀ» ´ã°íÀÖ´Â
ImmutableIData ±¸Çö ³»¿ë°ú JTable ¼¿
³ª´Â Çѹø¿¡ ÇÑ Çà Àüü¸¦ ¸¸µé¾î ³»´Âµ¥ createRow()¶ó´Â ÇïÆÛ ¸Þ¼Òµå°¡ À¯¿ëÇÏ´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù.
AbstractTableModelÀÇ ¼ºêŬ·¡½º¸¦ »ç¿ëÇÒ ¶§ ÀÌ Çà Àüü°¡ ¸ðµ¨¿¡ Ãß°¡µÉ ¼ö ÀÖ´Ù.
createRow() ¸Þ¼Òµå´Â DataObject¸¦ ¸Å°³º¯¼ö·Î ÃëÇÏ°í ƯÁ¤ Å×ÀÌºí¿¡ ´ëÇØ ÀûÀýÇÑ
ImmutableIData ±¸ÇöÀ» ÀνºÅϽºÈÇÑ´Ù.
Listing
3. createRow() ¸Þ¼Òµå
protected Vector createRow(Bicycle bicycle)
{
Vector vec = new Vector();
vec.add(new BicycleModelNameImmutableIData(bicycle));
vec.add(new BicycleModelIDImmutableIData(bicycle));
vec.add(new BicycleManufacturerImmutableIData(bicycle));
vec.add(new BicyclePriceAndCostImmutableIData(bicycle));
vec.add(new BicycleProfitImmutableIData(bicycle));
vec.add(new BicycleInventoryImmutableIData(bicycle));
return vec;
}
|
Ãß°¡ÀûÀ¸·Î, createRow()¸Þ¼Òµå´Â ¾î¶² ImmutableIData ±¸Çö ³»¿ëÀ» ¸ðµ¨¿¡ µÎ¾î¾ß
ÇÏ´ÂÁö¸¦ ÆǺ°ÇÏ´Â ·ÎÁ÷À» À§ÇÑ Áß¾ÓÀÇ ÀúÀå¼ÒÀÌ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ °£´ÜÇÑ ImmutableIData ±¸ÇöÀ» À§ÇØ
createRow() ¸Þ¼Òµå ³»¿¡ Á÷Á¢ ¼±¾ðµÈ À͸íÀÇ ÀÌ³Ê Å¬·¡½ºµéÀ» »ç¿ëÇϱâ À§ÇÑ Å¬·¡½º °ü¸®ÀÇ Ãø¸é¿¡¼µµ
À¯¿ëÇÏ´Ù.
·£´õ¸µ ¼ø¼ ±âº» rendererµéÀº °´Ã¼ÀÇ toString() ¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î½á ±×µéÀÌ
Ç¥½ÃÇÒ °´Ã¼ÀÇ ¹®ÀÚ¿ Ç¥ÇöÀ» ¸¸µç´Ù. ÀÌ°ÍÀº ImmutableIData ±¸Çö ³»¿ëÀÌ À¯¿ëÇÑ toString()
¸Þ¼Òµå¸¦ °¡Áö´Â °ÍÀÌ Áß¿äÇÑ ÀÌÀ¯ Áß ÇϳªÀÌ´Ù. ·£´õ¸µ ½Ã¿¡ renderer´Â JTable·ÎºÎÅÍ
ImmutableIData ±¸Çö ³»¿ëÀ» ¹Þ´Â´Ù. iData¸¦ ·£´õ¸µÇϱâ À§ÇØ toString() ¸Þ¼Òµå°¡
È£ÃâµÇ¾îÁø´Ù. ´ÙÀ½Àº Àüü ·£´õ¸µ ¼ø¼ÀÌ´Ù.
- iData
±¸Çö»óÀÇ toString()
- iData
±¸Çö»óÀÇ getData()
- DataObject»óÀÇ
get[
FieldName ]()
±×¸² 3. ·£´õ¸µ ¼ø¼
±×¸² 4. Àбâ Àü¿ë Å×À̺í
µ¿Àû ¿µ¼Ó¼º iDataÀÇ µ¥ÀÌÅÍ·Î DataObjects¸¦ »ç¿ëÇϸé iData °£Á¢ Á¢±Ù¿¡ ´ëÇÑ
À¯¿¬¼ºÀ» Á¦°øÇÒ »Ó¸¸ ¾Æ´Ï¶ó µ¿ÀûÀÎ ¿µ¼Ó¼ºÀ» Á¦°øÇÏ´Â À¯¿ëÇÑ µ¥ÀÌÅÍ °£Á¢ Á¢±Ù ÃþÀ» Ãß°¡Çϱ⵵ ÇÑ´Ù. °ªÀÌ
¿ÜºÎ¿¡¼ ¼öÁ¤µÇ´Â Å×À̺íÀÇ ¿¹¸¦ »ý°¢ÇØ º¸ÀÚ. º¸Åë, Ŭ¶óÀ̾ðÆ®´Â ¼öÁ¤µÈ °ªÀ» º¸Á¸ÇÒ ¸ðµ¨ ³»ÀÇ À§Ä¡¸¦ ÃßÁ¤Çϱâ
À§ÇØ º¹ÀâÇÑ ·ÎÁ÷À» ±¸ÇöÇØ¾ß ÇÒ °ÍÀÌ´Ù. iData¿Í DataObject °£Á¢ Á¢±ÙÀ» »ç¿ëÇÏ¸é »õ·Î¿î °ªµéÀÌ
ÀÚµ¿À¸·Î º¸°üµÇ±â ¶§¹®¿¡ ÀÌ ·ÎÁ÷Àº ¿ÏÀüÈ÷ ºÒÇÊ¿äÇÏ°Ô µÈ´Ù. ÀÌ´Â µ¿ÀÏÇÑ DataObject ÀνºÅϽº¸¦ Æ÷ÇÔÇÏ°í
ÀÖ´Â ¿©·¯ °³ÀÇ iData °´Ã¼·Î ¸ðµ¨À» ±¸¼ºÇÑ °á°úÀÌ´Ù. ÇÑ DataObjectÀÇ ³»ºÎ °ªÀÌ º¯°æµÉ ¶§
DataObject ÀÚ½ÅÀº º¯°æµÇÁö ¾ÊÀº ä·Î ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ¸ðµç iData °´Ã¼µéÀº µ¿ÀÏÇÑ ÀνºÅϽº¸¦
°¡¸®Å°±â ¶§¹®ÀÌ´Ù. get °ú set ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© DataObject¸¦ ´Ù½Ã Á¶È¸ÇÏ¸é ¾î¶² ¼öµ¿ÀûÀÎ º¸°ü
¹æ¹ý ¾øÀ̵µ Ç×»ó ÃÖ½ÅÀÇ °á°ú¸¦ ¹ÝȯÇÑ´Ù. ¼öÁ¤½Ã¿¡ Ŭ¶óÀ̾ðÆ®°¡ ¹Ýµå½Ã ¼öÇàÇØ¾ß ÇÏ´Â À¯ÀÏÇÑ ÇàÀ§´Â ´Ù½Ã
Ç¥½ÃÇÏ´Â °ÍÀε¥, ±×·¯¸é renderer°¡ ¼öÁ¤µÈ ¼¿À» ´Ù½Ã ·£´õ¸µÇÏ¿© Â÷·Ê·Î »õ·Î¿î µ¥ÀÌÅÍ °ªÀ» Á¶È¸ÇÏ°í
Ç¥½ÃÇÑ´Ù.
ÀÌ·¯ÇÑ °£Á¢ Á¢±ÙÀÇ ÇÑ °á°ú´Â ÅëÀÏµÈ Å¬¶óÀ̾ðÆ® µ¥ÀÌÅÍ Ä³½¬¸¦ °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÄÄÆ÷³ÍÆ®µéÀÌ Áß¾ÓÀÇ
Ŭ¶óÀ̾ðÆ® ij½¬·ÎºÎÅÍ iData °£Á¢ Á¢±Ù°ú DataObjects¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤Çϸé, ¸ðµç µ¥ÀÌÅÍ ¼öÁ¤
³»¿ëÀº ¾ÖÇø®ÄÉÀÌ¼Ç Àüü¿¡ µ¿ÀûÀ¸·Î º¸°üµÈ´Ù. ÀÌ°ÍÀº °Å·¡¿ë ½Ã½ºÅÛ°ú µ¿Àû µ¥ÀÌÅ͸¦ Ç¥½ÃÇØ¾ß ÇÏ´Â ¿©Å¸ÀÇ
Ŭ¶óÀ̾ðÆ®µéÀ» »ó´çÈ÷ ´Ü¼øȽÃų ¼ö ÀÖ´Ù.
¿¹: °¡»ó ¿
(virtual columns) iData ±â¹ýÀÇ À¯¿¬¼ºÀ» º¸¿©ÁÖ´Â ÇÑ ¿¹°¡ °¡»ó ¿ÀÌ´Ù.
°¡»ó ¿Àº ¸ðµ¨¿¡¼´Â ¸í½ÃÀûÀ¸·Î µå·¯³ªÁö ¾Ê°í ¿ÀÈ÷·Á ¿©·¯ ÇʵåµéÀ» ÇÕ¼ºÇÑ °ÍÀ̶ó ÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅ͸¦ º¸°üÇÏ´Â
¿À» ¸»ÇÑ´Ù. price¿Í cost°£ÀÇ Â÷À̸¦ Ç¥ÇöÇÏ´Â profitÀ̶ó´Â ¿À» °¡Á¤Çغ¸ÀÚ. ±×·¯ÇÑ ¿À» ¸¸µé±â
À§Çؼ´Â getData()°¡ price¿Í cost °£ÀÇ Â÷¾×À» ¹ÝȯÇÏ´Â ImmutableIData ±¸ÇöÀ»
ÀÛ¼ºÇÏ¸é µÈ´Ù.
Listing
4. ¼øÀÍ °¡»ó ¿
public class BicycleProfitImmutableIData extends DefaultImmutableIData
{
...
public Object getData()
{
//return the difference of the price and cost field from the DataObject
return new Double(bicycle.getPrice() - bicycle.getCost());
}
}
|
Ç¥ÁØ ¸ðµ¨·Î ÀÌ·¯ÇÑ À¯ÇüÀÇ °¡»ó ÇàÀ» ¸¸µé¾î ³»·Á¸é »ó´çÇÑ ¾çÀÇ ·ÎÁ÷ÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. óÀ½¿¡´Â ¸ðµ¨ÀÌ
Á¤È®ÇÑ °ªÀ» ¹ÞÀ» °ÍÀÌ´Ù. ±×·¯³ª price ȤÀº cost°¡ ¼öÁ¤µÇ¾úÀ» ¶§ ¾ÖÇø®ÄÉÀÌ¼Ç Àüü¿¡ profit °ªÀ»
¼öÁ¤Çϱâ À§ÇØ º¹ÀâÇÏ°í ¿¡·¯ ³ª±â ½¬¿î ·ÎÁ÷ÀÌ ÇÊ¿äÇØÁö¸é¼ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. iData ±â¹ý¿¡¼´Â price³ª
cost°¡ º¯ÇÏ´õ¶óµµ ¼öÁ¤ÀÌ ÇÊ¿äÇÏÁö ¾Ê´Ù. ¿µ¼Ó¼ºÀÌ µ¿ÀûÀ¸·Î ÀÌ·ç¾îÁø´Ù.
±¸¼º¿ä¼Ò·Î iData °´Ã¼ »ç¿ëÇϱ⠰£Á¢ Á¢±Ù ÃþÀº iData °´Ã¼ÀÇ ±×·ìÀ¸·Î ±¸ÇöµÇ¾î »ó´çÇÑ ÀÌÁ¡À» Á¦°øÇÑ´Ù. ¿¹¸¦
µé¾î, µÎ °¡Áö µ¥ÀÌÅÍ °ªÀ» ´õÇÏ´Â PirceAndCost Ç¥ÇöÀº ¶ÇÇÑ Á¶ÇÕÀ» »ç¿ëÇؼ ±¸ÇöµÉ ¼öµµ ÀÖ´Ù.
»õ·Î¿î CompositePriceAndCost Ç¥Çö¿¡¼ DataObject·ÎºÎÅÍ Á÷Á¢ ¾çÂÊÀÇ µ¥ÀÌÅÍ °ªµéÀ»
Á¶È¸ÇÏ´Â ´ë½Å, ¿ì¸®´Â ¾Õ¼ ÀÛ¼ºÇÑ BicyclePriceImmutableIData¿Í
BicycleCostImmutableIData °´Ã¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. getData() ¸Þ¼Òµå´Â ±¸ºÐÀÚ -ÀÌ
°æ¿ì¿¡´Â »ç¼± (/)- ¿¡ ÀÇÇØ Ç¥½ÃµÈ µÎ iData Ãþ ±¸Çöµé·ÎºÎÅÍ Á¶È¸µÈ °ªµéÀ» ÷°¡ÇÔÀ¸·Î½á ¹Ýȯ ¹®ÀÚ¿À»
¸¸µé¾î³½´Ù. °á°ú·Î ³ª¿À´Â getData() ¸Þ¼Òµå´Â ´ÙÀ½°ú °°´Ù.
Listing
5. PriceAndCostImmutableIDataÀÇ Á¶ÇÕ ±¸Çö
public Object getData()
{
// append the price, a slash, and the cost using pre-built iData
// implementations
return new String( (String)priceIData.getData() + " / " +
(String)costIData.getData() );
}
|
¼·Î ´Ù¸¥ iData ±¸Çö ³»¿ëÀ» °áÇÕÇÏ´Â ±â¼úÀº ÄÚµå Àç»ç¿ë°ú À¯¿¬¼ºÀ» Çâ»ó½ÃŲ´Ù. ¿©·¯ºÐÀº ±âÁ¸ÀÇ
iData ±¸ÇöµéÀ» ´Ù¸£°Ô Á¶ÇÕÇÏ¿© »õ·Î¿î iData ±¸ÇöÀÇ °³¹ßÀ» ½ÃÀÛÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ Á¶ÇÕÀº ·±Å¸Àӽÿ¡
iData ±¸Çö ³»¿ëÀÌ µ¿ÀûÀ¸·Î Á¶ÇյǴ °ÍÀ» ¿ëÀÌÇÏ°Ô Çϱ⠶§¹®¿¡ À¯¿¬¼ºÀÌ ³ô¾ÆÁú »Ó ¾Æ´Ï¶ó ±¸Ã¼ÀûÀΠŬ·¡½º°¡
Àû¾îÁø´Ù. ÅøŶ¿¡´Â °£´ÜÇÑ Á¶ÇÕ ±â¹ÝÀÇ iData °´Ã¼¸¦ ±¸ÇöÇϱâ À§ÇÑ ´Ù¼öÀÇ ÇïÆÛ Å¬·¡½º°¡ µé¾î Àִµ¥,
¿©±â¿¡´Â iDataÀÇ ¹®ÀÚ¿ Ç¥ÇöÀ» Àå½ÄÇϱâ À§ÇØ Á¢¹Ì»ç¿Í (ȤÀº) Á¢µÎ»ç¸¦
°¡Áø ÀÓÀÇÀûÀÎ iData °´Ã¼¸¦ ÃëÇÏ´Â prefix and suffix string decorator iData
±¸ÇöÀÌ Æ÷ÇԵȴÙ.
reflection ±â¹ÝÀÇ ImmutableIData ±¸Çö
(UniversalImmutableIData) iData ¹æ½ÄÀÇ ÃÖ´ë ´ÜÁ¡Àº Ŭ·¡½º ±ÞÁõÀÌ´Ù. iData Ŭ·¡½ºÀÇ ¼ö´Â
´ë´ÜÀ§ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ºü¸£°Ô ºÒ¾î³¯ ¼ö ÀÖ´Ù. iData Ãþ ±¸ÇöÀÇ ´ë´Ù¼ö´Â °°Àº ¼ø¼¸¦ ¹Ýº¹Çϴµ¥, ¿©±â¿¡¼
getData() ¿äûÀº DataObject ³»ÀÇ get[FieldName ]() ¸Þ¼Òµå·Î ³Ñ°ÜÁø´Ù.
ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î refectionÀ» ÀÌ¿ëÇÏ¿© ±¸ÇöµÈ´Ù. ÅøŶ¿¡´Â UniversalImmutableData¶ó´Â
reflection ±â¹ÝÀÇ ImmutableIData ±¸Çö ³»¿ëÀÇ ±âº» ±¸ÇöÀÌ µé¾î ÀÖ´Ù.
UniversalImmutableData´Â ÃʱâÀÇ ¸Å°³º¯¼ö·Î ÇÑ DataObject¿Í Çʵå À̸§À» ÃëÇÑ´Ù.
³»ºÎÀûÀ¸·Î UniversalImmutableData´Â Çʵå À̸§À¸·Î get[[FieldName ]()
¸Þ¼Òµå¸¦ Á¶È¸Çϴµ¥, ÀÌ ¸Þ¼Òµå´Â getData()³ª toString() ¸Þ¼Òµå°¡ ºÒ¸®¿öÁú ¶§ È£ÃâµÈ´Ù. ÀÌ·±
¹æ½ÄÀº reflectionÀÇ »ç¿ëÀ¸·Î ÀÎÇÑ ¾à°£ÀÇ ¼º´É ÀúÇϸ¦ °¡Á®¿À´Â ´ë½Å °³¹ßÀ» ´Ü¼øÈÇÏ°í Ŭ·¡½º ±ÞÁõÀ»
ÁÙÀδÙ. ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǵéÀº ÀÌ·¯ÇÑ ¼º´É ÀúÇÏÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê°ÚÁö¸¸ Å« ±Ô¸ð ȤÀº ½Ç½Ã°£ ¾ÖÇø®ÄÉÀ̼Ç
°³¹ßÀÚµéÀº ÀÌ Á¡À» ¿°µÎ¿¡ µÎ¾î¾ß ÇÑ´Ù.
Listing
6. UniversalImmutableIData¸¦ »ç¿ëÇÏ´Â createRow() ¸Þ¼Òµå
protected Vector createRow(Bicycle bicycle)
{
Vector vec = new Vector();
vec.add(new UniversalImmutableIData(bicycle, "modelName"));
vec.add(new UniversalImmutableIData(bicycle, "modelID"));
vec.add(new UniversalImmutableIData(bicycle, "manufacturer"));
vec.add(new UniversalImmutableIData(bicycle, "priceAndCost"));
vec.add(new UniversalImmutableIData(bicycle, "inventory"));
return vec;
}
|
Listing 7. reflection ±â¹ÝÀÇ
UniversalImmutableIData
protected String field = ... //the field name
protected Method accessorMethod = ... //the accessor method
protected Object source = ... //the DataObject
...
protected void setMethods()
{
if (field == null || field.equals(""))
return;
//capitalize the first letter of the field, so you get getName,
//not getname...
String firstChar = field.substring(0,1).toUpperCase();
//remove first letter
String restOfField = field.substring(1);
//add together the string "get" + the capitalized first letter,
//plus the remaining
String fieldAccessor = "get" + firstChar + restOfField;
//cache the method object for future use
this.setAccessorMethod(fieldAccessor);
}
...
protected void setAccessorMethod(String methodName)
{
try
{
accessorMethod = source.getClass().getMethod(methodName, null);
}
catch ( ... )
{
...
}
}
...
public Object getData()
{
try
{
return accessorMethod.invoke(source, null);
}
catch ( ... )
{
...
}
}
|
ÆíÁý °¡´ÉÇÑ Áö´ÉÇü
µ¥ÀÌÅÍ(MutableIData)¸¦ À§ÇÑ µ¥ÀÌÅÍ °£Á¢ Á¢±Ù Ãþ MutableIData´Â ImmutableIData¸¦ º¯°æ °¡´ÉÇϵµ·Ï ¸¸µé±â À§ÇØ
setData() ¸Þ¼Òµå¸¦ Ãß°¡ÇØ ImmutableIData¸¦ È®ÀåÇÑ´Ù. setData() ¸Þ¼Òµå´Â »õ·Î¿î µ¥ÀÌÅÍ °ªÀ» ¸Å°³º¯¼ö·Î ÃëÇÏ¸ç º¯°æÀÌ ¼º°øÇß´ÂÁö¸¦ º¸¿©ÁÖ´Â
ºÎ¿ï °ªÀ» ¹ÝȯÇÑ´Ù. DataObjectÀÇ ÇØ´ç Çʵ忡 ´ëÇØ Ä³½¬µÈ µ¥ÀÌÅÍ À¯Çü°ú ÀÏÄ¡½ÃÅ°±â
À§Çؼ´Â º¸Åë »õ·Î¿î µ¥ÀÌÅÍ °ªÀ» setData() ¸Þ¼Òµå¿¡ Àü´ÞÇØ¾ß ÇÑ´Ù. Ç¥ÁØ
±¸ÇöÀº °´Ã¼ À¯ÇüÀ» ¾ÈÀüÇÏ°Ô Å×½ºÆ®ÇÏ¿©, Ŭ·¡½º À¯ÇüÀÌ ÀÏÄ¡ÇÏÁö ¾Ê´Â °æ¿ì false¸¦
¹ÝȯÇÑ´Ù.
Listing
8. ÀÚÀü°Å Á¦Á¶ ¾÷ü¸¦ À§ÇÑ MutableIData
public boolean setData(Object data)
{
if (!data instanceof String)
return false;
((Bicycle)this.getSource()).setManufacturer((String)data);
return true;
}
|
ÀÏ´Ü ¸ðµç »õ·Î¿î MutableIData °´Ã¼°¡ ÀÛ¼ºµÇ¸é, ´ëÀÀµÇ´Â Immutable ÀνºÅϽº ´ë½Å¿¡
MutableIData ÀνºÅϽº¸¦ ÀνºÅϽºÈÇϱâ À§ÇØ getRow() ¸Þ¼Òµå¸¦ ¼öÁ¤ÇÑ´Ù. ³ª´Â ÇÑ Çʵ尡 º¯°æ
ºÒ°¡´ÉÇÒ °æ¿ì ´ÜÁö ImmutableIData °´Ã¼¸¦ ¸¸µé¸é µÈ´Ù´Â °ÍÀ» ¹ß°ßÇÏ¿´´Ù. ±× ¿ÜÀÇ ¹æ¹ýÀ¸·Î ³ª´Â
setData() ¸Þ¼Òµå°¡ È£ÃâµÇÁö ¾ÊÀ» °ÍÀÓÀ» ¾Æ´Â »óÅ·ΠMutableIData¸¦ ¸¸µé°í ±×°ÍÀ» °£´ÜÈ÷ Àбâ
Àü¿ë Å×ÀÌºí¿¡¼ »ç¿ëÇÑ´Ù.
»ç¿ëÀÚ Á¤ÀÇ ÆíÁý±âµé ¿©·¯ºÐÀÇ µ¥ÀÌÅ͸¦ ¼öÁ¤ °¡´ÉÇÏ°Ô ¸¸µé¾ú±â ¶§¹®¿¡ Ä¿´Ù¶õ º¯È°¡ Á¸ÀçÇÑ´Ù: Áï µ¥ÀÌÅ͸¦
ÆíÁýÇÏ·Á¸é »ç¿ëÀÚ Á¤ÀÇ ÆíÁý±â°¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀÌ´Ù. ±âº» ÆíÁý±â¸¦ »ç¿ëÇÒ °æ¿ì JTableÀº Object À¯ÇüÀÇ
µ¥ÀÌÅÍ ÆíÁý±â¸¦ ºÎ¸¦ °ÍÀε¥, ÀÌ´Â ½ÇÁ¦·Î´Â String ÆíÁý±âÀÌ´Ù. ÀÏ´Ü ÆíÁýÀÌ ³¡³ª¸é ÆíÁý±â´Â ¸ðµ¨¿¡ º¸°üµÉ
String °ªÀ» ¹ÝȯÇϴµ¥, iData ÃþÀÇ ±¸ÇöÀ» String
°ªÀ¸·Î ´ëüÇÑ´Ù. ´ÙÀ½ÀÇ µµÇ¥´Â ÆíÁý±â°¡ iData °£Á¢ Á¢±ÙÀÇ ¹«°á¼ºÀ» À¯ÁöÇϱâ À§ÇØ µû¶ó¾ß ÇÏ´Â ¼ø¼¸¦
³ªÅ¸³½ °ÍÀÌ´Ù.
±×¸² 5. ÆíÁý
¼ø¼
ºñ·Ï ±âÁ¸ÀÇ ÆíÁý±âµéÀÌ ÀÌ·¯ÇÑ ¼ø¼¸¦ µû¸£µµ·Ï È®ÀåµÉ ¼ö ÀÖÁö¸¸ ±×·¯ÇÑ ¹æ½ÄÀº ºñÇö½ÇÀûÀÌ´Ù; ÀÌ°ÍÀº Ŭ·¡½º
±ÞÁõÀ¸·Î À̾îÁö¸ç ºÒÇÊ¿äÇÑ º¹À⼺À» ¾ß±âÇÑ´Ù. »ç¿ëÀÚ Á¤ÀÇ ÆíÁý±âµéÀÌ µ¶ÀÚÀûÀÎ »óȲ¿¡¼ ½Ç¿ëÀûÀÌÁö¸¸ ´ëºÎºÐÀÇ
ÆíÁý±âµéÀÌ °°Àº ¼ø¼¸¦ µû¸¦ °ÍÀ̸ç, ÀÌ´Â °³º°ÀûÀΠŬ·¡½º¿¡ ĸ½¶È °ÍÀÌ´Ù. iData ÅøŶÀº
UniversalTableCellEditor¶ó°í ºÒ¸®´Â ÀÌ Å¬·¡½ºÀÇ ±¸ÇöÀ» ´ã°í ÀÖ´Ù.
UniversalTableCellEditor´Â È®ÀåÀÌ ¾Æ´Ñ TableCellEditor º¸°ü ¹æ¹ýÀ»
»ç¿ëÇÑ´Ù. ÆíÁý½Ã¿¡ UniversalTableCellEditor´Â iData ÃþÀÇ ±¸ÇöÀ¸·ÎºÎÅÍ µ¥ÀÌÅÍ °ªÀ»
°¡Á®¿Í ±× °ªÀ¸·Î Æ÷ÇÔÇÏ°í ÀÖ´Â TableCellEditor¸¦ ÃʱâÈÇÑ´Ù. ÆíÁýÀÌ ³¡³ª¸é
UniversalTableCellEditor´Â TableCellEditor·ÎºÎÅÍ °ªÀ» Á¶È¸ÇÏ°í ±×¿¡ µû¶ó
iData ±¸Çö¿¡ µ¥ÀÌÅ͸¦ ¼³Á¤ÇÑ´Ù. ¸¸ÀÏóÀ½¿¡ ¾Æ¹« ÆíÁý±â°¡ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é,
UniversalTableCellEditor´Â iData ±¸ÇöÀÇ µ¥ÀÌÅÍ À¯Çü¿¡ ´ëÇØ JTable³»ÀÇ ±âº»
ÆíÁý±â¸¦ ºÒ·¯ ¿Â´Ù.
À§¿¡¼ ¼³¸íÇÑ ¸ðµç ÆíÁý ¼ø¼´Â UniversalTableCellEditor³»¿¡ ¿ÏÀüÈ÷ ĸ½¶ÈµÈ´Ù. ÀÌ°ÍÀº
iData ·ÎÁ÷À» ±¸ÇöÇϱâ À§ÇØ third-party ÆíÁý±â¸¦ Æ÷ÇÔÇÑ ¾î¶² ÆíÁý±âµµ È®ÀåµÉ ÇÊ¿ä ¾øÀÌ »ç¿ëµÉ ¼ö
ÀÖÀ½À» ÀǹÌÇÑ´Ù.
³ª´Â °¢ TableColumn ±âº» ÆíÁý±â¸¦ UniversalTableCellEditor¿¡ ¼³Á¤ÇÔÀ¸·Î½á
JTable ³»¿¡ ÆíÁý±â¸¦ ¼³Á¤Çϱ⸦ ±ÇÇÑ´Ù. iData ÅøŶÀº ´Ù¼öÀÇ Á¤ÀûÀÎ ÇïÆÛ ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ´Â
À¯Æ¿·¯Æ¼ Ŭ·¡½º¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. À¯Æ¿·¯Æ¼ Ŭ·¡½º ³»ÀÇ configureTable() ¸Þ¼Òµå´Â
TableColumnsÀ» ÅëÇØ ¹Ýº¹µÇ¾î, ±× Ä÷³¿¡ ´ëÇÑ ÀÌÀüÀÇ ¼¿ ÆíÁý±â¸¦ °¡Áö°í ÀÖ´Â
UniversalTableCellEditorÀÇ »õ·Î¿î ÀνºÅϽº¿¡ °¢°¢ÀÇ ÇöÀç ÆíÁý±â¸¦ ¼³Á¤ÇÑ´Ù.
ÅøŶ¿¡´Â renderer¿Í À¯»çÇÑ ±â´ÉÀ» °¡Áø UniversalTableCellRenderer°¡ µé¾î
ÀÖ´Ù. JTree¿Í JComobBox/JList¸¦ À§ÇÑ ¹ü¿ë ÆíÁý±â¿Í renderer Á¶Çյ鵵 ÅøŶ¿¡ µé¾î
ÀÖ´Ù.
¿¹: °¡°ÝÀÌ ºñ¿ëº¸´Ù ³ôÀ½À» º¸ÀåÇϱâ À§ÇÑ ¼¿ ³» °ËÁõ ÀÛ¾÷
ÆíÁýÀÇ ÀϹÝÀûÀÎ ¾î·Á¿òÀº ¼¿ ÆíÁýÀÌ ³¡³ª±â Àü¿¡
µ¥ÀÌÅÍ°¡ °ËÁõµÇ¾î¾ß ÇÏ´Â in-cell validation (¼¿ ³» °ËÁõ ÀÛ¾÷)¿¡ ÀÖ´Ù.
setData() ¸Þ¼Òµå´Â ¼¿ ³» °ËÁõ ÀÛ¾÷À» À§ÇØ Áß¾Ó ÁýÁßÈµÈ ÀúÀå¼Ò¸¦ »ý¼ºÇÑ´Ù. ¾î´À ÇÑ °ªÀÌ ÆíÁýµÈ ÈÄ
°¡°ÝÀÌ ºñ¿ëº¸´Ù Àû´Ù¸é »ç¿ëÀÚ¿¡°Ô ÅëÁöÇØ¾ß ÇÏ´Â ¿¹¸¦ °¡Á¤Çغ¸ÀÚ. ÀÌ ¿¹¿¡¼ ¿ì¸®´Â »ç¿ëÀÚ¿¡°Ô ´ÙÀ½ÀÇ ¿É¼ÇÀÌ
Á¦½ÃµÇ±æ ¿øÇÑ´Ù.
- µÎ
°ª ¸ðµÎ ¿ø·¡ÀÇ °ªµé·Î ³öµÎ±â
- °¡°ÝÀ»
ºñ¿ë°ú µ¿ÀÏÇÏ°Ô ¿Ã¸®±â
- ÆíÁýÀÌ
¾ÈµÈ °ªÀ» º¯°æÇÏ¿© óÀ½ÀÇ °ª°ú ÀÌÁ¦ ¸· ÆíÁýµÈ °ª °£ÀÇ ¿ø·¡ °¡°Ý Â÷À̸¦ À¯ÁöÇϵµ·Ï Çϱâ
ÀÌ ¸ðµÎ´Â setData() ¸Þ¼Òµå¿¡¼ ºñ±³Àû ½±°Ô ÀÌ·ç¾îÁø´Ù. JOptionPaneÀº »ç¿ëÀÚ°¡ ¼±È£ÇÏ´Â
¿É¼ÇÀ» È®ÀÎÇϵµ·Ï Çϱâ À§ÇØ Ç¥½ÃµÈ´Ù. ÀÏ´Ü ¿É¼ÇÀÌ ¼±ÅÃµÇ¸é °è»êÀÌ ¼öÇàµÇ¾î ÀûÀýÇÑ °ªÀ» Àû¿ëÇÑ´Ù. ÀÌ·¯ÇÑ
ºñÁî´Ï½º ·ÎÁ÷À» ±¸ÇöÇϱâ À§ÇÑ Áß¾ÓÁýÁßÈµÈ ÀúÀå¼Ò»Ó ¾Æ´Ï¶ó ¸ðµç µ¥ÀÌÅÍ °ªµé¿¡ ´ëÇÑ Á¤º¸´Â iData ±â¹ýÀÇ
À¯¿¬¼º¿¡ ÇÙ½ÉÀÌ µÈ´Ù.
Listing
9. ¼¿ ³» °ËÁõ
ÀÛ¾÷
String doNotEdit = "Do Not Edit";
String priceEqualsCost = "Price = Cost";
String keepProfitDifference = "Keep Profit Difference";
String keepProfitPercentage = "Keep Profit Percentage";
...
public boolean setData(Object data)
{
double newCost = new Double(data.toString()).doubleValue();
double oldCost = this.bicycle.getCost();
double price = bicycle.getPrice();
((Bicycle)this.getSource()).setCost(newCost);
if (price < newCost)
{
Object result = JOptionPane.showInputDialog
(
null,
"Cost you have entered is more than the set price for this bicycle"
+ "\nPlease select from the following options",
"",
JOptionPane.QUESTION_MESSAGE,
null,
new Object[]{doNotEdit, priceEqualsCost, keepProfitDifference,
keepProfitPercentage},
priceEqualsCost
);
if (result != null)
{
//persist the data
if (result.equals(priceEqualsCost))
this.bicycle.setPrice(bicycle.getCost());
//keep the delta between price and cost
else if (result.equals(keepProfitDifference))
this.bicycle.setPrice( newCost + (oldPrice - oldCost) );
//keep the same profit percentage
else if (result.equals(keepProfitPercentage))
this.bicycle.setPrice( newCost * (oldPrice / oldCost) );
}
}
return true;
}
|
ºñ JTable°è¿ÀÇ ÄÄÆ÷³ÍÆ® »ç¿ëÇϱâ ÀÏ°ü¼ºÀ» À§ÇØ ¿ì¸®ÀÇ ¿¹¿¡¼ JTableÀ» »ç¿ëÇØ ¿ÔÁö¸¸, ¶Ç ´Ù¸¥ Swing
ÄÄÆ÷³ÍÆ®¸¦ ÀÌ¿ëÇÏ´Â °£´ÜÇÑ ¿¹¸¦ »ìÆ캸´Â °Íµµ Àǹ̰¡ ÀÖÀ» °ÍÀÌ´Ù. ÀÚÀü°Å À̸§À» ´ã°í ÀÖ´Â JList¸¦
¸¸µé¾îº¸ÀÚ. °£´ÜÈ÷ Bicycle °´Ã¼µéÀÇ ÁýÇÕÀ» °è¼Ó ¹Ýº¹ÇÏ°í À̵éÀ»
BicycleModelNameImmutableData °´Ã¼ ³»¿¡ ³ÖÀº ÈÄ JList¿¡ Ãß°¡ÇÑ´Ù. JTable¿¡¼
»ç¿ëµÇ¾ú´ø ¶È°°Àº iData ÀνºÅϽºµéÀÌ Jlist¿¡¼µµ »ç¿ëµÊ¿¡ ÁÖ¸ñÇÑ´Ù. ÀÌ·¯ÇÑ ÀνºÅϽºµéÀº °°Àº ¹æ½ÄÀ¸·Î
¾î¶² ´Ù¸¥ ÄÄÆ÷³ÍÆ®¿¡¼µµ »ç¿ëµÉ ¼ö ÀÖ´Ù.
Listing
10. JList ÃʱâÈ
protected void initList()
{
...
while ( ... )
{
//wrap the bicycle in an iData object and add it to the list model
Bicycle bicycle = ...
model.addElement(new BicycleModelNameMutableIData(bicycle));
}
//wrap the lists renderer in the iData toolkit universal renderer
//for JLists
list.setCellRenderer(new
UniversalListCellRenderer(list.getCellRenderer()));
}
|
±×¸² 6. JListÀÇ ¿¹
Áö´ÉÇü È¸é °£Á¢ Á¢±Ù
(iDisplay) iDisplay ±¸Á¶´Â
iData¿¡ ±â¹ÝÇÏ¿© »ç¿ëÀÚ Á¤ÀÇ È¸éÀ» »ý¼ºÇÏ´Â ÃþÀÌ´Ù. ¿¹¸¦ µé¾î, »ç¿ëÀÚ¿¡°Ô ¼±È£µÇ´Â Manufacturer ¸¦ ¾Ë·ÁÁÖ±â À§ÇØ ±×
Manufacturer °¡ »¡°£ ¹®ÀÚ·Î
Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ÀÌ´Â º¸Åë renderer¿¡ ÀÇÇØ Àü´ÞµÇÁö ¾Ê´Â µ¥ÀÌÅÍ °ªµéÀ» Á¶È¸ÇØ¾ß ÇÏ´Â º¹ÀâÇÑ
·ÎÁ÷À» ÇÊ¿ä·Î Çϸç, ±× °á°ú µ¥ÀÌÅÍ Áß½ÉÀÇ »ç¿ëÀÚ Á¤ÀÇ È¸éÀ» ºñÇö½ÇÀûÀ¸·Î ¸¸µé¾î ¹ö¸®´Â º¹ÀâÇÑ Äڵ带 ³ºÀ»
°ÍÀÌ´Ù. iDisplay´Â ±×·¯ÇÑ ½Ã³ª¸®¿À¸¦ ´Ü¼øÇÏ°Ô ¸¸µé±â À§ÇØ iData¿Í ¹ÐÁ¢ÇÏ°Ô ÅëÇÕÇϸç, ±× °úÁ¤¿¡¼
¶ÇÇÑ È®ÀåÀ» À§ÇÑ Áß¾Ó ÀúÀå¼Ò¸¦ »ý¼ºÇÑ´Ù.
Àбâ Àü¿ëÀÇ Áö´ÉÇü
µ¥ÀÌÅ͸¦ À§ÇÑ È¸é °£Á¢ Á¢±Ù Ãþ (ImmutableIDIsplay) ImmutableIDisplay´Â ȸ鿡 µû¶ó µ¶ÀÚÀûÀÎ ·ÎÁ÷À» ĸ½¶ÈÇÑ´Ù. ÀÌ°ÍÀº
´ÙÀ½°ú °°Àº ¼¼°¡Áö ÁÖ¿ä renderer À¯Çü¿¡ ´ëÇØ get[Component ]CellRendererComponent()
¸Þ¼Òµå¸¦ °¡Áö´Â ImmutableIDisplay¿¡ ÀÇÇØ ¼öÇàµÈ´Ù: TableCellRenderer,
TreeCellRenderer ¹× ListCellRenderer°¡ ±×°ÍÀÌ´Ù.
ImmutableIDisplayIData´Â ImmutableIDisplay¸¦ Æ÷ÇÔ½ÃÅ´À¸·Î¼
ImmutableIDisplay¸¦ ImmutableIData¿Í ÅëÇÕÇÑ´Ù.
JTableÀÌ UniversalTableCellRenderer³»ÀÇ
getCellRendererComponent()¸¦ È£ÃâÇÏ°í ImmutableIDisplayIData À¯ÇüÀÇ
°´Ã¼¿¡ À̸¦ Àü´ÞÇÒ ¶§, UniversalTableCellRenderer´Â
getCellRendererComponent ¿äûÀ» ImmutableIDisplayIData°¡ º¸À¯ÇÏ°í ÀÖ´Â
ImmutableIDisplay³»ÀÇ »óÀÀÇÏ´Â get[Component ]CellRendererComponent¿¡°Ô
Àü´ÞÇÑ´Ù.
¿ì¸®ÀÇ ÀÚÀü°Å »óÁ¡ µ¥¸ð·ÎºÎÅÍ ¶Ç ´Ù¸¥ ¿¹¸¦ »ìÆ캸ÀÚ. ÀÌ ¿¹¿¡¼ »ç¿ëÀÚ°¡ ÀÚÀü°ÅÀÇ price¸¦ ÀÔ·ÂÇϴµ¥
ÀÌ °ªÀÌ costº¸´Ù Àû¾î¼ price¿Í cost ¼¿ÀÇ ¹ÙÅÁ»öÀÌ »¡°£»öÀ¸·Î º¯ÇÏ°Ô µÈ´Ù.
ImmutableIDisplayÀÇ getTableCellRenderer() ¸Þ¼Òµå´Â DataObject¸¦
È£ÃâÇÏ°í price°¡ costº¸´Ù ÀûÀºÁö¸¦ È®ÀÎÇÑ´Ù. ¸¸¾à ±×·¸´Ù¸é ¹ÙÅÁ»öÀº »¡°£»öÀ¸·Î ¼³Á¤µÈ´Ù; ±× ¿ÜÀÇ
°æ¿ì´Â Èò»öÀ¸·Î ¼³Á¤µÈ´Ù. Ư¼öÇÑ °æ¿ì°¡ Á¦½ÃµÇÁö ¾ÊÀº °æ¿ì¿¡´Â ¹è°æÀ» ºÐ¸íÈ÷ ±âº» »öÀ¸·Î ¼³Á¤ÇÒ °ÍÀ» ±â¾ïÇÏ´Â
°ÍÀÌ Áß¿äÇÏ´Ù. SwingÀº ·£´õ¸µ¿¡ ÀÖ¾î °æ·®ÈµÈ ÆÐÅÏÀ» »ç¿ëÇϴµ¥, °°Àº ÄÄÆ÷³ÍÆ®¸¦ µÇÇ®ÀÌÇØ »öÄ¥ÇÑ´Ù. ¸¸ÀÏ
Ç¥ÁØ ¼³Á¤ÀÌ Æ¯¼öÇÑ °æ¿ì·Î ÀÎÇØ ¹Ù²î¾ú´Âµ¥ Ç¥ÁØÀÇ °æ¿ì·Î Àç¼³Á¤µÇÁö ¾Ê¾Ò´Ù¸é ¿¹»óÄ¡ ¸øÇÑ °á°ú°¡
¹ú¾îÁø´Ù.
Listing 11. µ¥ÀÌÅÍ ±â¹ÝÀÇ ¼¿
»öÄ¥À» º¸¿©ÁÖ´Â ÀÚÀü°Å ºñ¿ë¿¡ ´ëÇÑ getTableCellRenderer()
¸Þ¼Òµå
public TableCellRenderer getTableCellRenderer(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
//cache old background for change comparisons
Color oldColor = renderer.getBackground();
//cache old background for change comparisons
Color newColor = null;
//check to see if Object is a MutableIData
if (value instanceof MutableIData)
{
MutableIData arg = (MutableIData)value; //cast it.
Bicycle bicycle = (Bicycle)arg.getSource();
if (arg.getData() instanceof Number) //check the data type
{
// retrieve price and cost from the DataObject
double cost = ((Number)arg.getData()).doubleValue();
double price = bike.getPrice();
//make comparisons
if (price > cost)
newColor = Color.cyan;
else
newColor = Color.red;
}
}
// check and see if color changed
if (!newColor.equals(oldColor))
this.setBackground(newColor);
}
|
±×¸² 7. °¡°Ý°ú ºñ¿ë¿¡ ´ëÇÑ ¹è°æ»ö °ËÁõ
Å×À̺í
ÆíÁý °¡´ÉÇÑ Áö´ÉÇü
µ¥ÀÌÅÍ¿¡ ´ëÇÑ È¸é °£Á¢ Á¢±Ù Ãþ (MutableIDisplay) º¯°æ ºÒ°¡´É/º¯°æ °¡´ÉÀÇ ±¸ºÐÀº iDisplay ±¸Çö¿¡¼µµ ¸¶Âù°¡ÁöÀÌ´Ù.
MutableIDisplay´Â ÆíÁý±â¿¡ ÇØ´çÇϸç, ImmutableIDisplay´Â renderer¿¡ ÇØ´çÇÑ´Ù.
ImmutableIDisplayIData¿¡¼¿Í ¸¶Âù°¡Áö·Î MutableIDisplayIData´Â
MutableIData¸¦ È®ÀåÇϸç MutableIDisplay¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ°ÍÀÇ »ç¿ë ¹æ¹ýÀº
get[Component ]CellRenderer()
¸Þ¼Òµå°¡ ¾Æ´Ñ get[Component ]CellEditor()
¸Þ¼Òµå¸¦ ±¸ÇöÇÑ´Ù´Â Á¡À» Á¦¿ÜÇϸé ImmutableIDisplayÀÇ »ç¿ë¹ý°ú µ¿ÀÏÇÏ´Ù. ÅøŶ¿¡´Â JTable,
JTree ¹× JComboBox¿ë »ç¿ëÀÚ Á¤ÀÇ ÆíÁý±â°¡ µé¾î ÀÖ´Ù.
get[Component ]CellRenderer()¿Í
get[Component ]CellEditor()
¸Þ¼Òµå¸¦ iDisplay¿¡ Àü´ÞÇϸé À¯¿ëÇÑ °£Á¢ Á¢±Ù ÃþÀÌ »ý¼ºµÈ´Ù. ÁÖ¿äÇÑ °á°ú·Î´Â È¸é ¼³Á¤°ú ±â´ÉÀ»
Ä¿½ºÅ͸¶ÀÌ¡Çϱâ À§ÇÑ Áß¾ÓÀÇ, ĸ½¶ÈµÈ ÀúÀå¼Ò°¡ ¸¸µé¾îÁø´Ù´Â °ÍÀÌ´Ù. È®Àå ´ë½Å¿¡ iData¸¦ iDisplay¿¡
´ëÇÑ containment·Î »ç¿ëÇϸé Ŭ·¡½º ±ÞÁõÀ» Á¦ÇÑÇÏ´Â °Í ¿Ü¿¡ À¯¿¬¼º°ú È®À强À» ÁõÁø½ÃŲ´Ù. °¡Àå Áß¿äÇÑ
°ÍÀº Á¾Á¾ ¸Å¿ì º¹ÀâÇÑ È¸é ·ÎÁ÷À» ´ã°í ÀÖ´Â »ç¿ëÀÚ Á¤ÀÇ ÆíÁý±â¿Í rendererÀÇ Çʿ伺À» °ÅÀÇ ¾ø¾Ø´Ù´Â
Á¡ÀÌ´Ù. ºñ·Ï ¿ÏÀüÇÑ ÇüÅÂÀÇ »ç¿ëÀÚ Á¤ÀÇ ÆíÁý±â¿Í renderer°¡ ÇÊ¿äÇϱä ÇÏÁö¸¸ ȸéÀÇ ´ë´Ù¼ö´Â
iDisplay°¡ Á¦°øÇÏ´Â °£Á¢ Á¢±Ù ÃþÀ» »ç¿ëÇÏ¿© ±¸ÇöµÉ ¼ö ÀÖ´Ù.
´ÜÁ¡ iData ±â¼úÀ»
±¸ÇöÇÒ ¶§ ¿°µÎ¿¡ µÎ¾î¾ß ÇÒ ¸î °¡Áö ´ÜÁ¡ÀÌ ÀÖ´Ù.
- ¼º´É : iData ±â¹ýÀº ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÖ¾î
»ó´çÇÑ ¼º´É»óÀÇ ºÎÇϸ¦ °¡Á® ¿ÀÁö ¾Ê´Â´Ù. ÀÌ ±â¹ýÀº ·ÎÁ÷À̳ª ÇÁ·Î¼¼½ÌÀÌ ¾Æ´Ñ »ó´çÇÑ ¾çÀÇ °£Á¢ Á¢±ÙÀ»
Á¤ÀÇÇϱ⠶§¹®ÀÌ´Ù. ±×·¸Áö¸¸ ¸¸¾à getData()/setData() ¸Þ¼Òµå ȤÀº
get[ÄÞÆ÷³ÍÆ®]CellRenderer()/Editor() ¸Þ¼ÒµåµéÀÇ ±¸Çö ³»¿ëÀÌ ³Ê¹« ¸¹Àº ·ÎÁ÷À» °®°í
ÀÖ´Ù¸é ¹®Á¦°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. ÄÄÆ÷³ÍÆ®°¡ »öÄ¥µÉ ¶§¸¶´Ù ÄÄÆ÷³ÍÆ® ³»ÀÇ ¸ðµç ¼¿¿¡ ´ëÇØ ÀÌ ¸Þ¼Òµå ³»ÀÇ ¾î¶²
·ÎÁ÷ÀÌ È£ÃâµÈ´Ù. ÀÌ ¸Þ¼Òµå¸¦ °¡´ÉÇÑ ÇÑ °£°áÇÏ°Ô À¯ÁöÇϵµ·Ï ÇÑ´Ù.
- Äڵ庣À̽º¿¡
Ãß°¡µÇ´Â Ŭ·¡½ºµé : iData ±â¼úÀ» »ç¿ëÇÏ·Á¸é ¼ö¸¹Àº Ŭ·¡½º°¡ ÇÊ¿äÇÏ´Ù´Â »ç½ÇÀº ÀǽÉÀÇ ¿©Áö°¡
¾ø´Ù. ÀÌ°ÍÀº ¾î¶² °´Ã¼ ÁöÇâ ±â¹ý¿¡¼µµ ¿¹»óµÇ´Â °ÍÀÌ°í, ¶ÇÇÑ ÀÏÁ¤ ºÎºÐ ÀÌÁ¡µµ ÀÖ´Ù. »ç½Ç ƯÁ¤
¾ÖÇø®ÄÉÀ̼ǿ¡ ±¹ÇÑµÈ ºñÁî´Ï½º ·ÎÁ÷ÀÇ ´ë´Ù¼ö°¡ ÀÌ·¯ÇÑ °¡¿ÜÀÇ Å¬·¡½º¿¡ µé¾î ÀÖ°í, ÀÌ´Â ±×·¸Áö ¾Ê¾Ò´Ù¸é
¹ß»ýÇÏÁö ¾Ê¾ÒÀ» ĸ½¶È°¡ ÀÌ·ç¾îÁöµµ·Ï ÇÑ´Ù. ¸¸ÀÏ Å¬·¡½ºµéÀÌ ÃÖ¼Ò·Î À¯ÁöµÇ¾î¾ß ÇÑ´Ù¸é ÀÌ°ÍÀº ÃÖ¼±ÀÌ ¼±ÅÃÀÌ
¾Æ´Ò ¼ö ÀÖ´Ù. º¸Åë ¼º´É ºñ¿ëÀÇ ¹®Á¦°¡ ÀÖ±ä ÇÏÁö¸¸, ÀÌ·¸°Ô ±Ô¸ð¿¡ ¹Î°¨ÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» À§ÇØ ¸¹Àº ÃÖÀûÈ
¹æ¹ýÀÌ ¼Ò°³µÇ°í ÀÖ´Ù. ÄÚµåÀÇ º¹À⼺, Ŭ·¡½ºÀÇ ¼ö, ±×¸®°í ¼º´É ºñ¿ë¿¡ ´ëÇÑ °áÁ¤À» ³»¸± ¶§ ¾ÖÇø®ÄÉÀ̼ÇÀÇ
¿ä±¸»çÇ×ÀÌ °í·ÁµÇ¾î¾ß ÇÑ´Ù.
- ÇнÀ
°î¼± : ÀÌ°ÍÀÌ °¡Àå µÎµå·¯Áø ´ÜÁ¡ÀÌ´Ù. iData ±â¹ýÀº À¯¿¬¼º°ú È®À强À» ¿°µÎ¿¡ µÎ°í ¼³°èµÇ¾ú´Ù.
ÀÌ°ÍÀº óÀ½¿¡´Â ±â¸¦ Á×À̰ųª È¥¶õ½º·´°Ô ÇÏ´Â »ó´çÇÑ ¾çÀÇ Ãß»óȸ¦ ÇÊ¿ä·Î ÇÑ´Ù. ³ª´Â ¾î´À Á¤µµÀÇ ¿¬±¸
ÈÄ¿¡ ÀÌ ¾ÆÅ°ÅØó¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù°í ¹ÏÁö¸¸, ²ÙÁØÇÑ ÁÖÀÇ°¡ ÇÊ¿äÇÏ´Ù.
°á·Ð
ÄÄÆ÷³ÍÆ® ¸ðµ¨À» iData °£Á¢ Á¢±Ù Ãþ°ú
°áÇÕµÈ Áö´ÉÇü µ¥ÀÌÅͷΠä¿ì¸é °í±Þ UI ±â´ÉÀ» ±¸ÇöÇϱâ À§ÇÑ À¯¿¬ÇÏ°í È®À强 ÀÖ´Â Áß¾ÓÀÇ ÀúÀå¼Ò¸¦ ¸¸µé ¼ö
ÀÖ´Ù. ¶ÇÇÑ ÀÌ ±â´ÉÀº À¯¿¬¼º°ú Àç»ç¿ë¼ºÀ» ÁõÁø½ÃÅ°±â À§ÇØ ¿ÏÀüÈ÷
ĸ½¶ÈµÈ Ŭ·¡½ºµé ³»¿¡ ºñ±³Àû ´Ü¼øÇÑ ·ÎÁ÷À¸·Î ±¸ÇöµÉ ¼ö ÀÖ´Ù. ¿©±â¿¡ ¿ÀÇ ¼Ò½º ÅøŶÀÌ ´õÇØÁüÀ¸·Î½á iData
±â¹ýÀÇ ÅëÇÕÀÌ ½¬¿öÁø´Ù. ¸¹Àº Äڵ尡 ÀÌ¹Ì ÀÛ¼ºµÇ°í Å×½ºÆ®µÇ¾î Àֱ⠶§¹®ÀÌ´Ù. ¼³¸íµÈ ±â¹ýÀ» ¼º°øÀûÀ¸·Î »ç¿ëÇϱâ
À§ÇØ °¢ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÇÊ¿ä·Î ÇÏ´Â °ÍÀº iData °£Á¢ Á¢±Ù ÃþÀÇ ÀÚü ±¸Çö »ÓÀÌ´Ù. ¿©±â¿¡´Â Swing
ÄÄÆ÷³ÍÆ®¿¡ ´ëÇÑ Áß´ëÇÑ Ä¿½ºÅ͸¶ÀÌÁ¦À̼ǵµ, »ç¿ëÀÚ Á¤ÀÇ ¸ðµ¨µµ, ±×¸®°í Ç¥ÁØ Swing ±â´ÉÀÇ º¯°æµµ ¾ø´Ù.
´ÜÁö ÁÖÀÇ ±í°Ô ¹èÄ¡ÇÑ °£Á¢ Á¢±ÙÀÌ ÀÖÀ» »ÓÀÌ´Ù. °á°úÀûÀ¸·Î º¹ÀâÇÑ È¸é ±â´ÉÀÇ ±¸Çö°ú Ä¿½ºÅ͸¶ÀÌÁ¦À̼ÇÀ»
Á÷°üÀûÀÌ°í, À¯¿¬Çϸç, È®Àå °¡´ÉÇÑ ¹æ½ÄÀ¸·Î ´Ü¼øȽÃŲ ½Ã½ºÅÛÀÌ ³ª¿À´Â °ÍÀÌ´Ù.
¿ÀÇ ¼Ò½º note ³ª´Â
iData ¹æ½ÄÀ» ¼º°øÀûÀ¸·Î ±¸ÇöÇϴµ¥ ÅøŶÀÌ ÇʼöÀûÀ̶ó°í ¹Ï°í ÀÖ´Ù. ÅøŶÀº ¿©·¯ ¹ø °³¹ßµÈ ÃÖÀûÈ ¹× ÇïÆÛ
Ŭ·¡½º»Ó ¾Æ´Ï¶ó »ç¿ëÀÚ Å×½ºÆ®¸¦ °ÅÄ£ Äڵ带 Á¦°øÇÏ¿© ÅëÇÕ ½Ã°£À» ÃÖ¼ÒȽÃÄÑ ÁØ´Ù. ¼³°è ¹× ±¸ÇöÀº ³»°¡ Âü¿©ÇÑ
ÇÁ·ÎÁ§Æ®ÀÇ ¿µÇâÀ» ¹Þ¾Ò´Ù. ºÐ¸íÈ÷ ¿©·¯ºÐÀº ÅøŶÀ» ¼öÁ¤Çϸé ÈξÀ ½±°Ô ±¸ÇöµÉ ¼ö ÀÖÀ» ¿ä±¸ »çÇ×À» °¡Áö°í
ÇÁ·ÎÁ§Æ®¸¦ ã¾Æ³ÂÀ» °ÍÀÌ°í, °³¹ßÀÚµéÀÌ ±× ¼³°è¸¦ °³¼±½ÃÅ°´Â °ÍÀ» µµ¿Í º¸´Ù Á¢±Ù¼º ÀÖ°í °·ÂÇÑ ±¸ÇöÀ»
¸¸µé¾î³»±â ¶§¹®¿¡ ±× À¯¿ë¼ºÀº ÈξÀ ´õ Ä¿Áú °ÍÀÌ´Ù. °í
ÅøŶÀº Artistic ¶óÀ̼±½º ÇÏ¿¡ SourceForge.netÀ» ÅëÇØ
¹èÆ÷µÈ´Ù. ÇÁ·ÎÁ§Æ® ȨÆäÀÌÁö (Âü°íÀÚ·á)¿¡´Â
Àüü ¼Ò½º, ¹®¼ ¹× ¹ÙÀ̳ʸ® ¹èÆ÷ÆÇ »Ó ¾Æ´Ï¶ó listserv¿Í ±âŸ Á¤º¸¿¡ ´ëÇÑ ¸µÅ©µµ ÀÖ´Ù. ¿©·¯ºÐÀº ÇâÈÄ
Ãâ½ÃÆÇ¿¡ Æ÷ÇÔ½Ãų ÄÚµå °³¼±¿¡ ±â¿©ÇØ ´Þ¶ó´Â °Ý·Á¸¦ ¹Þ´Â´Ù. ¿ÀÇ ¼Ò½º Çù¾àÀÇ ±ÔÁ¤¿¡ µû¶ó ¸ðµç ¾ÖÇø®ÄÉÀ̼ǿ¡
´ëÇÑ ÀÌ¿ëÀÌ ¹«·áÀÌ´Ù.
Âü°íÀÚ·á
|