9-3.¸Þ¸ð¸® °ü¸®

9-3-1.°¡ºñÁö Ä÷ºÅÍÀÇ µ¿ÀÛ

´å³ÝÀº °¡ºñÁö Ä÷ºÅÍ°¡ ¸Þ¸ð¸®¸¦ ÀÚµ¿ °ü¸®ÇÑ´Ù. ¿©±â¼­´Â °¡ºñÁö Ä÷ºÅÍÀÇ ³»ºÎ µ¿ÀÛ¿¡ ´ëÇØ ¿¬±¸ÇØ º¸ÀÚ. °¡ºñÁö Ä÷ºÅÍ´Â ¹é±×¶ó¿îµå¿¡¼­ Ç×»ó ½ÇÇàÁßÀÌ¸ç ´õ ÀÌ»ó »ç¿ëµÇÁö ¾Ê´Â ¸Þ¸ð¸®, Áï ¾²·¹±â¸¦ ã¾Æ ȸ¼öÇÑ´Ù. °³¹ßÀÚ´Â new ¿¬»êÀÚ·Î ÇÊ¿äÇѸ¸Å­ °´Ã¼³ª ¸Þ¸ð¸®¸¦ ÇÒ´çÇؼ­ ¾²´Ù°¡ ±×³É ³ª°¡ ¹ö¸®¸é µÈ´Ù.

 

void func() {

         int[] ar = new int[10];

         DateTime Now = new DateTime(1970, 6, 29);

         // °´Ã¼¸¦ ½ÇÄÆ »ç¿ëÇÑ´Ù.

}

 

Á¤¼öÇü ¹è¿­°ú DateTime °´Ã¼¸¦ Áö¿ªº¯¼ö·Î ¼±¾ðÇÏ¿© ½ÇÄÆ ¾²´Ù°¡ ÇØÁ¦³ª Æı«ÇÒ ÇÊ¿ä ¾øÀÌ ½ÎÁú·¯ ³õ°í µµ¸Á°¡ ¹ö¸®¸é ±×¸¸ÀÌ´Ù. delete Å°¿öµå´Â ¾Æ¿¹ Á¸ÀçÇÏÁö ¾ÊÀ¸¸ç ¸ðµç µÚÄ¡´Ú°Å¸®´Â °¡ºñÁö Ä÷ºÅÍ°¡ ¸Ã´Â´Ù. ÇØÁ¦¸¦ À§ÇÑ º¹ÀâÇÑ Á¦¾î¹®ÀÌ ÇÊ¿ä ¾ø¾î Æí¸®ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¾ÈÁ¤¼ºµµ ³ô°í ¿¹¿Ü³ª ½Ç¼ö¿¡ ÀÇÇØ ¸Þ¸ð¸®°¡ ´©ÃâµÉ À§Çèµµ ¾ø´Ù.

°¡ºñÁö Ä÷ºÅÍ´Â ¾²·¹±â ¼öÁý ¿Ü¿¡µµ ³·Àº ¹øÁöºÎÅÍ ¼ø¼­´ë·Î ÇÒ´çÇÏ¿© ÈüÀ» °ü¸®ÇÏ´Â Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù. °´Ã¼°¡ ¸¸µé¾îÁö°í ȸ¼öµÇ±â¸¦ ¹Ýº¹Çϸé ÈüÀÇ Áß°£ Áß°£ÀÌ ºñ´Â ´ÜÆíÈ­ Çö»óÀÌ ÀϾ´Ù. °¡ºñÁö Ä÷ºÅÍ´Â ³²¾Æ ÀÖ´Â ¸Þ¸ð¸®¸¦ À̵¿½ÃÄÑ Å« µ¢¾î¸®¸¦ ¸¸µå´Â ÄÄÆѼÇ(Compaction)À» ¼öÇàÇÑ´Ù.

