13-2. ³Î °¡´É ŸÀÔ

13-2-1.³Î »óÅÂ

º¯¼ö´Â ŸÀÔ¿¡ µû¶ó Ç¥Çö ¹üÀ§°¡ Á¤ÇØÁ® ÀÖ´Ù. byte´Â 0 ~ 255±îÁöÀÇ Á¤¼ö¸¦ Ç¥ÇöÇϸç boolÀº true, false µü µÎ °¡Áö »óŸ¸ Ç¥ÇöÇÑ´Ù. int´Â 40¾ï°¡Áö³ª Ç¥ÇöÇÒ ¼ö ÀÖÁö¸¸ ¹üÀ§°¡ À¯ÇÑÇÏ´Ù´Â °ÍÀº °°´Ù. °³¹ßÀڴ ǥÇöÇÒ ¹üÀ§¿¡ ¸Â´Â ŸÀÔÀ» ¼±ÅÃÇؼ­ »ç¿ëÇÑ´Ù.

ÇÏÁö¸¸ Çö½Ç¿¡¼­´Â °¡´ÉÇÑ °ª Áß ¾î´À °Íµµ ¾Æ´Ñ °æ¿ì°¡ Á¸ÀçÇÑ´Ù. boolÇüÀÇ bMale º¯¼ö·Î ¼ºº°À» Ç¥ÇöÇÏ¸é ³²ÀÚ, ¿©ÀÚ µÑ ÁßÀÇ »óŸ¦ ÀúÀåÇÒ ¼ö ÀÖ¾î º° ¹®Á¦¾ø¾î º¸ÀδÙ. ±×·¯³ª ¼ºº°¶õÀ» ºñ¿ö µÑ ¼öµµ ÀÖ°í ¾ÆÁ÷ ¼ºº°À» ¸ð¸£´Â žƵµ ÀÖ´Ù. ¼ºÀûÀº 0 ~ 100ÀÇ ¹üÀ§¿¡ ºÐÆ÷ÇÏÁö¸¸ °á¼®, äÁ¡Áß, ÀüÇÐ, ºÎÁ¤ ÇàÀ§ µî °áÁ¤ÇÒ ¼ö ¾ø´Â »óŵµ ÀÖ´Ù.

¾Ë¼ö ¾ø°Å³ª ¹Ì°áÁ¤µÈ °ªÀ» ³ÎÀ̶ó°í ÇÏ¸ç µ¥ÀÌÅͺ£À̽º¿¡¼­ ÈçÈ÷ »ç¿ëÇÑ´Ù. ³ÎÀº °ªÀ̶ó±âº¸´Ù´Â ÀÏÁ¾ÀÇ »óÅÂÀÌ´Ù. ³Î »óŸ¦ Ç¥ÇöÇϱâ À§ÇØ ÈçÈ÷ ƯÀÌ°ªÀ» »ç¿ëÇÑ´Ù. ¼ºÀûÀº -1À̳ª 101ó·³ Á¤»óÀûÀÎ ¼ºÀûÀÌ ¾Æ´Ñ °ªÀ» ¼±Á¤ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ boolÇüÀº ƯÀÌ°ªÀ¸·Î ¾µ¸¸ÇÑ °ªÀÌ ¾ø¾î ÀÌ ¹æ¹ýÀº ÇÑ°è°¡ ÀÖ´Ù. ±×·¡¼­ µ¥ÀÌÅͺ£À̽º´Â ³Î »óŸ¦ Ưº°È÷ °ü¸®ÇÑ´Ù.

³Î °¡´É ŸÀÔÀº ƯÁ¤ ŸÀÔÀÇ ¸ðµç °ª°ú ÇÔ²² ³Î »óűîÁö Ç¥ÇöÇϴ ŸÀÔÀÌ´Ù. ³»ºÎ ŸÀÔ T¿¡ ´ëÇÑ ³Î °¡´É ŸÀÔÀº System.Nullable<T>·Î Ç¥ÇöÇÏ¸ç ´ÙÀ½ ¼±¾ð¹®Àº ³Î °¡´É T ŸÀÔÀÇ º¯¼ö¸¦ ¼±¾ðÇÑ´Ù.

 

