¼Ò¼³°°ÀºC#  Á¦2°­ÀÇ Å¬·¡½ºÀÇ ±âº»¹è°æ  18. C#¿¡¼­ÀÇ ±¸Á¶Ã¼  

 

2.18 C#¿¡¼­ÀÇ ±¸Á¶Ã¼

 

 

±¸Á¶Ã¼´Â Ŭ·¡½º°¡ ¾ø´ø ½ÃÀý¿¡, C¿¡¼­ »õ·Î¿î µ¥ÀÌÅÍŸÀÔÀ» ¸¸µå´Â ¿ªÇÒÀ» ´ã´çÇϰí ÀÖ¾ú½À´Ï´Ù. Áï, ÇϳªÀÇ µ¥ÀÌÅÍŸÀÔ¿¡ 2°³ ÀÌ»óÀÇ º¯¼ö¸¦ ´ãÀ» ¼ö ÀÖ´Ù´Â ±âÁ¸ÀÇ °³³äÀ» ¶Ù¾î³Ñ´Â, ±âÁ¸ µ¥ÀÌÅÍŸÀÔ ¹®Á¦ÀÇ ÇØ°áÃ¥À» ±¸Á¶Ã¼¶ó´Â °ÍÀÌ C ¾ð¾î¿¡¼­ Á¦½ÃµÇ¾ú½À´Ï´Ù. ÀÌ·¸°Ô º¸¸é, ±¸Á¶Ã¼ÀÇ Àǹ̴ °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö(Object-Oriented Programming) ¾ð¾îÀÇ ¿ª»ç¸¦ ¸»ÇØ ÁØ´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù.

 

Ŭ·¡½º¿Í ±¸Á¶Ã¼

Ŭ·¡½º·Î µ¥ÀÌÅÍŸÀÔÀ» ¸¸µç´Ù°í Çß½À´Ï´Ù. ±¸Á¶Ã¼ ¶ÇÇÑ µ¥ÀÌÅÍŸÀÔÀ» »ý¼ºÇÏ´Â µ¥ÀÌÅÍŸÀÔ »ý¼º±â ¿ªÇÒÀ» Çϰí Àֱ⠶§¹®¿¡ Ŭ·¡½º¿Í °°Àº ·¹º§¿¡ Á¸ÀçÇÕ´Ï´Ù. ±×·¡¼­ ±¸Á¶Ã¼´Â Ŭ·¡½º¿Í µ¿±ÞÀÔ´Ï´Ù. ±¸Á¶Ã¼´Â ¿Ïº®ÇÏ°Ô Å¬·¡½º¿Í ±× Àǹ̴ °°½À´Ï´Ù. ±×¸®°í Ãʱ⠱¸Á¶ ¶ÇÇÑ Å¬·¡½º¿Í ¾ÆÁÖ Èí»çÇÕ´Ï´Ù. ±¸Á¶Ã¼ÀÇ À§Ä¡µµ ¾Æ·¡¿¡¼­¿Í °°ÀÌ Á¦ÀÏ »óÀ§¿¡ Á¸ÀçÇÕ´Ï´Ù.

 

±¸Á¶Ã¼, µ¥ÀÌÅÍŸÀÔ, º¯¼ö, »ó¼öÀÇ ±¸Á¶

±¸Á¶Ã¼

µ¥ÀÌÅÍŸÀÔ

º¯¼ö

»ó¼ö

¹«(Ùí)

¹«(Ùí)Á¸Àç

Á¸Àç

½ÇÁ¸

Ç¥ 2-9 ±¸Á¶Ã¼¿Í µ¥ÀÌÅÍŸÀÔ°ú º¯¼ö¿Í »ó¼öÀÇ ±¸Á¶

 

ÇÏÁö¸¸ Ŭ·¡½º¿Í ±¸Á¶Ã¼ÀÇ °¡Àå ÇÙ½ÉÀÌÀÚ Å« Â÷ÀÌÁ¡Àº Áö±Ý±îÁö »ìÆìº» °Í °°ÀÌ Å¬·¡½º´Â ÂüÁ¶Å¸ÀÔ(Reference Type)ÀÌÁö¸¸, ±¸Á¶Ã¼´Â °ªÅ¸ÀÔ(Value Type)À̶ó´Â °ÍÀÔ´Ï´Ù.

 