Áß°£ÀÇ °´Ã¼°¡ ÇØÁ¦µÇ¸é ³²Àº °ø°£Àº ¸¹¾Æµµ Á¶°¢³­ »óÅ¿©¼­ Å« ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ¾ø´Ù. ÀÌ·²¶§ ³²Àº °´Ã¼¸¦ ¾ÕÂÊÀ¸·Î À̵¿½ÃÄÑ ´ÜÆíÈ­¸¦ Á¦°ÅÇÑ´Ù. ±¸È¹ Á¤¸®¸¦ ÅëÇÑ ÀÏÁ¾ÀÇ ¸Þ¸ð¸® ¾ÐÃàÀ̸ç Çϵåµð½ºÅ©ÀÇ Á¶°¢ ¸ðÀ½°ú ºñ½ÁÇÏ´Ù. ÈüÀº Ç×»ó °ü¸®ÁßÀ̾ °´Ã¼ÀÇ ¹øÁö´Â °íÁ¤µÇ¾î ÀÖÁö ¾Ê°í ÈüÀÇ ¾îµò°¡¸¦ ¶° µ¹¾Æ ´Ù´Ñ´Ù. ±×·¡¼­ Æ÷ÀÎÅ͸¦ ¾µ ¼ö ¾øÁö¸¸ ´ë½Å °´Ã¼¿Í ÇÔ²² °»½ÅµÇ´Â ÂüÁ¶ÀÚ¸¦ ÅëÇØ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ ÀÔÀå¿¡¼­ ÄÄÆѼÇÀº Åõ¸íÇÏ´Ù.

°¡ºñÁö Ä÷ºÅÍ°¡ ȸ¼öÇÒ °´Ã¼¸¦ ¼±Á¤ÇÏ´Â ¾Ë°í¸®ÁòÀº Á¤±³ÇÏ´Ù. °´Ã¼´Â º¸Åë ·çÆ® ¹Ø¿¡ Â÷Àϵ尡 °èÃþÀûÀ¸·Î Á¸ÀçÇÏ´Â Æ®¸® ±¸Á¶ÀÌ´Ù. Æû ¾Æ·¡ ÀÚ½Ä ÄÁÆ®·ÑÀÌ ÁÖ·· ÁÖ·· ´Þ·Á ÀÖ´Â °æ¿ìÀε¥ Â÷Àϵ峢¸®µµ »óÈ£ ÂüÁ¶ °¡´ÉÇØ Á¤È®ÇÏ°Ô´Â ±×·¡ÇÁ ±¸Á¶ÀÌ´Ù. °¡ºñÁö Ä÷ºÅÍ´Â Àü¿ª, Á¤Àû, Áö¿ª µî °¢ ¹üÁÖº°·Î Æ®¸®¸¦ °ü¸®ÇÏ¸ç ·çÆ®ºÎÅÍ ¼øȸÇÑ ÈÄ µµ´ÞÇÒ ¼ö ¾ø´Â °´Ã¼¸¦ ã´Â´Ù. ÂüÁ¶ Ä«¿îÆ® ¹æ¹ýº¸´Ù ºü¸£°í ½Å·Ú¼ºÀÌ ³ôÀ¸¸ç ¹ö·ÁÁø °´Ã¼³¢¸® »óÈ£ ÂüÁ¶ÇÏ´Â °æ¿ìµµ Àß Àû¹ßÇÑ´Ù. ·çÆ®°¡ ÇØÁ¦µÇ¸é ±× ¾Æ·¡ÀÇ ¸ðµç °´Ã¼´Â ÀÏ°ý ÇØÁ¦µÈ´Ù.