System.Nullable<T> º¯¼ö¸í;

 

T ŸÀÔÀ» ·¡ÇÎÇÏ´Â Á¦³×¸¯ Ŭ·¡½ºÀÌ´Ù. ¼±¾ð¹®ÀÌ ³Ê¹« ±æ±â ¶§¹®¿¡ C#Àº ŸÀÔ ´ÙÀ½¿¡ ? ±âÈ£¸¦ »ç¿ëÇÏ¿© T? ·Î Ç¥±âÇÏ´Â ¹æ¹ýÀ» Áö¿øÇÑ´Ù.

 

byte? Value;                                           // 0~255 ¶Ç´Â null Áß ÇÑ °ªÀ» °¡Áø´Ù.

bool? bLuner;                                        // true, false, null Áß ÇÑ °ªÀ» °¡Áø´Ù.

 

? ¾Õ¿¡ ÀÖ´Â T¸¦ ³»Àå ŸÀÔÀ̶ó°í Çϴµ¥ °ª ŸÀÔ¸¸ ¿Ã ¼ö ÀÖÀ¸¸ç ÂüÁ¶ÇüÀº ¾ÈµÈ´Ù. ¿Ö³ÄÇϸé Ŭ·¡½º °°ÀÌ º¹ÀâÇÑ Å¸ÀÔÀº ³Î »óŸ¦ Á¤ÀÇÇϱ⠾ָÅÇϱ⠶§¹®ÀÌ´Ù. ³Î °¡´É ŸÀÔÀÇ ¹è¿­À» Á¤ÀÇÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. int?[] arAge; ´Â 10°³ÀÇ ³ªÀÌ°ªÀÌµÇ °¢ ¿ä¼Ò°¡ ³Î »óÅÂÀÏ ¼ö ÀÖ´Ù. T? ŸÀÔÀº ´ÙÀ½ µÎ °³ÀÇ Àбâ Àü¿ë ÇÁ·ÎÆÛƼ¸¦ °¡Áø´Ù.

 

l HasValue : °ªÀÌ Á¤ÀǵǾî ÀÖ´ÂÁö Á¶»çÇÑ´Ù. trueÀ̸é Á¦´ë·Î µÈ °ªÀÌ ÀúÀåµÇ¾î ÀÖ´Â °ÍÀÌ°í falseÀÌ¸é ¾ÆÁ÷ °áÁ¤µÇÁö ¾ÊÀº ³Î »óÅÂÀÌ´Ù. ÀÌ ÇÁ·ÎÆÛƼ·Î ³Î ¿©ºÎ¸¦ Á¶»çÇÒ ¼ö ÀÖÀ¸¸ç º¯¼ö¸¦ null°ú Á÷Á¢ ºñ±³ÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù.

l Value : ³»ºÎ ŸÀÔÀÇ ½ÇÁ¦°ªÀÌ¸ç º¯¼ö ÀÚü¸¦ Àд °Í°ú °°´Ù. ³ÎÀÌ ¾Æ´Ï¶ó¸é ½ÇÁ¦°ªÀÌ ÀÐÇôÁöÁö¸¸ ³ÎÀ̶ó¸é InvalidOperationException ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ³Î °¡´É ŸÀÔÀÇ µðÆúÆ®´Â nullÀ̸ç À̶§ Value´Â ¾Ë ¼ö ¾ø´Â ¾²·¹±â °ªÀ» °¡Áø´Ù.

 

³Î °¡´ÉÇÑ Å¸ÀÔÀº °ª ¿Ü¿¡µµ nullÀ̶ó´Â Ư¼öÇÑ »óÅÂÀÏ ¼ö ÀÖ¾î ÀÐÀ» ¶§ Ç×»ó null ¿©ºÎ¸¦ ½Å°æ½á¾ß ÇÑ´Ù.

 

Nullable

using System;

 

class CSTest {