±¸Á¶´Â Ŭ·¡½º¿Í µ¿ÀÏÇÏÁö¸¸ °ªÅ¸ÀÔ(Value Type)ÀÎ ±¸Á¶Ã¼¸¦ ¿Ö »ç¿ëÇÒ±î¿ä? ±× ÀÌÀ¯´Â »óȲ¿¡ µû¶ó¼­ ¹ß»ýÇÒ ¼ö Àִ Ŭ·¡½ºÀÇ ºñÈ¿À²À» ¾ø¾Ö±â À§Çؼ­ ÀÔ´Ï´Ù. Áï, Ŭ·¡½º°¡ °´Ã¼¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ³Ê¹«³ªµµ Å« ÀåÁ¡ÀÌÁö¸¸, ¸¸¾à ±× Ŭ·¡½º°¡ ¾ÆÁÖ ÀÛ´Ù¸é, ±× Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ À§ÇÑ °ø°£ÀûÀÎ ³¶ºñ³ª, ÂüÁ¶ ¶§¹®¿¡ ¹ß»ýÇÏ´Â ½Ã°£ÀûÀÎ ³¶ºñ°¡ ÀϾ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·² ¶§ À̰ÍÀÌ ±¸Á¶Ã¼·Î µÇ¾îÀÖ´Ù¸é, °ªÅ¸ÀÔ(Value Type)À̹ǷΠÁ÷Á¢ÀûÀ¸·Î ¸Þ¸ð¸®¿¡ Á¢±ÙÇϱ⠶§¹®¿¡ ±× ³¶ºñ¸¦ ¸·À» ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù.

 

µû¶ó¼­ C#¿¡¼­´Â Å©±â°¡ ÀÛ°í, ³»ºÎ¿¡ º¹ÀâÇÑ ¸Þ¼­µåµéÀÌ ÀÖÁö ¾ÊÀº ¼±, Ä÷¯µî°ú °°Àº ±×·¡ÇÈ ¿ä¼Ò µîÀ» ±¸Á¶Ã¼·Î Á¤ÀÇÇØ µÎ°í ÀÖ½À´Ï´Ù. ±×¸®°í ±¸Á¶Ã¼°¡ Ŭ·¡½º¿Í ¶Ç ´Ù¸¥ ¼º°ÝÀº Ŭ·¡½º³ª ´Ù¸¥ Ŭ·¡½º¸¦ »ó¼ÓÇÒ ¼ö ¾øÀ¸¸ç ¶ÇÇÑ »ó¼ÓÇØ ÁÙ ¼öµµ ¾ø½À´Ï´Ù. ¶Ç ´Ù¸¥ »çÇ×Àº ¿¹Á¦¸¦ º¸¸é¼­ »ìÆìº¸°Ú½À´Ï´Ù.

 

°ªÅ¸ÀÔ°ú ÂüÁ¶Å¸ÀÔÀ» ±¸ºÐÇÏ½Ç ¼ö ÀÖÀ¸½Ã¸é ±¸Á¶Ã¼¿Í Ŭ·¡½º¿ÍÀÇ Â÷À̸¦ ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.(2ÀåÀÇ °ªÅ¸ÀÔ°ú ÂüÁ¶Å¸ÀÔÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù) ±×·³ ½ÇÁ¦·Î ±¸Á¶Ã¼·Î µ¥ÀÌÅÍŸÀÔÀ» »ý¼ºÇØ º¸´Â ¿¹Á¦¸¦ »ìÆì º¸°Ú½À´Ï´Ù.

 

&

StructTest.cs

Ü ±¸Á¶Ã¼¸¦ Å×½ºÆ® ÇÏ´Â ¿¹Á¦

using System;

struct Family{

          public int   age;

          public long  height;

          public float weight;

          public Family(int a, long h, float w){

                     age = a;

                     height = h;

                     weight = w;

          }

}//struct

public class StructTest{

    public static void Main() {

                   Family sister; //ÀϹÝÀûÀÎ °ªÅ¸ÀÔ º¯¼ö¼±¾ð

              sister.age = 13;

              sister.height = 170L;

              sister.weight = 55f;

              Console.WriteLine("sister : {0}-{1}-{2}", sister.age, sister.height, sister.weight);

                   Family brother = new Family();//µðÆúÆ®»ý¼ºÀÚ

              Console.WriteLine("brother : {0}-{1}-{2}", brother.age, brother.height, brother.weight);

                   Family mother = new Family(40, 160L, 60F);//ÃʱⰪÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Â °ªÅ¸ÀÔÀÇ ±¸Á¶Ã¼

              Console.WriteLine("mother : {0}-{1}-{2}", mother.age, mother.height, mother.weight);

                   Family twins = sister;//°ªº¹»ç

              Console.WriteLine("twins : {0}-{1}-{2}", twins.age, twins.height, twins.weight);

   }//main

}//class

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

C:\C#Example\02>StructTest

sister : 13-170-55

brother : 0-0-0

mother : 40-160-60

twins : 13-170-55

 

¾ÕÀÇ ¼Ò½º¸¦ º¸½Ã¸é struct¶õ Ű¿öµå·Î Family¶õ ±¸Á¶Ã¼¸¦ Á¤ÀÇÇÏ¿´½À´Ï´Ù.

 

n                 struct Family

 