°´Ã¼°¡ ¸¹¾ÆÁö¸é °ñ¶ó³»´Â µ¥µµ ½Ã°£ÀÌ ¸¹ÀÌ °É·Á ¼¼´ë¸¦ °ü¸®ÇÏ´Â ¹æ½ÄÀ¸·Î °Ë»ö ½Ã°£À» ´ÜÃàÇÑ´Ù. ÃÖ±Ù¿¡ »ý¼ºµÈ °´Ã¼¸¦ 0¼¼´ë¶ó°í Çϸç 1Â÷ ¼öÁý´ë»óÀÌ´Ù. ÇÑ ¹ø ¼öÁýÇÑ ÈÄ »ì¾Æ ³²Àº °´Ã¼´Â 1¼¼´ë·Î ¿Å°ÜÁö°í 0¼¼´ë¿¡ ºñÇØ °¡²û¾¿ Á¡°ËÇÑ´Ù. 0¼¼´ë¸¦ ¼öÁýÇÏ°íµµ ºÎÁ·ÇÒ ¶§¸¸ 1¼¼´ë¸¦ ¼öÁýÇϸç À̶§ »ì¾Æ³²Àº °´Ã¼´Â 2¼¼´ë°¡ µÇ¾î ¿À·¡ À¯ÁöµÈ´Ù. ¼¼´ë ¾Ë°í¸®ÁòÀº ÃÖ±Ù °´Ã¼°¡ °¡ºñÁöÀÇ È®·üÀÌ ³ô°í ¿À·¡ »ýÁ¸ÇÑ °´Ã¼´Â ´õ ¿À·¡ À¯ÁöµÇ´Â Ư¼ºÀ» È°¿ëÇÑ °ÍÀÌ´Ù. Åо ³ª¿Ã¸¸ÇÑ ³ðÀº ÀÚÁÖ ÅÐ°í ¿À·¡ »ì¾Æ ³²Àº °´Ã¼´Â °¡±ÞÀû Á¦¿ÜÇÏ¿© ¼Óµµ¸¦ ³ôÀδÙ. ´ÙÀ½ Äڵ忡´Â µÎ °³ÀÇ °´Ã¼°¡ ÀÖ´Ù.

 

class Some {

         int[] A = new int[10];

         void Method() {

                      int[] B = new int[10];

         }

}

 

A´Â ÇʵåÀÌ°í B´Â Áö¿ªº¯¼ö´Ù. Ŭ·¡½º ¼Ò¼ÓÀÇ A°¡ ¸Þ¼­µå ¼Ò¼ÓÀÇ Bº¸´Ù »ý¸íÀÌ ´õ ±æ °ÍÀÓÀ» ÁüÀÛÇÒ ¼ö ÀÖ´Ù. B´Â ¸Þ¼­µå Á¾·á½Ã 0¼¼´ë¿¡¼­ Áï½Ã ȸ¼öµÇÁö¸¸ A´Â °´Ã¼°¡ ÀÖ´Â ÇÑ È¸¼öµÇÁö ¾Ê°í 1, 2 ¼¼´ë°¡ µÇ¾î ´õ ¿À·§µ¿¾È »ì¾Æ ³²´Â´Ù. ³»ºÎ´Â ÈξÀ ´õ º¹ÀâÇÏ°í Á¤±³ÇÏÁö¸¸ ´ëÃ游 ºÁµµ ²Ï ¶È¶ÈÇÏ´Ù´Â °ÍÀ» ´«Ä¡Ã§ ¼ö ÀÖ´Ù. ¾î·ÃÈ÷ ¾Ë¾Æ¼­ Àß ¸¸µé¾î ³ùÀ» °ÍÀÌ°í ¹Ï°í ¸Ã°Ü µÎ¸é µÇÁö¸¸ ÇÊ¿äÇÏ´Ù¸é System.GC Ŭ·¡½º¸¦ ÅëÇØ °¡ºñÁö Ä÷ºÅÍÀÇ µ¿ÀÛÀ» Á¦¾îÇÒ ¼ö ÀÖ´Ù.

 

¸Þ¼­µå

¼³¸í

Collect

¸Þ¸ð¸®¸¦ Áï½Ã ȸ¼öÇÑ´Ù. Àμö·Î ´ë»ó ¼¼´ë¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç ¼¼´ë¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¸ðµç ¼¼´ë°¡ ȸ¼öµÈ´Ù. ±×·¯³ª ¸ðµç ¸Þ¸ð¸®°¡ Áï½Ã ȸ¼öµÈ´Ù´Â °ÍÀ» º¸ÀåÇÒ ¼ö´Â ¾ø´Ù.