             public static void Main() {

                           int? Age;

                           Age = 3;

                           if (Age.HasValue) {

                                        Console.WriteLine(Age);

                           } else {

                                        Console.WriteLine("¾Ë ¼ö ¾ø´Â ³ªÀÌÀÓ");

                           }

             }

}

½ÇÇà°á°ú

3

 

³Î °¡´ÉÇÑ Á¤¼öÇü º¯¼ö Age¸¦ ¼±¾ðÇß´Ù. °ªÀ» °¡Áö°í ÀÖÀ¸¸é ½ÇÁ¦°ªÀ» Ãâ·ÂÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ¾Ë ¼ö ¾ø´Ù´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. »ç¿ëÀÚ°¡ ÀÔ·ÂÀ» °ÅºÎÇߴٰųª ÀÔ·ÂÁß ¿¡·¯°¡ ¹ß»ýÇÏ¿© ³ÎÀÌ µÉ ¼öµµ ÀÖ´Ù.

Age.HasValue´Â Age != null Á¶°Ç°ú °°°í Age´Â Age.Value¿Í °°´Ù. ³Î °¡´É ŸÀÔ¿¡ ´ëÇÑ ¿¬»ê ±ÔÄ¢Àº ÀÏ¹Ý º¯¼ö¿Í À¯»çÇ쵂 null Å°¿öµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ°í ¿¬»ê °á°úµµ nullÀÏ ¼ö ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. °ªÀ» Àд Áß¿¡ ¿¹¿Ü°¡ ¹ß»ýÇÒ ¼öµµ ÀÖ´Ù. ³Î °¡´É ŸÀÔ°ú ÀÏ¹Ý Å¸ÀÔÀ» ´ëÀÔÇÒ ¶§ÀÇ ±ÔÄ¢Àº ´ÙÀ½°ú °°´Ù.

 

int i;

int? n;

i = n;                                         // ¿¡·¯. ŸÀÔÀÌ ´Þ¶ó ´ëÀÔ ºÒ°¡

i = (int)n;                                   // ÄÄÆÄÀÏ °¡´ÉÇϳª nÀÌ nullÀÏ °æ¿ì ¿¹¿Ü ¹ß»ý

i = n.Value;                  // ÄÄÆÄÀÏ °¡´ÉÇϳª nÀÌ nullÀÏ °æ¿ì ¿¹¿Ü ¹ß»ý

n = i;                                         // Ç×»ó °¡´É. nÀÌ iº¸´Ù Ç¥Çö ¹üÀ§°¡ ´õ ³Ð´Ù.

n = null;                                    // Ç×»ó °¡´É

 

¿·ÀÇ ÁÖ¼®À» ÀÐ¾î º¸¸é »ó½Ä¿¡ Å©°Ô À§¹èµÇ´Â Á¡ÀÌ ¾ø´Ù. ÁÖÀÇÇÒ °ÍÀº ³Î °¡´ÉÇÑ Å¸ÀÔ³¢¸® ºñ±³ÇÒ ¶§Àε¥ µÑ Áß Çϳª¶óµµ nullÀÌ¸é ºñ±³ °á°ú´Â nullÀÌ µÈ´Ù.

 

int? a = null;

int? b = 12;

int? c = null;

if (a == b)                                 // °ÅÁþ

if (a == c)                                 // °ÅÁþ

 

³ÎÀÎ a¿Í °ªÀ» °¡Áö°í ÀÖ´Â b°¡ ´Ù¸¥ °ÍÀº »ó½ÄÀûÀÌÁö¸¸ µÑ ´Ù nullÀÎ a¿Í c°¡ ´Ù¸¥ °ÍÀº ¹º°¡ ÀÌ»óÇØ º¸ÀδÙ. ¶È°°Àº nullÀÌ ´Ù¸¦ ¼ö ÀÖ´Ù´Â °ÍÀÌ nullÀÇ Æ¯¼öÇÔÀÌ´Ù. Àß »ý°¢ÇØ º¸¸é Á¤ÇØÁöÁöµµ ¾ÊÀº µÎ »óÅ°¡ °°´Ù°í Æò°¡ÇÏ´Â °ÍÀÌ ¿ÀÈ÷·Á ³í¸®ÀûÀÎ ¸ð¼øÀÌ´Ù. ±×·¡¼­ null³¢¸®´Â ´Ù¸£´Ù°í º»´Ù.

