¼Ò¼³°°ÀºC#  Á¦2°­ÀÇ Å¬·¡½ºÀÇ ±âº»¹è°æ  22. unsafe¶ó°í ÇÏ´Â ÀÌÀ¯  

 

 

 

2.22 unsafe¶ó°í ÇÏ´Â ÀÌÀ¯

 

 

ÀϹÝÀûÀÎ °æ¿ì¿¡´Â C#¿¡¼­´Â C³ª C++¿¡¼­ »ç¿ëÇÏ´ø Æ÷ÀÎÅÍ(*)¸¦ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. ±×·¸´Ù°í C#¿¡¼­ Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¼ö ¾ø´Â °ÍÀº ¾Æ´Õ´Ï´Ù. C# ³»¿¡¼­ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ´Â °ÍÀº ¾à°£ÀÇ ¹®Á¦Á¡À» ¾È°í ÀÖ°í CLRÀÌ ¾ÈÀü¼ºÀ» º¸ÀåÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ºÒ¾ÈÀü »óÅ¿¡¼­ ½ÇÇàµË´Ï´Ù. ÀÌ·¯ÇÑ Äڵ带 ºÒ¿ÏÀüÄÚµå(unsafe code)¶ó°í ºÎ¸¨´Ï´Ù.

 

C#¿¡¼­ Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù°í ¹«ÀÛÁ¤ Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ´ÙÀ½°ú °°Àº °æ¿ì´Â ¾Æ¹«·± Á¶Ä¡¾øÀÌ Æ÷ÀÎÅ͸¦ »ç¿ëÇ߱⠶§¹®¿¡ ¿¡·¯¸¦ À¯¹ßÇϰí ÀÖ½À´Ï´Ù.

 

&

UnsafeTest.cs

Ü Æ÷ÀÎÅ͸¦ »ç¿ëÀ¸·Î ¿¡·¯ ¹ß»ý(UnSafe)

using System;

class UnsafeTest{

         static void CallByPoint(int* x) {

                    *x = 10000;

         }

         public static void Main() {

                    int x1 = 10;

                    CallByPoint(&x1);

                    Console.WriteLine("Call-By-Point: {0}", x1);

         }

}

C:\C#Example\02>csc UnsafeTest.cs

UnsafeTest.cs(3,26): error CS0214: Æ÷ÀÎÅÍ´Â ¾ÈÀüÇÏÁö ¾ÊÀº ÄÁÅØ½ºÆ® ¾È¿¡¼­¸¸

        »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

UnsafeTest.cs(4,4): error CS0214: Æ÷ÀÎÅÍ´Â ¾ÈÀüÇÏÁö ¾ÊÀº ÄÁÅØ½ºÆ® ¾È¿¡¼­¸¸

        »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

UnsafeTest.cs(8,15): error CS0214: Æ÷ÀÎÅÍ´Â ¾ÈÀüÇÏÁö ¾ÊÀº ÄÁÅØ½ºÆ® ¾È¿¡¼­¸¸

        »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

ÀÌ·¯ÇÑ °æ¿ì¸¦ ´ëºñÇØ¼­ C#¿¡¼­´Â unsafe Ű¿öµå¸¦ Á¦°øÇÕ´Ï´Ù. À§ÀÇ ¿¹Á¦¸¦ ´ÙÀ½°ú °°ÀÌ ¹Ù²Û´Ù¸é ¿ì¾ÆÇÏ°Ô µ¿ÀÛÇÕ´Ï´Ù.

 

&

UnsafeTest.cs

Ü unsafe Ű¿öµå¸¦ »ç¿ëÇÑ Æ÷ÀÎÅÍÀÇ »ç¿ë

using System;

class UnsafeTest{

           unsafe static void CallByPoint(int* x) {

                     *x = 10000;

           }

           public static void Main() {

                     int x1 = 10;

                 unsafe{

                              CallByPoint(&x1);

                 }

                     Console.WriteLine("Call-By-Point: {0}", x1);

           }

}

C:\C#Example\02>csc UnsafeTest.cs

UnsafeTest.cs(3,21): error CS0227: ¾ÈÀüÇÏÁö ¾ÊÀº ÄÚµå´Â /unsafe¸¦ »ç¿ëÇÏ¿©

        ÄÄÆÄÀÏÇÏ´Â °æ¿ì¿¡¸¸ ³ªÅ¸³¯ ¼ö ÀÖ½À´Ï´Ù.

C:\C#Example\02>csc  /unsafe  UnsafeTest.cs

C:\C#Example\02>UnsafeTest

Call-By-Point: 10000

 

À§ÀÇ ¿¹Á¦¿Í °°ÀÌ C#¿¡¼­ Æ÷ÀÎÅÍ(*)¸¦ »ç¿ëÇϱâ À§Çؼ­´Â unsafe Ű¿öµå¸¦ ÀÌ¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÀÌ·¯ÇÑ Æ÷ÀÎÅÍÀÇ »ç¿ëÀ» unsafe Ű¿öµå¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â ¸»±×´ë·Î Äڵ尡 ºÒ¾ÈÀüÇϱ⠶§¹®ÀÔ´Ï´Ù. Áï, CLRÀÇ °¡ºñÁöÄÝ·ºÅͰ¡ ¸Þ¸ð¸®¸¦ Á¤¸®Çϸ鼭 ¸Þ¸ð¸®¸¦ À̵¿½Ãų ¼öµµ Àֱ⠶§¹®¿¡ ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ ÇÚµéÇÏ´Â °ÍÀº ¾ÈÀüÇÏÁö ¾Ê´Ù´Â °ÍÀÔ´Ï´Ù. À̰ÍÀ» ÇØ°áÇϱâ À§Çؼ­ °¡ºñÁöÄÝ·ºÅͰ¡ ¸Þ¸ð¸®¸¦ À̵¿½ÃŰÁö ¸øÇϵµ·Ï fixed Ű¿öµå¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù. ´ÙÀ½ Àý¿¡¼­´Â fixed Ű¿öµå¿¡ ´ëÇØ¼­ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºC# Á¦2°­ÀÇ
ÀúÀÚ:ÃÖ¿µ°ü