GetGeneration

°´Ã¼ÀÇ ÇöÀç ¼¼´ë ¹øÈ£¸¦ Á¶»çÇÑ´Ù.

GetTotalMemory

ÇöÀç ÇÒ´çµÇ¾î ÀÖ´Â ¸Þ¸ð¸®¾çÀ» Á¶»çÇÑ´Ù.

KeepAlive

ÁöÁ¤ÇÑ °´Ã¼°¡ ¾²·¹±â ¼öÁýµÇÁö ¾Êµµ·Ï º¸ÀåÇÑ´Ù. ºñ°ü¸® Äڵ忡¼­ »ç¿ëµÇ´Â °´Ã¼´Â ³Ê¹« ÀÏÂï ȸ¼öµÇÁö ¾Êµµ·Ï Àá½Ã º¸È£ÇØ¾ß ÇÑ´Ù. ÀϽÃÀûÀ¸·Î °´Ã¼ÀÇ ¼ö¸íÀÌ ¿¬ÀåµÈ´Ù.

SuppressFinalize

ÁöÁ¤ÇÑ °´Ã¼ÀÇ Æı«ÀÚ¸¦ È£ÃâÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. ÀÌ ¸Þ¼­µå´Â °´Ã¼ Çì´õÀÇ Æ¯Á¤ÇÑ ºñÆ®¸¦ ¼³Á¤ÇÏ¿© Æı«ÀÚ È£ÃâÀ» ¸·´Â´Ù.

ReRegisterForFinalize

Æı«ÀÚ¸¦ ´Ù½Ã È£ÃâÇϵµ·Ï ÇÑ´Ù.

WaitForPendingFinalizers

Æı«ÀÚ Å¥¸¦ Á¤¸®ÇÏ´Â µ¿¾È ÇöÀç ½º·¹µå¸¦ Àá½Ã ´ë±â½ÃŲ´Ù.

 

ÇÏÁö¸¸ ÀÌ ¸Þ¼­µåµéÀº ÇԺηΠȣÃâÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. ¾Ë¾Æ¼­ Àß µ¿ÀÛÇϴµ¥ ¾µµ¥¾øÀÌ ÈƼö¸¦ µÎ¸é ºñÈ¿À²ÀÌ ¹ß»ýÇÑ´Ù. ÇÑ ¹øÂë Collect·Î ¸Þ¸ð¸®¸¦ È®º¸ÇØ º¸°í ½ÍÀº À¯È¤ÀÌ µé´õ¶óµµ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¸Þ¸ð¸® °ü¸®¿¡ °£¼·ÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù.

¸Þ¸ð¸®¸¦ ½Ï½Ï ±Ü¾î ¸ð¾Æ¾ß ÇÒ Á¤µµÀÇ »óȲÀÌ ÀÚÁÖ ¹ß»ýÇÑ´Ù¸é ¸Þ¸ð¸®¸¦ ´Ã¸®´Â °ÍÀÌ ÇÕ¸®ÀûÀÌ°í ¼Õ½¬¿î ÇØ°áÃ¥ÀÌ´Ù. °³¹ßÀÚ´äÁö ¸øÇÑ ¸Á¾ðÀ¸·Î µé¸±Áö ¸ð¸£°ÚÁö¸¸ ±×°Ô ½È´Ù¸é C#À̳ª ÀÚ¹Ù¸¦ ½á¼­´Â ¾ÈµÇ¸ç C++·Î µ¹¾Æ°¡¾ß ÇÑ´Ù. °í¼öÁØ ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ¸Þ¸ð¸® ºÎÁ·Àº ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Ã¥ÀÓÀÌ ¾Æ´Ï´Ù.

9-3-2.IDisposable