ºñ½ÁÇÑ ³í¸®°¡ ¼öÇп¡µµ Á¸ÀçÇϴµ¥ ¡Ä + 1Àº ¿ª½Ã ¡ÄÀÌ´Ù. ¾î¶² ¼ö¿¡ 1À» ´õÇߴµ¥ ¶Ç ±× ¼ö¶ó¸é 1ÀÌ 0ÀÌ µÇ¾î ¹ö¸°´Ù. 1ÀÌ 0À̶ó¸é 2 = 1 + 1 = 0ÀÌ µÇ¾î °á±¹ ¸ðµç ¼ö°¡ ´Ù 0ÀÌ´Ù. ÀÌ·± ¾û¶×ÇÑ ³í¸®ÀÇ ¿øÀÎÀº ¡Ä¸¦ ¼ö¶ó°í »ý°¢Çϴµ¥¼­ ºñ·ÔµÇ´Âµ¥ ¡Ä´Â ¼ö°¡ ¾Æ´Ï¶ó °è¼Ó Ä¿Áö°í ÀÖ´Â »óÅ¿©¼­ ¼ö¿ÍÀÇ ¿¬»êÀÌ ±ÝÁöµÈ´Ù.

¸¶Âù°¡Áö·Î nullµµ °ªÀÌ ¾Æ´Ñ »óÅ¿©¼­ null°ú nullÀÌ ´Ù¸£´Ù´Â ³í¸®°¡ ¼º¸³ÇÑ´Ù. null ¿¬»êÀÇ Æ¯¼öÇÔÀº bool? ŸÀÔ¿¡ ´ëÇÑ &, | ³í¸® ¿¬»ê¿¡µµ ³ªÅ¸³­´Ù. Á¶±Ý º¹ÀâÇѵ¥ Áø¸®Ç¥¸¦ ±×·Á º¸¸é ÇÑ ´«¿¡ Á¤¸®µÇÁö¸¸ ¼ÖÁ÷È÷ Á¶±Ý Çò°¥¸®´Â ¸éÀÌ ÀÖ´Ù.

 

a

b

a & b

a | b

true

null

null

true

false

null

false

null

null

null

null

null

 

?? ÀÌÇ× ¿¬»êÀÚ´Â a ?? b Çü½ÄÀ¸·Î »ç¿ëÇϸç a´Â ¹Ýµå½Ã ³Î °¡´É ŸÀÔ ¶Ç´Â ÂüÁ¶ ŸÀÔÀ̾î¾ß ÇÑ´Ù. a ?? b´Â aÀÇ °ªÀ» Æò°¡ÇÏ¿© a°¡ ³ÎÀÌ ¾Æ´Ï¶ó¸é a¸¦ ¸®ÅÏÇÏ¸ç ³ÎÀ̸é b¸¦ ´ë½Å ¸®ÅÏÇÑ´Ù. Áï ÀÌ ¿¬»êÀÚ´Â ³Î °¡´É º¯¼ö¸¦ ÀÐµÇ ³ÎÀÏ °æ¿ì ¸®ÅÏÇÒ °ªÀ» ÁöÁ¤ÇÑ´Ù. ?? ¿¬»ê¹®ÀÇ b´Â a°¡ ³ÎÀÏ ¶§¸¸ Æò°¡µÇ´Â ¼îÆ® ¼­Å°Æ® ¹æ½ÄÀÌ Àû¿ëµÈ´Ù. Áï a°¡ ³ÎÀÌ ¾Æ´Ï¶ó¸é b´Â ¾Æ¿¹ Æò°¡µÇÁöµµ ¾Ê°í ¹«½ÃµÈ´Ù.

 

IfNull

using System;

 

class CSTest {

             public static void Main() {

                           int? Age = null;

                           int MyAge;

                           MyAge = Age ?? 25;

                           Console.WriteLine($"³» ³ªÀÌ´Â {MyAge}»ìÀÔ´Ï´Ù.");

             }

}

 

