lecture Home > ASP.NET 2.0 > Taeyo.NET - ASP.NET 2.0

Taeyo.NET - ASP.NET 2.0

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2007³â 08¿ù 01ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2007³â 08¿ù 21ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : SpaceSj(±è ¼®Áß)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : IDisposable Interface¸¦ ÅëÇÑ Interface ¾Ë¾Æº¸±â

°­ÁÂ Àü ÇÊÀÚÀÇ Àâ´ã>

À̹ø °­Á´ Å¿À´å³Ý¿¡¼­ Ȱµ¿ ÁßÀÎ Micosoft MVP ÀÎ ±è¼®Áß´ÔÀÇ °­ÁÂÀÔ´Ï´Ù.
ÀÎÅÍÆäÀ̽º¿¡ °üÇÑ ±âº»ÀûÀÎ À̾߱âµéÀ» ¼³¸íÇØº»´Ù°í ÇÕ´Ï´Ù. ~


IDisposable Interface¸¦ ÅëÇÑ Interface ¾Ë¾Æº¸±â.

¾È³çÇϼ¼¿ä. ^^ ASP.NET MVP ±è¼®ÁßÀÔ´Ï´Ù.

¶á±Ý¾øÀÌ ASP.NET °­Á´ ¾È¾²°í Interface ¾ê±â¸¦ ²¨³Â½À´Ï´Ù. ^^ ASP.NET °Ô½ÃÆÇÀÇ Áú¹®¿¡ ´äº¯À» ÇÏ´Ùº¸¸é ¹«¾ùÀΰ¡ Á¶±Ý ºÎÁ·ÇÏ´Ù »ý°¢ÇÏ´Â ºÎºÐÀÌ ¸î°¡Áö Àִµ¥¿ä. °¡´ÉÇÏ´Ù¸é ±×¿¡ °ü·ÃÇØ¼­ ÀüºÎ °­Á¸¦ ÁøÇàÇØ º¸°í ½ÍÁö¸¸, ³ª¸§ À¯¿ëÇÏ°Ô »ç¿ëÇÏ°í ½á¸ÔÀ»(?) ¼ö ÀÖ´Â °ÍºÎÅÍ Á¤¸®ÇØ º¸±â·Î Çß½À´Ï´Ù.

ÀÌ °­Á´ ¾Æ·¡¿Í °°Àº ¼ø¼­·Î µÇ¾îÀÖ½À´Ï´Ù.

1. ½ÃÀÛÇϱâ
2. IDisposable Interface
3. IDisposable Interface Example
4. ¸ÎÀ½¸»

 

1. ½ÃÀÛÇϱâ

ÇÁ·Î±×·¥À» ÇÏ´Ùº¸¸é ´Ù¸¥ ½Ã½ºÅÛ°úÀÇ Åë½ÅÀÌ ÇÊ¿äÇÏ°í ±×¿¡ ¿©·¯ ¾ê±â¸¦ Çϸ鼭, 'Interface°¡ ¾î¼°í, ¸Ö ³Ñ°Ü¾ß Çϰí..' µîµîÀÇ ¾ê±â°¡ ³ª¿À°Ô µÇÁö¿ä. ÀÌ·± ¾ê±â¸¦ Åä´ë·Î ÃßÃøÀ» ÇØº¸¸é 'Inteface¶õ ¾à¼Ó/±Ô¾àÀ̱¸³ª.'¶ó°í »ý°¢À» ÇÏ½Ç ¼ö ÀÖÀ¸½Ç°Ì´Ï´Ù. ±×·¸´Ù¸é .NET Framework¿¡ Á¸ÀçÇÏ´Â Interface´Â ¹«¾ùÀϱî¿ä?

ÀÎÅÍÆäÀ̽º(interface)

°è¾àÀ» Á¤ÀÇÇÏ´Â ÂüÁ¶ Çü½ÄÀÔ´Ï´Ù. ´Ù¸¥ Çü½ÄÀº ƯÁ¤ ÀÛ¾÷À» Áö¿øÇÒ ¼ö ÀÖµµ·Ï ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϴµ¥, ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º´Â ÇØ´ç ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϴ Ŭ·¡½º³ª ´Ù¸¥ ÀÎÅÍÆäÀ̽º¿¡¼­ Á¦°øÇØ¾ß ÇÏ´Â ¸â¹ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. Ŭ·¡½º¿Í ¸¶Âù°¡Áö·Î, ÀÎÅÍÆäÀ̽ºÀÇ ¸â¹ö´Â ¸Þ¼­µå, ¼Ó¼º, Àε¦¼­, À̺¥Æ® µîÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. Âü°í Ç׸ñ: °è¾à(contract), Àε¦¼­(indexer), ¼Ó¼º(property), ÂüÁ¶ Çü½Ä(reference type)