°¡ºñÁö Ä÷ºÅÍ´Â °ü¸® ÀÚ¿ø¸¸ ¼öÁýÇÑ´Ù. ¸Þ¸ð¸®¿Í ¹«°üÇÑ ÆÄÀÏÀ̳ª Çϵå¿þ¾î ȯ°æ º¯È­, ³×Æ®¿÷ Á¢¼Ó µîÀº °´Ã¼°¡ Á÷Á¢ °ü¸®ÇØ¾ß ÇÑ´Ù. ÀÌ·² ¶§´Â Æı«ÀÚ¸¦ »ç¿ëÇϴµ¥ ¾Õ¿¡¼­ Destructor ¿¹Á¦·Î ¼ÒÄÏ ¿¬°áÀ» °ü¸®ÇØ º¸¾Ò´Ù.

¹®Á¦´Â Æı«ÀÚ°¡ ¾ðÁ¦ È£ÃâµÉÁö ¿¹ÃøÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù. °¡ºñÁö Ä÷ºÅÍ´Â °´Ã¼ »èÁ¦½Ã Æı«ÀÚ Å¥¿¡ ´ë±â½ÃÄÑ ³õ°í ÇÑ°¡ÇÒ ¶§ Æı«ÀÚ¸¦ È£ÃâÇÑ´Ù. S°¡ Æı«µÈ ÈÄ 1234 Æ÷Æ®¸¦ »ç¿ëÇÏ´Â T °´Ã¼¸¦ ´Ù½Ã »ý¼ºÇÏ·Á¸é S°¡ Áï½Ã 1234Æ÷Æ®¸¦ ÇØÁ¦ÇØ¾ß Çϴµ¥ Æı«ÀÚ°¡ ½Ç½Ã°£À¸·Î È£ÃâµÇÁö ¾Ê¾Æ ¹®Á¦°¡ µÈ´Ù.

ºñ°ü¸® ÀÚ¿øÀ» Áï½Ã ÇØÁ¦Çϰųª °ü¸® ÀÚ¿øÀÌ¶óµµ ½Å¼ÓÇÏ°Ô ÇØÁ¦ÇÏ·Á¸é º°µµÀÇ ÇØÁ¦ ¸Þ¼­µå¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ÇØÁ¦ ¸Þ¼­µå´Â IDisposable ÀÎÅÍÆäÀ̽ºÀÇ Dispose¸¦ ¾²µµ·Ï ¾à¼ÓµÇ¾î ÀÖ´Ù. Dispose´Â Àμöµµ, ¸®ÅÏ°ªµµ ¾øÀ¸¸ç ÀÚ¿ø¸¸ ÇØÁ¦ÇÑ´Ù.

 

Destructor2

½ÇÇà°á°ú

using System;

 

class Socket : IDisposable {

             private int SocketPort;

             public Socket(int port) {

                           SocketPort = port;

                           Console.WriteLine($"{port} Æ÷Æ®·Î ¼ÒÄÏÀ» ¿¬°áÇÑ´Ù.");

             }

             public void Dispose() {

                           SocketPort = 0;

                           Console.WriteLine("¼ÒÄÏ ¿¬°áÀ» ÇØÁ¦ÇÑ´Ù.");

             }

}

 

class CSTest {

             static void Main() {

                           Socket S = new Socket(1234);

                           Console.WriteLine("ÁÖ°Å´Ï ¹Þ°Å´Ï Åë½ÅÇß´Ù Ä¡°í...");

                           S.Dispose();

             }

}

1234 Æ÷Æ®·Î ¼ÒÄÏÀ» ¿¬°áÇÑ´Ù.

ÁÖ°Å´Ï ¹Þ°Å´Ï Åë½ÅÇß´Ù Ä¡°í...

¼ÒÄÏ ¿¬°áÀ» ÇØÁ¦ÇÑ´Ù.

 