Age°¡ null·Î ÃʱâÈ­µÇ¾úÀ¸¹Ç·Î Age ?? 25´Â 25·Î Æò°¡µÈ´Ù. Age ?? 25¶ó´Â Ç¥Çö½ÄÀº Age¸¦ ÀÐµÇ ¸¸¾à Age°¡ °áÁ¤µÇÁö ¾ÊÀº »óŶó¸é 25·Î °£ÁÖÇÑ´Ù´Â ¶æÀÌ´Ù. ÀÌ Ç¥Çö½ÄÀ» Á¶°Ç¹®À¸·Î ±æ°Ô Ç®¾î ¾µ ¼öµµ ÀÖ´Ù.

 

if (Age.HasValue) {

         MyAge = Age.Value;

} else {

         MyAge = 25;

}

 

ÄÚµåÀÇ ³»¿ëÀº °°Áö¸¸ º¸´Ù½ÃÇÇ ³Ê¹« ±æ¾î ºÒÆíÇÏ´Ù. ÀÌ Á¶°Ç¹®À» °£´ÜÇÏ°Ô ÁÙÀÎ °ÍÀÌ ¹Ù·Î Age ?? 25ÀÌ´Ù. Age¿¡ nullÀÌ ¾Æ´Ñ ´Ù¸¥ °ªÀ» ´ëÀÔÇØ ³õ°í ½ÇÇàÇÏ¸é ´ëÀÔµÈ °ªÀÌ Ãâ·ÂµÈ´Ù.

13-2-2.³Î Á¶°Ç ¿¬»êÀÚ

³Î °¡´É ŸÀÔÀ» Áö¿øÇÏ´Â »õ·Î¿î ¿¬»êÀÚ°¡ 6.0¿¡¼­ Ãß°¡µÇ¾ú´Ù. Ưº°ÇÑ ±â´ÉÀ» Á¦°øÇѴٱ⺸´Ù´Â ±ä ±¸¹®À» ª°Ô ÁÙ¿© ÁÖ´Â ÆíÀÇ ¹®¹ýÀÌ´Ù. °´Ã¼¿Í Ä÷º¼Ç¿¡ ´ëÇØ µÎ °¡Áö ¿¬»êÀÚ°¡ Á¦°øµÇ´Âµ¥ µ¿ÀÛÀº ºñ½ÁÇÏ´Ù.

 

l °´Ã¼?.¸â¹ö : °´Ã¼°¡ nullÀÌ ¾Æ´Ò ¶§¸¸ ¸â¹ö¸¦ Àаųª È£ÃâÇÑ´Ù.

l ¹è¿­?[÷ÀÚ] : ¹è¿­À̳ª Ä÷º¼ÇÀÌ null¾Æ´Ò ¶§¸¸ ÷ÀÚÀÇ ¿ä¼Ò¸¦ ¸®ÅÏÇÑ´Ù.

 

°´Ã¼³ª ¹è¿­ÀÌ nullÀÌ¸é µÎ °æ¿ì ¸ðµÎ nullÀ» ¸®ÅÏÇÑ´Ù. ¹®ÀÚ¿­ º¯¼öÀÇ ±æÀ̸¦ Ãâ·ÂÇÏ·Á¸é Length ¼Ó¼ºÀ» ÀÐÀ¸¸é µÈ´Ù.

 

string Name = "ÁøÀ翵";

Console.WriteLine(Name.Length);

 

´õ ¾øÀÌ °£´ÜÇÑ ÄÚµåÀÌÁö¸¸ NameÀÌ nullÀÎ °æ¿ì´Â °í·ÁÇÏÁö ¾Ê¾Ò´Ù. null »óÅÂÀÇ °´Ã¼¸¦ »ç¿ëÇϸé Áï½Ã ¿¹¿Ü 󸮵ȴÙ. null±îÁö °í·ÁÇÏÀÚ¸é Á¶°Ç¹®À» ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

 

string Name = null;