±×¸®°í ³»ºÎ¿¡ publicÀ¸·Î ¼¼°³ÀÇ ¸â¹öÇʵ带 ¸¸µé°í ¼¼°³ÀÇ ÀÎÀÚ¸¦ °®´Â »ý¼ºÀÚ¸¦ Á¤ÀÇÇß½À´Ï´Ù. ¿©±â¼­ ÁüÀÛÇÏ½Ç ¼ö ÀÖµíÀÌ ±¸Á¶Ã¼¿¡¼­´Â ÀÎÀÚ°¡ ¾ø´Â µðÆúÆ®»ý¼ºÀÚ´Â Á¤ÀÇÇÒ ¼ö ¾ø½À´Ï´Ù. ±× ÀÌÀ¯´Â ±¸Á¶Ã¼ÀÇ µðÆúÆ®»ý¼ºÀÚ´Â ¸ðµÎ CLR¿¡ ÀÇÇØ¼­ ÀÚµ¿À¸·Î Á¤ÀǵDZ⠶§¹®À̸ç À̰ÍÀÌ ¶ÇÇÑ Å¬·¡½º¿ÍÀÇ Â÷ÀÌÁ¡ÀÌ µË´Ï´Ù.

 

±¸Á¶Ã¼´Â °ª(Value Type)À̱⠶§¹®¿¡ ¹Ù·Î Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­ ±¸Á¶Ã¼³¢¸®ÀÇ ÇÒ´çµµ ´ç¿¬È÷ ÂüÁ¶°ªÀÇ ÇÒ´çÀÌ ¾Æ´Ñ °ªÀÇ ÇÒ´çÀÔ´Ï´Ù. À§ÀÇ ¿¹Á¦¸¦ »ìÆìº¸½Ã¸é ±¸Á¶Ã¼ sister¸¦ twins¿¡ °ªÀ» º¹»çÇϰí ÀÖ½À´Ï´Ù. WriteLine() ¸Þ¼­µå¸¦ »ç¿ëÇØº¸´Ï sister¿Í µ¿ÀÏÇÑ °ªÀÌ Ãâ·ÂµË´Ï´Ù.

 

n                 Family twins = sister;

n                 Console.WriteLine("twins : {0}-{1}-{2}",twins.age,twins.height,twins.weight);

 

ÇÊ¿äÇÒ °æ¿ì¿¡´Â ¿¹Á¦¿¡¼­ º¸´Ù½ÃÇÇ new¸¦ »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù. ÇÏÁö¸¸ À̰ÍÀº Ŭ·¡½ºÀÇ new¿Í´Â ´Ù¸¥ °³³äÀ» °¡Áö°í ÀÖ½À´Ï´Ù. °ªÅ¸ÀÔ(Value Type)Àº µðÆúÆ®»ý¼ºÀÚ(Default Constructor)¸¦ °¡Áö°í ÀÖÀ¸¸ç ÀÚµ¿À¸·Î µðÆúÆ®»ý¼ºÀÚ°¡ È£Ã⠵ǾîÁø´Ù°í Çß½À´Ï´Ù. Áï, °ªÅ¸ÀÔÀÇ º¯¼ö¸¦ ¼±¾ðÇÔ°ú µ¿½Ã¿¡ ¸Þ¸ð¸®ÀÇ »ý¼ºÀÌ ÀÌ·ç¾îÁø´Ù´Â °Í°ú °ü·ÃÀÌ ÀÖ½À´Ï´Ù.

 

¢Ã ±¸Á¶Ã¼(struct)

q                Ŭ·¡½º(class)´Â ÂüÁ¶Å¸ÀÔ(Reference Type)ÀÌÁö¸¸ ±¸Á¶Ã¼(struct)´Â °ªÅ¸ÀÔ(Value Type)ÀÌ´Ù.

 

ÀÌ·¯ÇÑ ÀÌÀ¯ ¶§¹®¿¡ ±¸Á¶Ã¼¿¡¼­´Â µðÆúÆ®»ý¼ºÀÚ¸¦ ÀçÁ¤ÀÇ ÇÒ ¼ö ¾ø´Â °ÍÀÔ´Ï´Ù. ±×¸®°í ±¸Á¶Ã¼¿¡ ÃʱⰪÀ» ÇÒ´çÇÒ ¹æ¹ýÀ» Á¦°øÇϱâ À§Çؼ­ new Ű¿öµå¸¦ »ç¿ëÇÏÁö¸¸ °ªÅ¸ÀÔÀÎ °ÍÀº º¯ÇÔÀÌ ¾ø½À´Ï´Ù. ÀÚµ¿À¸·Î new¸¦ È£ÃâÇÏÁö¸¸ ¸¸¾à ±¸Á¶Ã¼ÀÇ »ý¼ºÀÚ¿¡ ¸Å°³º¯¼ö°¡ ÀÖÀ¸¸é ¾î¿ ¼ö ¾øÀÌ new ¿¬»êÀÚ¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

 

n                  public Family(int a, long h, float w)

 

new¸¦ »ç¿ëÇÏ¿© È£Ãâ ÇÒ ¼öµµ ÀÖÁö¸¸ °ªÅ¸ÀÔÀÎ °ÍÀº ºÒº¯ÀÎ °ÍÀÔ´Ï´Ù.



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