Æı«ÀÚ ´ë½Å Dispose¿¡¼­ ¸í½ÃÀûÀ¸·Î ÀÚ¿øÀ» ÇØÁ¦Çϸé È£Ãâ Áï½Ã µ¿ÀÛÇÏ¿© ºÒÈ®½Ç¼ºÀÌ Á¦°ÅµÈ´Ù. ±×·¯³ª »ç¿ëÀÚ°¡ ±ô¹Ú ÀØ°í Dispose È£ÃâÀ» ´©¶ôÇϸé ÇØÁ¦µÇÁö ¾Ê´Â ÀáÀçÀûÀÎ ¹®Á¦°¡ ÀÖÀ¸¸ç ÀÌ °æ¿ì ÇÁ·Î±×·¥À» Á¾·áÇصµ ¹ÌÇØÁ¦ »óȲÀÌ Áö¼ÓµÈ´Ù.

»ç¿ëÀÚÀÇ °ú½ÇÀÌ¶óµµ ¿åÀº °³¹ßÀÚ°¡ ¸Ô±â ¸¶·ÃÀ̾ ÃÖ¼ÒÇÑÀÇ ¹æ¾î°¡ ´õ ÇÊ¿äÇÏ´Ù. ÀÌ·± °æ¿ì´Â Æı«ÀÚ¿Í Dispose¸¦ µ¿½Ã¿¡ ±¸ÇöÇÏ¿© °ü¸® ÀÚ¿ø°ú ºñ°ü¸® ÀÚ¿øÀ» ºÐ´ãÇÏ¿© ÇØÁ¦Ç쵂 ÀÌÁßÇØÁ¦ ÇÏÁö ¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â Á¦¹ÝÀÇ ¹®Á¦¸¦ ÇØ°áÇÑ °ÍÀÌ´Ù.

 

Dispose

using System;

 

class Socket : IDisposable {

             private int SocketPort;

             private bool Disposed = false;

             public Socket(int port) {

                           SocketPort = port;

                           Console.WriteLine($"{port} Æ÷Æ®·Î ¼ÒÄÏÀ» ¿¬°áÇÑ´Ù.");

             }

             public void Dispose() {

                           Dispose(true);

                           GC.SuppressFinalize(this);

             }

             public virtual void Dispose(bool bManage) {

                           if (Disposed) return;

                           Disposed = true;

                           if (bManage) {

                                        // ¿©±â¼­ °ü¸® ÀÚ¿øÀ» ÇØÁ¦ÇÑ´Ù.

                           }

                           SocketPort = 0;

                           Console.WriteLine("¼ÒÄÏ ¿¬°áÀ» ÇØÁ¦ÇÑ´Ù.");

             }

             ~Socket() {

                           Dispose(false);

             }

}

 

class CSTest {

             static void Main() {

                           Socket S = new Socket(1234);

                           Console.WriteLine("ÁÖ°Å´Ï ¹Þ°Å´Ï Åë½ÅÇß´Ù Ä¡°í...");

                           S.Dispose();

             }

}

 

Dispose ¿Ü¿¡ Dispose(bool) ¸Þ¼­µå°¡ Çϳª ´õ ÀÖ¾î bManage Àμö¿¡ µû¶ó ¸ðµç ÀÚ¿ø ¶Ç´Â ºñ°ü¸® ÀÚ¿ø¸¸ ÇØÁ¦ÇÑ´Ù. ÄÚµå Áߺ¹À» ¹æÁöÇϱâ À§ÇØ ½ÇÁ¦ ÀÚ¿ø ÇØÁ¦ ÄÚµå´Â ÀÌ ¸Þ¼­µå¿¡ ÀÛ¼ºÇØ ³õ°í Æı«ÀÚ¿Í Dispose()¿¡¼­ È£ÃâÇÑ´Ù. Disposed Çʵå´Â ÀÌÁß ÇØÁ¦¸¦ ¹æÁöÇϱâ À§ÇÑ Ç÷¡±×ÀÌ´Ù. Disposed°¡ falseÀÏ ¶§¸¸ ¿¬°áÀ» ²÷À¸¸ç ±× »ç½ÇÀ» Disposed¿¡ ±â·ÏÇØ µÐ´Ù.