if (Name != null) {

         Console.WriteLine(Name.Length);

} else {

         Console.WriteLine(null);

}

 

NameÀÌ null ¾Æ´Ï¸é ±æÀ̸¦ Á¶»çÇÏ¿© Ãâ·ÂÇÏ°í nullÀÌ¸é ºóÁÙ¸¸ Ãâ·ÂÇÑ´Ù. ¿¹¿Ü´Â ¹ß»ýÇÏÁö ¾Ê°í Á¤»ó 󸮵ȴÙ. Á¶°Ç¹® ´ë½Å »ïÇ× Á¶°Ç ¿¬»êÀÚ¸¦ ¾µ ¼öµµ ÀÖÁö¸¸ : Á¿ìÀÇ Å¸ÀÔÀÌ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù´Â Á¦¾àÀÌ ÀÖ¾î null ´ë½Å 0À» Ãâ·ÂÇØ¾ß ÇÑ´Ù.

 

Console.WriteLine(Name != null ? Name.Length:0);

 

Á¶°Ç¹®°ú Á¤È®È÷ °°Áö´Â ¾Ê¾Æ »ïÇ× Á¶°Ç ¿¬»êÀÚ´Â ¾î¿ï¸®Áö ¾Ê´Â´Ù. null ÆÇ´Ü Á¶°ÇÀ» ´ë½ÅÇØ ÁÖ´Â ¿¬»êÀÚ°¡ ¹Ù·Î ?.ÀÌ´Ù.

 

nullop

using System;

 

class CSTest {

             public static void Main() {

                           string Name = null;

                           Console.WriteLine(Name?.Length);

             }

}

 

NameÀÌ nullÀ̸é nullÀ» ¸®ÅÏÇÏ¿© ºóÁÙ¸¸ Ãâ·ÂÇϸç nullÀÌ ¾Æ´Ï¸é Length ¼Ó¼ºÀ» ÀÐ¾î ±æÀ̸¦ Ãâ·ÂÇÑ´Ù. ?[] ¿¬»êÀÚµµ ¹è¿­, Ä÷º¼Ç¿¡ Àû¿ëÇÑ´Ù´Â °Í¸¸ ´Ù¸£°í µ¿ÀÛÀº ºñ½ÁÇÏ´Ù.

 

nullarray

using System;

 

class CSTest {

             public static void Main() {

                           int[] ar = { 1, 2, 3, 4, 5 };

                           Console.WriteLine(ar?[3]);

             }

}

½ÇÇà°á°ú

4

 

¹è¿­ÀÇ 3¹ø° ¿ä¼Ò¸¦ Àоî Ãâ·ÂÇÑ´Ù. arÀÌ nullÀÌ¸é ¾Æ¹«°Íµµ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù. if¹®À¸·Î ½á¾ßÇÒ Äڵ带 ¿¬»ê¹®À¸·Î °£ÆíÇϱâ Ç¥±âÇÒ ¼ö ÀÖ¾î ª°í Æí¸®ÇÏ´Ù.

?.°ú ?[] ¿¬»ê¹®Àº ¾Õ¿¡¼­ º¸ÀÎ Á¶°Ç¹®À¸·Î ġȯµÇ¾î ÄÄÆÄÀϵȴÙ. °á±¹ if¹®À» ª°Ô Ç¥±âÇÏ´Â ¹®¹ýÀÏ »ÓÀÌ´Ù. ¸Å¹ø ġȯµÇ±â ¶§¹®¿¡ ¾î¼´Ù ÇÑ ¹ø¾¿Àº »ó°ü¾øÁö¸¸ ¹Ýº¹ÀûÀ¸·Î »ç¿ëÇÏ´Â °ÍÀº ¼Óµµ¿Í Å©±â¿¡ ºÒ¸®ÇÏ´Ù.

 

Console.WriteLine(ar?[3]);

Console.WriteLine(ar?[2]);

Console.WriteLine(ar?[4]);

 

if (ar != null) {

         Console.WriteLine(ar[3]);

         Console.WriteLine(ar[2]);

         Console.WriteLine(ar[4]);

}

 