- MSDN ¹ßÃé

 Interface (C#) - MSDN

¿ì¼± MSDN¿¡¼­ ¹ßÃéÇÑ InterfaceÀÇ ¼³¸íÀ» º¸¸é À§¿Í °°½À´Ï´Ù. ¸»ÀÌ Á» ¾î·Á¿ö¼­ ÀÌÇØÇϱ⠳­ÇØÇÏÁö¸¸, °£´ÜÇÏ°Ô ¼³¸íÀ» Çϸé Class/Interface¿¡¼­ °øÅëÀûÀÎ ¸â¹ö(¼Ó¼º, ¸â¹ö, À̺¥Æ® µî)¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸¸µé¾î ³õÀº°÷À̶ó´Â ¶æÀ¸·Î ÀÌÇØÇϽøé Á¶±Ý ½¬¿ï°Å¶ó »ý°¢ÀÌ µå³×¿ä.


±×¸² 1. System Namespace Interface (MSDN)

À§ÀÇ À̹ÌÁö´Â System NamespaceÀÇ ÀϺΠInterface¸¦ º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù. º¸½Ã´Ù ½ÃÇÇ Interface´Â ±âº»ÀûÀ¸·Î ¿µ¹® ´ë¹®ÀÚ "I"¸¦ Prefix·Î °¡Áý´Ï´Ù. ÀϺΠƲ¸°ºÎºÐµéµµ ÀÖÁö¸¸ ´ëºÎºÐÀº ÀÌ ±Ô°ÝÀ» µû¸£°í ÀÖÁÒ.

À¸¾Æ~~ ´Ü¼øÈ÷ System Namespace¿¡¸¸ Àú·¸°Ô Àִµ¥ FrameworkÀÇ ¸ðµç Interface¸¦ ³ª¿­ÇÏ¸é ³Ê¹« ¸¹¾Æ ÀÌ °­Á´ ¾²°í ¶Ç ¾²´Ù°¡ Framework°¡ º¯°æµÇ¸é ¶Ç ¾²°í, º¯°æÇϰí ÇØ¾ß ÇÒ °Í °°½À´Ï´Ù. ^^;; ±×·¡¼­ ¿ì¸®°¡ ¾Ë°Ô ¸ð¸£°Ô ¸¹ÀÌ »ç¿ëÇϰí ÀÖ´Â Dispose ¸Þ¼­µå¸¦ ¸â¹ö·Î °¡Áö°í ÀÖ´Â IDisposable Interface¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°í Interface¶õ ÀÌ·±°Å±¸³ª ÇÏ°í °¨À» ÀâÀ¸¼ÌÀ¸¸é ÇÕ´Ï´Ù. »ç½Ç Àúµµ Àú¸¹Àº Interface Áß¿¡ ¸î°¡Áö³ª ¾Ë°í ÀÖ´ÂÁö ¸ð¸£°Ú½À´Ï´Ù. ³Ê¹« ¸¹¾Æ¼­.. ¤»¤»

 

2. IDisposable Interface


±×¸² 2. IDisposable Interface (MSDN)

À¸~~ ³Í ´©±¸³Ä?

°¡ºñÁö ¼öÁý±â´Â °ü¸®µÇ´Â °³Ã¼°¡ ´õ ÀÌ»ó »ç¿ëµÇÁö ¾ÊÀ» °æ¿ì ÇØ´ç °³Ã¼¿¡ ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÀÚµ¿À¸·Î ÇØÁ¦ÇÏÁö¸¸ °¡ºñÁö ¼öÁýÀÌ ¾ðÁ¦ ¹ß»ýÇÒÁö ¿¹ÃøÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ °¡ºñÁö ¼öÁý±â´Â â ÇÚµé, ¿­¸° ÆÄÀÏ ¹× ½ºÆ®¸²°ú °°ÀÌ °ü¸®µÇÁö ¾Ê´Â ¸®¼Ò½º¸¦ ÀνÄÇÏÁö ¸øÇÕ´Ï´Ù.

ÀÌ ÀÎÅÍÆäÀ̽ºÀÇ Dispose ¸Þ¼­µå¸¦ °¡ºñÁö ¼öÁý±â¿Í ÇÔ²² »ç¿ëÇÏ¿© °ü¸®µÇÁö ¾Ê´Â ¸®¼Ò½º¸¦ ¸í½ÃÀûÀ¸·Î ÇØÁ¦ÇÕ´Ï´Ù. °³Ã¼°¡ ´õ ÀÌ»ó ÇÊ¿äÇÏÁö ¾ÊÀ» °æ¿ì, °³Ã¼ÀÇ ¼ÒºñÀÚ´Â ÀÌ ¸Þ¼­µå¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.

- MSDN ¹ßÃé

¶ó°í ¼³¸íÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ¼³¸í±×´ë·Î ÀÔ´Ï´Ù. ÇÒ´çµÈ ¸Þ¸ð¸®´Â °¡ºñÁö ¼öÁý±â(Garbage Collector)¿¡ ÀÇÇØ »ç¿ëµÇÁö ¾ÊÀ½À» ÆÇ´ÜÇÑ ÈÄ ÀÚµ¿À¸·Î ÇØÁ¦ ÇÕ´Ï´Ù. ÇÏÁö¸¸ À§¿¡¼­ ¹àÈùµ¥·Î °ü¸®µÇÁö ¾ÊÀº ¸®¼Ò½º ÀνÄÀ» ¸øÇÒ ¼ö µµ ÀÖ°í ¾ðÁ¦ ½ÇÇàÀÌ µÉÁöµµ ¸ð¸£±â ¶§¹®¿¡ ÀÌ Interface¸¦ »ó¼Ó¹Þ°í ¸â¹ö¸¦ »ç¿ëÇÔÀ¸·Î½á ¸í½ÃÀûÀ¸·Î ÇØÁ¦¸¦ ½ÃŰ´Â ÀÛ¾÷À» ÇÏ°Ô µË´Ï´Ù.

 °¡ºñÁö ¼öÁý (Garbage Collection)

 Finalize ¹× Dispose¸¦ ±¸ÇöÇÏ¿© °ü¸®µÇÁö ¾Ê´Â ¸®¼Ò½º Á¤¸® - MSDN

ÀÚ ±×·³ IDisposable InterfaceÀÇ ¸â¹ö´Â ¹«¾ùÀÌ ÀÖ´ÂÁö È®ÀÎÇØ º¸°Ú½À´Ï´Ù.


±×¸² 3. IDisposable Interface Member (MSDN)

¿ÀȦ~~ µü 1°³ ¹Û¿¡ ¾ø½À´Ï´Ù. Dispose ¸Þ¼­µå¸¸ Á¸ÀçÇϴµ¥¿ä. Dispose ¸Þ¼­µå´Â Àß ¾Æ½Ç°Å¶ó »ý°¢ÇÕ´Ï´Ù. ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦ ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¸Þ¼­µå±¸¿ä. IDisposable Interface¸¦ »ó¼Ó¹ÞÀ¸¸é ClassÀÇ ´Ù¸¥ ¸â¹öµé°ú ÇÔ²² Dispose ¸Þ¼¼µå°¡ ²À Á¸Àç ÇÏ¿©¾ß ÇÕ´Ï´Ù.

±×·³ IDisposable Interface°¡ Á÷Á¢ ¾²ÀÌ´Â Class¸¦ ÇÑ ¹ø ã¾Æº¸°Ú½À´Ï´Ù. ÀÌ°Ô ¾î¶»°Ô »ç¿ëÀÌ µÇ°í ÀÖ°í Á¤¸» Dispose ¸Þ¼­µå°¡ Á¸Àç ÇÏ´ÂÁö ±îÁö È®ÀÎÀ» ÇØº¸µµ·Ï ÇÏÁö¿ä. ´ëÇ¥ÀûÀ¸·Î ¿ì¸®°¡ ¸¹ÀÌ ¾²´Â SqlConnectionÀ» º¸°Ú½À´Ï´Ù.


±×¸² 4. SqlConnection Class (MSDN)

'¸Ó¾ß~~ IDisposable Interface°¡ ¾²Àΰ÷À» º»´Ù¸é¼­' ¶ó°í ¼º±ÞÇÏ°Ô »ý°¢ÇÏ½Ã¸é ¾ÈµË´Ï´Ù. ^^;; SqlConnection Class´Â DbConnection Class »ó¼Ó¹Þ±â ¶§¹®¿¡ DbConnection Class¸¦ º¸¼Å¾ß ÇÕ´Ï´Ù. º¸µµ·Ï ÇÏÁö¿ä.


±×¸² 5. DbConnection Class (MSDN)

DbConnection Class¸¦ º¸°ÔµÇ¸é IDisposable Interface¸¦ »ó¼Ó¹Þ°Ô µÇ¾îÀÖ½À´Ï´Ù. Áï SqlConnection Class´Â IDisposable Interface¸¦ »ó¼Ó¹Þ´Â DbConnection Class¸¦ ´Ù½Ã »ó¼Ó¹Þ°Ô µÇ¾î ÀÖ´Ù°í ¾Ë°ÚÁÒ?

¿©±â¼­ Àá±ñ, DbConnection Class¿¡¼­ »ó¼Ó¹Þ´Â IDbConnection Interfaceµµ IDisposable Interface¸¦ »ó¼Ó¹Þ½À´Ï´Ù. ÀÌ·¡Àú·¡ IDisposable Interface¸¦ ºüÁ®³ª°¥ °ø°£ÀÌ ¾ø³×¿ä. ^^;


±×¸² 6. DbConnection Class Member (MSDN)


±×¸² 7. SqlConnection Class Member (MSDN)

±×¸² 8,9¿¡¼­ º¸½Ã´Ù½ÃÇÇ °¢°¢ÀÇ Å¬·¡½º¿¡ Dispose ¸Þ¼­µå°¡ Á¤ÀǵǾî ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. Áï IDisposable Interface¸¦ »ó¼Ó¹Þ´Â ¸ðµç Ŭ·¡½º¿¡´Â Dispose ¸Þ¼­µå°¡ Æ÷ÇÔÀÌ µÇ¾î ÀÖÁö¿ä.

ÀÚ ÀÌÁ¦ °£´ÜÇÑ À¥»çÀÌÆ®¸¦ »ý¼ºÇϰí, Ŭ·¡½º ÆÄÀÏÀ» Ãß°¡ÇÏ¿© ¾î¶»°Ô µ¿ÀÛÀ» ÇÏ´ÂÁö º¸°Ú½À´Ï´Ù.

 

3. IDisposable Interface Example

À¥»çÀÌÆ®¸¦ Ãß°¡Çؼ­ Å×½ºÆ®¸¦ ÁøÇàÇØ º¸°Ú½À´Ï´Ù. ¿Ïº®ÇÑ Class°¡ ¸ñÀûÀÌ ¾Æ´Ñ IDisposable Interface¸¦ È®ÀÎÇϱâ À§ÇÑ °ÍÀÌ´Ï ¼Ò½º°¡ Á»~~ ±×·¡µµ ¾çÇØºÎʵ右´Ï´Ù. ^^


±×¸² 8. À¥ »çÀÌÆ® »ý¼º

¿ì¼± À¥»çÀÌÆ®¸¦ »ý¼ºÇϰí, App_Code Æú´õ¸¦ »ý¼ºÇÕ´Ï´Ù.


±×¸² 9. InterfaceTest Class Ãß°¡

App_Code Æú´õ¿¡ InterfaceTest Class ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù. ±×¸®°í Interface Class ÆÄÀÏÀÇ ³»¿ëÀº ¾Æ·¡¿Í °°½À´Ï´Ù.

// Using ±¸¹® Á¦¿Ü

public class InterfaceTest : IDisposable
{
    public InterfaceTest()
    {
    }
}

¼Ò½º 1. InterfaceTest.cs

³Ê¹« °£´ÜÇÏÁÒ? ´Ü¼øÈ÷ class¿¡ IDisposableÀ» »ó¼Ó¹Þµµ·Ï ÇÕ´Ï´Ù. ºôµåÇØº¸°Ú½À´Ï´Ù.


±×¸² 10. ºôµå ¿À·ù

¾îÇã.. ¿À·ù°¡ ¶±ÇÏ´Ï ¹ß»ýÀ» ÇÕ´Ï´Ù. ¿À·ù ³»¿ëÀ» º¸½Ã¸é ¾Æ½Ã°Ú³ª¿ä? ^^ À§¿¡¼­ ¼³¸íÀ» µå¸°µ¥·Î Interface¸¦ »ó¼Ó¹Þ´Â Class´Â InterfaceÀÇ ¸â¹ö¸¦ ÀüºÎ ±¸ÇöÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. Áï IDisposable InterfaceÀÇ ¸â¹öÀÎ Dispose ¸Þ¼­µå¸¦ Ãß°¡Çؼ­ ´Ù½Ã ºôµåÇϰڽÀ´Ï´Ù.


±×¸² 11. Dispose ¸Þ¼­µå Ãß°¡ 1


±×¸² 12. Dispose ¸Þ¼­µå Ãß°¡ 2

±×¸² 11, 12¿Í °°ÀÌ ÇØ´ç Interface¸¦ ¿ìŬ¸¯ÇÏ¿© ¸Þ´º¸¦ ¼±ÅÃÇϸé ÇØ´ç InterfaceÀÇ ¸â¹öµéÀÌ ÀüºÎ ÀÛ¼ºÀÌ µË´Ï´Ù. ÀÌ°Í Âü ½±Áö ¾Ê½À´Ï±î? ^^ ¹°·Ð Á÷Á¢ ÀÔ·ÂÀ» Çϼŵµ µË´Ï´Ù.


±×¸² 13. Dispose ¸Þ¼­µå Ãß°¡ ÈÄ ºôµå ¼º°ø

ÀÚ ÀÌÁ¦ Á¤»óÀûÀ¸·Î ºôµå°¡ µÇ¾ú½À´Ï´Ù. ÇÏÁö¸¸ ÀÌ »óÅ·δ ÀÌ ClassÀÇ Dispose ¸Þ¼­µå°¡ Á¤»óÀûÀ¸·Î ÀÛµ¿À» ÇÏ´ÂÁö ¾Ë¾Æº¼ ¼ö ¾ø½À´Ï´Ù. ¼Ò½º¸¦ ¶Ç ¸î°¡Áö ¼öÁ¤À» ÇØº¸µµ·Ï ÇÏÁö¿ä. ^^

// Using ±¸¹® Á¦¿Ü

public class InterfaceTest : IDisposable
{
    private static int nCount = 0;

    public InterfaceTest()
    {
        nCount++;
    }

    public void Dispose()
    {
        nCount--;
    }

    public static int GetCount()
    {
        return nCount;
    }
}

¼Ò½º 2. ¼öÁ¤µÈ InterfaceTest.cs

¿Ï¼ºµÈ InterfaceTest.cs ÀÇ ¸ð½ÀÀÔ´Ï´Ù. Á¤ÀûIntº¯¼ö nCount´Â ÀνºÅϽº »ý¼ºÀÌ µÉ¶§¸¶´Ù +1, Dispose ¸Þ¼­µå°¡ È£ÃâµÇ¼­ ÇØÁ¦µÉ¶§¸¶´Ù -1À» ÇÏ°Ô µË´Ï´Ù. GetCount ¸Þ¼­µå´Â nCountÀÇ °ªÀ» ³Ñ°ÜÁְԵǾî ÀÖ½À´Ï´Ù.

»ç½Ç ¸»ÀÌÁÒ. FrameworkÀÇ Dispose ¸Þ¼­µå´Â ´Ü¼øÇÏ°Ô À§¿Í °°ÀÌ »ç¿ëÇÏÁö´Â ¾Ê½À´Ï´Ù. Reflector·Î ±îº¸¸é, Dispose ¸Þ¼­µå³»¿¡ ¹«Ã´ ¸¹Àº Äڵ尡 Á¸ÀçÇϱ¸¿ä. ¾Æ´Ï¸é Close ¸Þ¼­µå µîÀ¸·Î ´ëÃ¼ÇØ¼­ »ç¿ëµµ Çϰí ÀÖ½À´Ï´Ù. ¶Ç bool °ªÀ» üũÇÏ¿© »ç¿ëÇϵµ·Ï Dispose(bool bValue) ¿Í °°ÀÌ Override ÇØ¼­ »ç¿ëµµ Çϰí ÀÖ±¸¿ä. ¿©±â¼­´Â Å×½ºÆ®¸¦ À§Çؼ­ ÀÌ·¸°Ô »ç¿ëÀ» ÇÑ´Ù°í ¾Æ¼ÌÀ¸¸é ÁÁ°Ú½À´Ï´Ù. ^^

¿©±â±îÁö Class¸¦ ±¸¼ºÇÏ¿´°í, ÀÌÁ¦ WebForm¿¡¼­ À̵鿡 ´ëÇÑ Å×½ºÆ®¸¦ ÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇϰڽÀ´Ï´Ù.


±×¸² 14. Default.aspx

.aspx¿¡´Â Label 3°³¿Í Button 3°³¸¦ ¿Ã·Á³õ¾Ò½À´Ï´Ù. .aspx.cs¿¡´Â Button3°³ÀÇ Click À̺¥Æ®¸¸ Ãß°¡¸¦ ÇÏ¿© °¢°¢À» Å×½ºÆ® ÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇϰڽÀ´Ï´Ù.

// Using ±¸¹® Á¦¿Ü

protected void Page_Load(object sender, EventArgs e)
{
    this.ClearLabel();
}

// ¨ç Test1 Button Click
protected void btnTest1_Click(object sender, EventArgs e)
{
    this.SetLabelText(this.Label1, "Test1 Button Click<br>ÀνºÅϽº Àü");

    InterfaceTest iTest = new InterfaceTest();

    this.SetLabelText(this.Label2, "ÀνºÅϽº ÈÄ");

    this.SetLabelText(this.Label3, "Dispose ¸Þ¼­µå È£Ãâ ÈÄ");
}

// ¨è Test2 Button Click
protected void btnTest2_Click(object sender, EventArgs e)
{
    this.SetLabelText(this.Label1, "Test2 Button Click<br>ÀνºÅϽº Àü");

    InterfaceTest iTest = new InterfaceTest();

    this.SetLabelText(this.Label2, "ÀνºÅϽº ÈÄ");

    iTest.Dispose();

    this.SetLabelText(this.Label3, "Dispose ¸Þ¼­µå È£Ãâ ÈÄ");
}

// ¨é Test3 Button Click
protected void btnTest3_Click(object sender, EventArgs e)
{
    this.SetLabelText(this.Label1, "Test3 Button Click<br>ÀνºÅϽº Àü");

    using (InterfaceTest iTest = new InterfaceTest())
    {
        this.SetLabelText(this.Label2, "ÀνºÅϽº ÈÄ");
    }

    this.SetLabelText(this.Label3, "Dispose ¸Þ¼­µå È£Ãâ ÈÄ");
}

// ¨ê Label strMessage Ãâ·Â
private void SetLabelText(Label label, string strMessage)
{
    label.Text = string.Format("{0} : {1}", new object[] { strMessage, InterfaceTest.GetCount() });
}

// ¨ë Label Clear
private void ClearLabel()
{
    this.Label1.Text = string.Empty;
    this.Label2.Text = string.Empty;
    this.Label3.Text = string.Empty;
}

¼Ò½º 3. Default.aspx.cs

Click EventÀÌ¿ÜÀÇ ¸Þ¼­µå´Â
¨ê ÇØ´ç Label¿¡ ¸Þ¼¼Áö¸¦ Ãâ·ÂÇÕ´Ï´Ù.
¨ë ÆäÀÌÁö°¡ ·ÎµùµÉ¶§ LabelÀÇ ³»¿ëÀ» ÃʱâÈ­ÇÕ´Ï´Ù.
¾î·Á¿î ºÎºÐÀº ¾øÀ¸½ÃÁÒ?

±×¸®°í ¹öư À̺¥Æ®ÀÇ SetLabelText´Â °¢°¢ÀÇ »óÅ¿¡ µû¶ó nCountÀÇ º¯È­¸¦ À§Çؼ­ °øÅëÀûÀ¸·Î ¾²¿´½À´Ï´Ù. ±×·³ ¹öư Çϳª¾¿ ClickÇØ¼­ °á°ú È­¸é°ú ÇÔ²² ³»¿ëÀ» ¼³¸íÇϰڽÀ´Ï´Ù.


±×¸² 15. Default.aspx - Test1 Button Click

¨ç ÀνºÅϽº¸¦ »ý¼ºÇϰí Dispose ¸Þ¼­µå¸¦ È£ÃâÇÏÁö ¾Ê¾Æ nCount¼ö°¡ 1·Î ³ª¿À°í ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô »ç¿ëÀ» ÇÏ°Ô µÇ¸é ¾ðÁ¦ °¡ºñÁö ¼öÁý±â°¡ µ¿ÀÛÀ» ÇÒÁö ¸ð¸£°Ô µÇ°ÚÁÒ? ±×·¡¼­ ´ëºÎºÐ ¨è¿Í °°ÀÌ ¸í½ÃÀûÀ¸·Î Dispose ¸Þ¼­µå¸¦ È£ÃâÇÕ´Ï´Ù.


±×¸² 16. Default.aspx - Test2 Button Click

¨è °¡Àå Á¤¼®ÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇÏ¿´½À´Ï´Ù. ÀνºÅϽº »ý¼º ÈÄ Dispose ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ¸Þ¸ð¸®¿¡¼­ ÇØÁ¦ÇÕ´Ï´Ù. ±×·¯¹Ç·Î ÀνºÅϽº Àü°ú Dispose ¸Þ¼­µå È£ÃâÈÄ¿¡ nCount °ªÀÌ µ¿ÀÏÇØ Á³½À´Ï´Ù.


±×¸² 17. Default.aspx - Test3 Button Click

¨é ¿ÀÈ£. ¿©±â¿¡´Â Dispose ¸Þ¼­µå¸¦ È£ÃâÇÏÁö ¾Ê¾Ò´Âµ¥µµ ¨è¿Í °°Àº »óȲÀÌ ¹ß»ýÇÏ¿´½À´Ï´Ù. ÀÌ°Ç using ±¸¹®À» »ç¿ëÇÏ¿© using ±¸¹®³»¿¡¼­¸¸ ÀνºÅϽº »ý¼ºÈÄ ±¸¹®ÀÌ ³¡³¯¶§ Dispose ¸Þ¼­µå¸¦ ÀÚµ¿ È£ÃâÇÏ¿´±â ¶§¹®ÀÔ´Ï´Ù.

¨ç, ¨è´Â Æò»ó½Ã¿¡ ¸¹ÀÌ »ç¿ëÀ» ÇÏ°í °è½Ç°Å¶ó »ý°¢ÀÌ µÇ¾î Ãß°¡ ¼³¸íÀº ÇÏÁö ¾Ê°Ú½À´Ï´Ù. ÇÏÁö¸¸ ¨éÀº Á¶±Ý ´õ ¼³¸íÀ» µå·Á¾ß ÇÒ °Í °°½À´Ï´Ù. 'µµ´ëü usingÀÌ ¸Õµ¥ Dispose¸¦ ÀÚµ¿ È£Ãâ ÇÏ´Â °ÍÀ̾ß?' ¶ó°í »ý°¢À» ÇϽðÚÁö¿ä?

C#ÀÇ usingÀº µÎ°¡Áö ±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù. Namespace¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â Áö½Ã¹®À¸·Î½á, ¶Ç Çϳª´Â °³Ã¼ÀÇ ¹üÀ§¸¦ ¼³Á¤ÇÏ¿© »ç¿ëÇÒ¶§ÀÇ ±¸¹®À¸·Î½á »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù. ¨é ¿¡¼­ »ç¿ëÇÑ usingÀº µÎ¹øÂ° ¼³¸í¿¡ ÇØ´çÀÌ µË´Ï´Ù. usingÀ» »ç¿ëÇÏ¿© ÀνºÅϽº¸¦ »ý¼ºÇϰí usingÀÌ ³¡³¯¶§ Dispose¸¦ È£ÃâÇÏ¿© ÇØÁ¦¸¦ ÇÕ´Ï´Ù.

±×·¸´Ù¸é usingÀ» »ç¿ëÇØ¼­ ¸Þ¸ð¸®¸¦ ÀÚµ¿ ÇØÁ¦ ÇϰíÀÚ ÇÒ¶§ ÇØ´ç Class¿¡ Dispose ¸Þ¼­µå¸¸ ÀÖÀ¸¸é µÉ±î¿ä? ÇÑ ¹ø ÇØº¸µµ·Ï ÇÏÁö¿ä. InterfaceTest.cs¿¡¼­ IDisposable Interface ºÎºÐÀ» »èÁ¦Çϰí Default.aspx¸¦ ½ÇÇàÇØ º¸°Ú½À´Ï´Ù.


±×¸² 18. Default.aspx - Error

À¸È÷~~ ¶±ÇÏ´Ï ¿¡·¯°¡ ¹ß»ýÀ» Çϳ׿ä. ¿¡·¯ ³»¿ëÁß ¿À·ù ¸Þ¼¼Áö¸¦ º¸½Ã¸é, 'CS1674: 'InterfaceTest': using ¹®¿¡ »ç¿ëµÈ Çü½ÄÀº ¾Ï½ÃÀûÀ¸·Î 'System.IDisposable'·Î º¯È¯ÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.' ÀÌ·¸°Ô ³ª¿É´Ï´Ù. Áï using ±¸¹®À» »ç¿ëÇÏ¿© ¸Þ¸ð¸® ÇØÁ¦¸¦ ÇÏ·Á¸é Class¿¡ IDisposable Interface¸¦ »ç¿ëÇÏ¿© Dispose ¸Þ¼­µå¸¦ ±¸¼ºÇØ¾ß ÇÕ´Ï´Ù. ^^

¾Õ¼­ º» SqlConnectionµµ °°Àº ¹æ¹ýÀ¸·Î »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù. SqlConnection Class°¡ »ó¼Ó¹Þ´Â DbConnection Class¿¡ IDisposable Interface »ó¼ÓÀÌ µÇ¾î ÀÖÀ¸¹Ç·Î..

using (SqlConnection con = new SqlConnection())
{
    // SQL ¿¬°á ó¸® ±¸¹® (»ý·«)
}


¼Ò½º 4. usingÀ» »ç¿ëÇÑ SqlConnection

À§¿Í °°ÀÌ »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù.

ÈÞ¿ì~~ ¿©±â±îÁö ¼Ò°³¸¦ µå·Á¾ß ÇÒ°Í °°½À´Ï´Ù. ¿ø·¡ °­ÁÂÀÇ ¸ñÀûÀº Interface¸¦ ¾Ë¾Æº¸ÀÚ¶ó´Â ¸ñÀûÀ̾ú´Âµ¥, ´õ ¸¹Àº ³»¿ëÀÌ µé¾î°¥ °Í °°¾Æ ÀÌ°Ç ¾Æ´Ï´Ù ¶ó´Â »ý°¢ÀÌ µå´Â±º¿ä. Â÷ÈÄ ¶Ç ±âȸ°¡ µÈ´Ù¸é (Á¦°¡ °ÔÀ¸¸§¸¸ ºÎ¸®Áö ¾Ê´Â´Ù¸é.. -_-) ¿©±â¼­ ¸ø´ÙÇÑ ¾ê±âµéÀ» ²¨³»º¸°Ú½À´Ï´Ù.

 

5. ¸ÎÀ½¸»

¿©±â±îÁö°¡ IDisposable Interface¸¦ ÀÌ¿ëÇÑ Interface ¾Ë¾Æº¸±â ¿´½À´Ï´Ù.

Interface¿¡ ´ëÇØ¼­ Àúµµ ¾ó¸¶Àü±îÁö´Â ±×´ÙÁö ½Å°æÀ» ¾²Áö ¾Ê¾Ò°í, 'À̰ЏӳÄ? ²À ¾Ë¾Æ¾ß Çϳª?'¶ó´Â »ý°¢ÀÌ Âü ¸¹¾Ò½À´Ï´Ù. ÇÏÁö¸¸ ¿©·¯ ÀÛ¾÷µéÀ» Çϸ鼭 Class¸¦ ¸¸µé°í È®ÀåÀ» ÇÏ´Ùº¸´Ï FrameworkÀÇ Class¸¦ »ó¼Ó¹Þ¾Æ¼­ »ç¿ëÀ» ÇÏ°Ô µÇ´Âµ¥¿ä. ±× »ó¼ÓµÈ Class¸¦ ±îº¸¸é ²À Interface°¡ ÀÖ´õ¶ó´Â °ÍÀÌÁö¿ä. '±×·³ À̳ÑÀº ¹«¾ùÀΰ¡?' ¶ó´Â »ý°¢¿¡ ¶Ç ¹«ÀÛÁ¤ ´Þ·Áº¸´Ï '¾ÆÇÏ~ À̳ÑÀº ÀÌ·±°É Çϰí, ¿ÀÈ£~ Àú³ÑÀº Àú·±°É Çϴ±¸³ª!' ÇÏ°í ¾Ë°Ô µÇ¾î¼­..

Ȥ½Ã Àú¿Í °°Àº ±æÀ» °ÉÀ¸½Ã´Â ºÐÀÌ °è½Ã´Ù¸é µµ¿òÀÌ µÉ±î ÇØ¼­ °­Á·ΠÁ¤¸®¸¦ ÇØº¸¾Ò½À´Ï´Ù. ^^ ¸¶Ä§ °ü·ÃµÈ Áú¹®À» ÇØÁֽô ºÐµµ °è¼Ì±¸¿ä.

¿©±â¼­ ¾ð±ÞÇÑ IButtonControl, IDisposable, Àá½Ã º¸ÀÎ IDbConnection, ICloneable, IPostBackEventHandler¿Ü¿¡µµ Á¤¸» ¹«Ã´À̳ª ¸¹Àº Interface°¡ Á¸ÀçÇÕ´Ï´Ù. Convert.ToInt16 µîÀ» »ç¿ëÇϱâ À§ÇÑ IConvertible, ¾î¶² µÎ°³Ã¼¸¦ ºñ±³Çϱâ À§ÇÑ Compare¸Þ¼­µå¸¦ °¡Áö°í ÀÖ´Â IComparer, Ä÷º¼Ç¿¡ Count ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Â ICollection, DataSource ControlÀ» ¸¸µé±â À§ÇÑ IDataSourceDesigner µî ±×³É ¹«½ÉÄÚ »ç¿ëÀ» Çϰí ÀÖ¾úÁö¸¸, »ç½ÇÀº ±×·¸°Ô »ç¿ëÀ» À§ÇØ ¹Ì¸® ´Ù Á¤Àǰ¡ µÇ¾îÀÖ¾ú´Ù´Â »ç½ÇÀ» ¾Ë°Ô µÇ½Ç°Å¶ó »ý°¢À» ÇÕ´Ï´Ù.

Àü Â÷ÈÄ¿¡ ´Ù¸¥ °­Á·Π´Ù½Ã ã¾ÆºÉ°ÍÀ» ¾à¼Óµå¸³´Ï´Ù. ^^

°¨»çÇÕ´Ï´Ù.

°­Á ¸ñ·ÏÀ¸·Î..