µÎ °³ÀÇ Dispose¿Í Æı«ÀÚ°¡ ÇØÁ¦¸¦ ºÐ´ãÇϴµ¥ °¢ ¸Þ¼­µå´Â È£Ãâ °æ·Î¿Í ¿ªÇÒÀÌ ´Ù¸£´Ù. Æı«ÀÚ´Â ÀÚ½ÅÀÌ Á÷Á¢ ÇÒ´çÇÑ ºñ°ü¸® ÀÚ¿ø¸¸ ÇØÁ¦ÇÏ¸ç °ü¸® ÀÚ¿øÀº °Çµå¸®Áö ¾Ê´Â´Ù. Æı«Àڴ ȣÃ⠽ñ⸦ ¿¹ÃøÇÒ ¼ö ¾ø´Âµ¥ ¾ÆÁ÷ Æı«µÇÁö ¾ÊÀº ´Ù¸¥ °´Ã¼°¡ ÀÌ °´Ã¼¸¦ ÂüÁ¶ÇÏ°í ÀÖÀ» °¡´É¼ºÀÌ ÀÖ´Ù. °ü¸® ÀÚ¿øÀº °¡ºñÁö Ä÷ºÅÍ¿¡°Ô ÀÏÀÓÇÏ¿© °ü·Ã °´Ã¼¸¦ °°ÀÌ ÇØÁ¦Çϵµ·Ï ³»¹ö·Á µÎ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.

Dispose()´Â Dispose(true)¸¦ È£ÃâÇÏ¿© ¸ðµç ÀÚ¿øÀ» ÇØÁ¦ÇÏ¸ç »ý¼º ÀüÀÇ »óÅ·Πº¹±¸ÇÑ´Ù. ¸ðµç ÀÚ¿øÀÌ ´Ù ÇØÁ¦µÇ¾úÀ¸¹Ç·Î GC.SupressFinalize ¸Þ¼­µå·Î Æı«ÀÚ È£ÃâÀ» ±ÝÁö½ÃŲ´Ù. ÀÌ Ã³¸®¸¦ »ý·«Çϸé ÀÌÁß ÇØÁ¦ÀÇ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.

Åë½ÅÀ» ¸¶Ä£ ÈÄ ¿¬°áÀ» Áï½Ã ²÷°í ½ÍÀ» ¶§´Â Dispose ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ¸ðµç ÀÚ¿øÀ» ÇØÁ¦Çϸç À̶§ Æı«Àڴ ȣÃâÇÒ ÇÊ¿ä ¾ø´Ù. Áï½Ã ²÷À» ÇÊ¿ä°¡ ¾øÀ» ¶§´Â °¡¸¸È÷ ³»¹ö·Á µÎ¸é µÈ´Ù. °ü¸® ÀÚ¿øÀº °¡ºñÁö Ä÷ºÅÍ°¡ ÇØÁ¦ÇÏ°í ºñ°ü¸® ÀÚ¿øÀº Æı«ÀÚ°¡ ÇØÁ¦ÇÑ´Ù.

ÀÚ¿ø ÇØÁ¦ ¸Þ¼­µå´Â Á÷Á¢ È£ÃâÇÏ´Â °ÍÀ̾ CleanUpÀ̳ª Close ¶Ç´Â ChiARa °°Àº À̸§À¸·Î ÀÛ¼ºÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ¾à¼ÓµÈ IDisposable ÀÎÅÍÆäÀ̽º¸¦ ¾²¸é using ºí·Ï¿¡¼­ ÇØÁ¦ ¸Þ¼­µå¸¦ ÀÚµ¿À¸·Î È£ÃâÇØ ÁÖ´Â ÀÌÁ¡ÀÌ ÀÖ´Ù. Main ¸Þ¼­µå¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çصµ °á°ú´Â °°´Ù.

 

 static void Main() {

          using (Socket S = new Socket(1234)) {

                       Console.WriteLine("ÁÖ°Å´Ï ¹Þ°Å´Ï Åë½ÅÇß´Ù Ä¡°í...");

          }

 }

 