¿ÞÂÊ ÄÚµå´Â ¿ä¼Ò¸¦ ÀÐÀ» ¶§¸¶´Ù if¹®À¸·Î ¸Å¹ø Á¡°ËÇÏ´Â ²ÃÀ̾ ºñÈ¿À²ÀûÀÌ´Ù. ÀÌ·² ¶§´Â ¿À¸¥ÂÊ ÄÚµåó·³ null ¿©ºÎ¸¦ µü ÇÑ ¹ø¸¸ Á¡°ËÇÏ°í nullÀÌ ¾Æ´Ò ¶§¸¸ [ ] ¿¬»êÀÚ·Î ¿ä¼Ò¸¦ Àд ÆòÀÌÇÑ Äڵ尡 À¯¸®ÇÏ´Ù.

13-2-3.³Î °¡´É ÂüÁ¶Çü

ÂüÁ¶Çü º¯¼ö´Â ¾Æ¹«°Íµµ °¡¸®Å°Áö ¾Ê´Â´Ù´Â Àǹ̷Πnull°ªÀ» °¡Áú ¼ö ÀÖ´Ù. Á¤»óÀûÀÎ »óȲÀÌÁö¸¸ ¿øÄ¡ ¾Ê´Â »óȲ¿¡¼­´Â null°ªÀ¸·Î ÀÎÇØ ÇÁ·Î±×·¥ÀÌ ÀÌ»ó µ¿ÀÛÇÏ´Â °æ¿ì°¡ ºó¹øÇÏ´Ù.

 

string s = null;

Console.WriteLine($"³»¿ë : {s}, ±æÀÌ : {s.Length}");

 

¹®ÀÚ¿­¿¡ ¾Æ¹«°Íµµ ÀúÀåµÇ¾î ÀÖÁö ¾ÊÀº »óÅ¿¡¼­ s¸¦ Ãâ·ÂÇÏ¸é ±×³É ºó ¹®ÀÚ¿­À̾ º° ÀÌ»óÀº ¾ø´Ù. ±×·¯³ª sÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÏ¸é ¿¹¿Ü¸¦ ÀÏÀ¸Å°¸ç ´Ù¿îµÇ¾î ¹ö¸°´Ù. nullÀº »óÅÂÀÌÁö À¯È¿ÇÑ ¹®ÀÚ¿­ÀÌ ¾Æ´Ï¾î¼­ ±æÀ̸¦ Á¶»çÇÒ ¼ö ¾ø´Ù. ¹®Á¦´Â ÀÌ·± À§ÇèÇÑ Äڵ忡 ´ëÇØ ÄÄÆÄÀÏ·¯°¡ ¾î¶°ÇÑ °æ°í³ª ¿¡·¯¸¦ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é ÂüÁ¶Çü º¯¼ö¸¦ »ç¿ëÇÏ´Â ¸ðµç °÷¿¡ if (s != null) Á¶°Ç¹®À» ÀÏÀÏÀÌ ºÙ¿©¾ß Çϴµ¥ ¸Å¹ø ±×·¯±â´Â ³Ê¹« ±ÍÂú´Ù. Á¶°Ç Á¡°ËÀ» »ý·«ÇÏ¸é ¾îµð¼­ ¸»½éÀ» ºÎ¸±Áö ¾Ë ¼ö ¾ø´Ù.

ÀÌ·± ÀÌÀ¯·Î C# 8.0¿¡¼­ ÂüÁ¶Çü¿¡ ´ëÇؼ­µµ ³Î °¡´É ŸÀÔÀ» Ãß°¡Çß´Ù. ÂüÁ¶ÇüÀº ¿ø·¡ ³ÎÀ» °¡Áú ¼ö ÀÖ¾úÁö¸¸ ¸í½ÃÀûÀÎ ³Î °¡´É ŸÀÔÀ» »ç¿ëÇϸé À§ÇèÇÑ Äڵ带 ¾ÈÀüÇÏ°Ô ÇÇÇØ°¥ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº ÀÌÀü Äڵ忡 ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ¾î ÇÊ¿äÇÒ ¶§¸¸ #nullable enable Áö½ÃÀÚ·Î ÄѼ­ »ç¿ëÇÏ¸ç ´Ù »ç¿ëÇÑ ÈÄ #nullable disable·Î ²ö´Ù. ´ÙÀ½ µÎ ¿¹Á¦´Â ¾ð¾î ¹öÀüÀ» 8.0 ÀÌ»óÀ¸·Î ¼³Á¤ÇØ¾ß ÄÄÆÄÀϵȴÙ.

 

nullableref

using System;

#nullable enable

 

class CSTest {

             static void Main() {

                           string s = null;

                           Console.WriteLine($"³»¿ë : {s}, ±æÀÌ : {s.Length}");

             }

}

½ÇÇà°á°ú

warning CS8600: null ¸®ÅÍ·² ¶Ç´Â °¡´ÉÇÑ null °ªÀ» nullableÀÌ ¾Æ´Ñ Çü½ÄÀ¸·Î º¯È¯ÇÏ´Â ÁßÀÔ´Ï´Ù.

warning CS8602: °¡´ÉÇÑ null ÂüÁ¶ÀÇ ¿ªÂüÁ¶ÀÔ´Ï´Ù.

 

µÎ °³ÀÇ °æ°í°¡ ¹ß»ýÇϸç À§ÇèÇÏ´Ù´Â °ÍÀ» ¾Ë·Á ÁØ´Ù. #nullableÀÌ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é °æ°í°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. null°ªÀº ³Î °¡´É ŸÀÔ¿¡ ´ëÀÔÇ϶ó´Â ¾È³»¿Í nullÀÏÁöµµ ¸ð¸£´Â °ªÀ» ÂüÁ¶Çß´Ù´Â °æ°íÀÌ´Ù. ù ¹ø° °æ°í¸¦ ÇØ°áÇÏ·Á¸é string? ŸÀÔÀ» »ç¿ëÇÑ´Ù. ÀÌ Å¸ÀÔÀ» »ç¿ëÇϸé ÂüÁ¶ÇüÀÌÁö¸¸ nullÀ» °¡Áú ¼öµµ ÀÖ´Ù´Â °ÍÀ» ºÐ¸íÈ÷ ÇÑ´Ù. µÎ ¹ø° °æ°í¸¦ ÇØ°áÇÏ·Á¸é °´Ã¼°¡ nullÀÌ ¾Æ´Ò ¶§¸¸ ¾ÈÀüÇÏ°Ô ÂüÁ¶Çϵµ·Ï Á¶°Ç¹®¾È¿¡ ÀÛ¼ºÇÑ´Ù.

 

nullableref2

using System;

#nullable enable

 

class CSTest {

             static void Main() {

                           string? s = null;

                           if (s != null) {

                                        Console.WriteLine($"³»¿ë : {s}, ±æÀÌ : {s.Length}");

                           }

             }

}

 

ÀÌ·¸°Ô ÇÏ¸é °æ°íµµ »ç¶óÁö°í ÇÁ·Î±×·¥µµ ¾ÈÀüÇØÁø´Ù. ÄÄÆÄÀÏ·¯´Â ³Î °¡´É ÂüÁ¶ ŸÀÔÀÇ º¯¼ö¸¦ nullÀÏ °¡´É¼ºÀÌ ÀÖ´Â »óÅ¿¡¼­ ÂüÁ¶ÇÒ ¶§ °æ°íÇÏ¿© À§ÇèÀ» ¹æÁöÇÑ´Ù. ´Ù¸¸ È®½ÇÈ÷ nullÀÌ ¾Æ´Ï¶ó´Â Á¶°Ç¹® ¾È¿¡ ÀÖÀ» ¶§´Â °æ°íÇÏÁö ¾Ê´Â´Ù. À§ÇèÇÑ Äڵ忡 ´ëÇØ °æ°í¸¦ ÇØ ÁÖ¾î ¾ÈÀü¼ºÀ» ³ôÀÌ´Â ±â¹ýÀÌ´Ù.