usingÀº °´Ã¼°¡ ºí·ÏÀ» ¹þ¾î³¯ ¶§ Dispose¸¦ ÀÚµ¿À¸·Î È£ÃâÇϸç ÀÌ·± µ¿ÀÛÀÌ °¡´ÉÇÏ·Á¸é ¸Þ¼­µåÀÇ À̸§ÀÌ Á¤ÇØÁ® ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ ¾à¼ÓÀ» °­Á¦ÇÏ´Â ÀåÄ¡°¡ IDisposable ÀÎÅÍÆäÀ̽ºÀÌ´Ù.

using ºí·Ï ´ë½Å finally ¿¹¿Ü ó¸® ±¸¹®À¸·Îµµ ¶È°°Àº È¿°ú¸¦ º¼ ¼ö ÀÖÀ¸¸ç ½ÇÁ¦·Î using ºí·ÏÀº try, finally ºí·ÏÀ¸·Î ÄÄÆÄÀϵȴÙ. ¸Å¹ø ÀÌ·¸°Ô ºí·ÏÀ» °¨½Î±â ±ÍÂú±â ¶§¹®¿¡ ÄÄÆÄÀÏ·¯°¡ using ºí·ÏÀ» Á¦°øÇÏ°í ºí·ÏÀÌ ³¡³¯ ¶§ Dispose¸¦ ÀÚµ¿À¸·Î È£ÃâÇÑ´Ù.

 

try {

         Socket S = new Socket(1234)

         Console.WriteLine("ÁÖ°Å´Ï ¹Þ°Å´Ï Åë½ÅÇß´Ù Ä¡°í...");

}

finally {

         S.Dispose();

}

 

using Å°¿öµå´Â ³×ÀÓ½ºÆäÀ̽º¸¦ ÁöÁ¤ÇÒ ¶§µµ ¾²°í ÀÚ¿ø ÇØÁ¦ ºí·Ï¿¡µµ »ç¿ëÇÏ¿© Áߺ¹µÈ Àǹ̸¦ °¡Áø´Ù. ±×·¯³ª öÀÚ¸¸ °°Áö Àǹ̴ ¿ÏÀüÈ÷ ´Ù¸£´Ù. ÇϳªÀÇ Å°¿öµå¸¦ µÎ °¡Áö ÀÌ»óÀÇ Àǹ̷Π»ç¿ëÇÏ´Â °ÍÀ» Å°¿öµå Áߺ¹(Keyword overloading)À̶ó°í Çϴµ¥ ÀÏÁ¾ÀÇ µ¿À½ ÀÌÀǾîÀÌ´Ù.

°´Ã¼¸¦ »ý¼ºÇÏ´Â ¿¬»êÀÚ new¿Í ºÎ¸ðÀÇ ¸Þ¼­µå¸¦ ¼û±â´Â newµµ Å°¿öµå Áߺ¹ÀÇ ¿¹ÀÌ´Ù. Å°¿öµåÀÇ °³¼ö¸¦ ÃÖ¼ÒÈ­ÇÏ¿© »ç¿ëÀÚ¿¡°Ô ¸íĪ ¼±ÅÃÀÇ ÀÚÀ¯¸¦ Áشٴ ±àÁ¤ÀûÀÎ Àǹ̰¡ ÀÖÁö¸¸ ¹®¹ýÀ» ÁöÀúºÐÇÏ°Ô ¸¸µå´Â ºÎÁ¤ÀûÀÎ ¸éµµ ÀÖ´Ù. ¿©·¯ ÁÖü°¡ °ü¿©ÇÑ °ú°ÅÀÇ ¾ð¾î´Â ¾î¿ ¼ö ¾ø¾ú´Ù Ãĵµ ÇÑ È¸»ç¿¡¼­ ¸¸µç C#ÀÇ Å°¿öµå Áߺ¹Àº Á» ¾Æ½¬¿î ´ë¸ñÀÌ´Ù.