¼Ò¼³°°ÀºC#  Á¦2°­ÀÇ Å¬·¡½ºÀÇ ±âº»¹è°æ  08. PropertyÀÇ ÀÇ¹Ì¿Í »ç¿ë  

 

 

 

2.8 PropertyÀÇ ÀÇ¹Ì¿Í »ç¿ë

 

 

ÀºÆóÈ­(Encapsulation)¸¦ ¼³¸íÇÒ ¶§ private ¸â¹öÇʵ忡 Á¢±ÙÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¸±â À§Çؼ­ public ¸Þ¼­µå¸¦ ÀÌ¿ëÇÑ´Ù°í ¹è¿ü½À´Ï´Ù. private ¸â¹öÇʵå Çϳª¿¡ µÎ °³ÀÇ Set, Get ¸Þ¼­µå¸¦ ¸¸µç °ÍÀº private ¸â¹öÇʵ忡 Á¢±ÙÇÒ ¼ö ¾ø±â ¶§¹®¿¡ public ¸Þ¼­µå¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý·ÐÀûÀÎ Ãø¸éÀ̾ú½À´Ï´Ù. ÇÏÁö¸¸ ÀÌ·¯ÇÑ °ÍÀ» C#¿¡¼­´Â ÀϹÝÈ­(ìéÚõûù)½ÃÄѼ­ ¼Ó¼º(Property)À̶ó´Â °ÍÀ» ¼Ò°³Çϰí ÀÖ½À´Ï´Ù. ¸Þ¼­µå Çü½ÄÀ̳ª ¼Ó¼ºÇü½ÄÀº ±â´É¿¡ À־´Â ¿ÏÀüÇÏ°Ô °°½À´Ï´Ù. ÇÏÁö¸¸ ¼Ó¼ºÀº ¸Þ¼­µå Çü½ÄÀÇ Set, GetÀ» ´Ü¼øÈ­ ½ÃÄѵξú´Ù´Âµ¥ ±× Àǹ̰¡ ÀÖ½À´Ï´Ù.

 

Ŭ·¡½º ³»ºÎ ¸Þ¼­µåÀÇ ±¸ÇöÀ» ¼û±â°í ¸â¹öÇʵ忡 ´ëÇÑ Á÷Á¢ÀûÀÎ Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Ê´Â Àº´ÐÈ­ ¶Ç´Â ĸ½¶È­ÀÇ ¹æ¹ýÀ¸·Î ¸Þ¼­µå¸¦ ÀÌ¿ëÇØ ¿Ô½À´Ï´Ù. Áï, privateÇʵåÀÇ °ªÀ» ¾ò¾î³»°Å³ª ÇÒ´çÇÏ´Â ¸ñÀûÀÇ Á¢±Ù ¸Þ¼­µå¸¦ ¸¸µé¾î »ç¿ëÇß½À´Ï´Ù. ±× Äڵ带 º¸´Ù ¸íÄèÇÏ°Ô ¸¸µé¾î ÁÖ±â À§ÇÑ Á¦°øÇÏ´Â ¹æ¹ýÀÌ ¼Ó¼º(Property)ÀÔ´Ï´Ù.

 

¢Ã ¼Ó¼º(Properties)

q                ¸â¹öÇʵ忡 °ªÀ» ÇÒ´çÇÏ´Â ¹æ¹ý

q                Set°ú Get ¸Þ¼­µåÀÇ Á¤ÇüÈ­µÈ ÇüÅÂ

 

¼Ó¼ºÀº set/get Á¢±ÙÀÚ¸¦ °¡Áö´Â µî, ¾à°£ ƯÀÌÇÑ ¼ºÁúÀ» °¡Áö°í ÀÖÁö¸¸ ¸Þ¼­µåµµ º¯¼ö¶ó°í »ý°¢ÇßµíÀÌ ÀÏ´ÜÀº Çʵå(field) Áï, º¯¼ö¶ó°í »ý°¢ÇϽøé ÀÌÇØÇϴµ¥ µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù. ±×¸®°í ¼Ó¼ºÀº »ç¿ëÀÚ Ãø¸é¿¡¼­ º¸¸é ¸Þ¼­µå º¸´Ù´Â Çʵ忡 ´õ °¡±õ½À´Ï´Ù. ±×·¡¼­ À̰ÍÀ» ½º¸¶Æ®Çʵå(smart field)¶ó°í ºÎ¸¨´Ï´Ù. ±×·³ ¸ÕÀú ¼Ó¼ºÀÇ ÀϹÝÀû ±¸¹®À» º¸°Ú½À´Ï´Ù.

 

¼Ó¼º(Propertiy) Çü½Ä

private µ¥ÀÌÅÍŸÀÔ ¼Ó¼º¸í;

public µ¥ÀÌÅÍŸÀÔ ¼Ó¼º¸í{ //¼Ó¼º¸â¹ö

set {

               //¼Ó¼º ¼³Á¤ ±¸Çö                                          

}                                                   

get {

               //¼Ó¼º ¹Ýȯ ±¸Çö                                          

}                        

}//¼Ó¼º

Ç¥ 2-6 ¼Ó¼º(Property)ÀÇ Çü½Ä

 

¿©±â¼­ ¿ì¸®°¡ ´«¿©°Ü º¸¾Æ¾ß ÇÒ Á¡ÀÌ set Á¢±ÙÀÚ¿Í get Á¢±ÙÀÚÀÔ´Ï´Ù. À̸§¿¡¼­µµ ÃæºÐÈ÷ ÁüÀÛÇÒ ¼ö ÀÖµí set Á¢±ÙÀÚ´Â ¸â¹ö¿¡ ¾²±â(Write access)¸¦ Á¦°øÇØ ÁÖ¸ç, get Á¢±ÙÀÚ´Â Àбâ(Read Access)¸¦ Á¦°øÇØ ÁÝ´Ï´Ù. ÀÌ´Â ¿ì¸®°¡ ¾Õ¼­ »ìÆìº», private µ¥ÀÌÅÍ¿¡ Á¢±ÙÇϱâ À§ÇÏ¿© public ¸Þ¼­µå 2°³¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý·Ð°ú µ¿ÀÏÇÑ ¿ø¸®ÀÔ´Ï´Ù. ¸Þ¼­µå 2°³¸¦ ÀÌ¿ëÇÏ¿© private ¸â¹öÇʵ忡 Á¢±ÙÇÏ´Â °ÍÀ» °£´ÜÇÏ°Ô Çß´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù.

 

set°ú getÀÇ ¸Þ¼­µåÀÔÀå¿¡¼­ º»´Ù¸é getÀº ³»ºÎÀÇ °ÍÀ» ¿ÜºÎ·Î ³»º¸³¾ ¶§ ¸®ÅÏ(return)À» »ç¿ëÇÏ¸é µË´Ï´Ù. ÇÏÁö¸¸ setÇÒ ¶§ ¿ÜºÎ·ÎºÎÅÍ µé¾î ¿À´Â µ¥ÀÌÅÍ´Â ¸Å°³º¯¼ö°¡ ÀÖ¾î¾ß ÇÏÁö ¾Ê°Ú½À´Ï±î? Áï, set ¸Þ¼­µå ÀÔÀå¿¡¼­ º»´Ù¸é ¸Þ¼­µåÀÇ ¸Å°³º¯¼ö¸¦ ÅëÇØ¼­ °ªÀ» ¼ÂÆÃ ÇÒ ¼ö ÀÖÀ¸´Ï±î¿ä. ÀÌ·¯ÇÑ ¸Å°³º¯¼öÀÇ ¿ªÇÒÀ» ´ë½ÅÇØ ÁÖ´Â °ÍÀÌ value¶ó´Â °ÍÀÔ´Ï´Ù. ¼Ó¼ºÀ» ¸¸µé ¶§ set ³»¿¡¼­ value¶ó´Â ¸Å°³º¯¼ö °ªÀ» µðÆúÆ®·Î ¿ÜºÎ¿¡¼­ µé¾î ¿À´Â °ªÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

¢Ã setÀÇ value

q                set ³»¿¡¼­ value¶ó´Â ¸Å°³º¯¼ö °ªÀ» µðÆúÆ®·Î ¿ÜºÎ¿¡¼­ µé¾î ¿À´Â °ªÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

q                ¡®value¡¯´Â set Á¢±ÙÀÚ°¡ °®´Â µðÆúÆ® ÀμöÀÔ´Ï´Ù.

 

¼Ó¼ºÀº set°ú getÀÇ µÎ Á¢±ÙÀÚ°¡ ¹Ýµå½Ã °°ÀÌ ¾²ÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. Àбâ Àü¿ëÀÇ ¼Ó¼ºÀ» ±¸ÇöÇÑ´Ù¸é get Á¢±ÙÀÚ¸¸ ¾²¸é µÇ°í, ¹Ý´ë·Î ¾²±â Àü¿ëÀÇ ¼Ó¼ºÀ» ±¸ÇöÇÑ´Ù¸é set Á¢±ÙÀÚ¸¸ ÀÌ¿ëÇÏ¸é µÇ´Â °ÍÀÔ´Ï´Ù. ±×·³ ¿¹Á¦¸¦ º¸¸ç ´õ »ý°¢ÇØ º¸±â·Î ÇÏÁÒ. ÀÌ ¿¹Á¦´Â ´Ü¼øÈ÷ ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© À̸§À» private ¸â¹öÇʵ忡 ÀúÀå½ÃŰ°í ´Ù½Ã ¹ÝȯÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

 

&

Proptest.cs

Ü ¼Ó¼º »ç¿ë¿¡ ´ëÇÑ ¿¹Á¦

using System;

class PropTest{

            private string name;  // ¼Ò¹®ÀÚÀ̸§

            public string Name{   // ´ë¹®ÀÚÀ̸§

                  get {

                            return name;

                  }

                  set {

                                     name = value+" ´Ô ¹Ý°©½À´Ï´Ù.";

                  }

         }

}

public class PropMain{

       public static void Main(){

                   PropTest pt = new PropTest();

                          pt.Name = "È«±æµ¿";

                    string na = pt.Name;

                           Console.WriteLine("À̸§ : {0}", na);

         }//main

}//class

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

C:\C#Example\02>PropTest

À̸§ : È«±æµ¿ ´Ô ¹Ý°©½À´Ï´Ù.

 

¼Ò½º¸¦ º¸½Ã¸é ¸ø º¸´ø °ÍÀÌ ÀÖ½À´Ï´Ù. set Á¢±ÙÀÚÀÇ ³»ºÎ¿¡ ÀÖ´Â ¡®value¡¯¶ó´Â °ÍÀÔ´Ï´Ù.

 

n                 name = value+" ´Ô ¹Ý°©½À´Ï´Ù.";

 

¡®value¡¯´Â set Á¢±ÙÀÚ°¡ °®´Â µðÆúÆ® ÀμöÀÔ´Ï´Ù. À̰ÍÀº ¿ÜºÎ·ÎºÎÅÍ °ªÀ» ¹Þ¾Æ ³Ñ°ÜÁÖ´Â ¿ªÇÒÀ» Çϰí ÀÖ½À´Ï´Ù. ±×¸®°í ÀÌ·¸°Ô ¸¸µç Name ¼Ó¼ºÀ» ¾Æ·¡ PropMain Ŭ·¡½ºÀÇ Main() ¸Þ¼­µå¿¡¼­ »ç¿ëÇϰí ÀÖ´Â °ÍÀ» º¸¸é public Çʵ忡 Á¢±Ù ÇÏ´Â °Í°ú °°Àº ¹æ½ÄÀ¸·Î Á¢±ÙÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

 

n                 pt.Name = "È«±æµ¿";

n                 string na = pt.Name;

 

¼±¾ðÇÏ´Â ÇüÅÂ¿Í ´õºÒ¾î ¿Ö À̰͵µ ÇʵåÀÇ ÇÑ Á¾·ù¶ó°í Çß´ÂÁö ÀÌÇØ°¡ µÉ °ÍÀÔ´Ï´Ù. °ªÀÌ ³Ñ¾î°¡´Â ¼ø¼­¸¦ º¸¸é, ¿ÜºÎ Ŭ·¡½º¿¡¼­ Á¡ Âï°í È£ÃâÇÏ¸é µ¥ÀÌÅ͸¦ ÀúÀå½ÃŰ°Å³ª Àб⿡ µû¶ó ¼Ó¼ºÀÇ set/get Á¢±ÙÀÚ°¡ Á¤ÀÇÇϰí ÀÖ´Â °ÍÀÌ ½ÇÇàµÇ´Â °ÍÀÔ´Ï´Ù. Áï, pt.NameÀ¸·Î Çʵ忡 ¡°È«±æµ¿¡±À̶õ À̸§À» ÀúÀå½ÃÄÑÁÖ°í, ´Ù½Ã pt.NameÀ¸·Î ºÒ·¯¿À´Â °ÍÀÔ´Ï´Ù.

 

ÀÌ·¸µí ¼Ó¼ºÀº private Çʵ忡 Á¢±ÙÇϱâ À§ÇØ »ç¿ëÇÏ´Â ¸Þ¼­µå¿Í °°Àº ¿ªÇÒÀ» ÇÏÁö¸¸, ±×¿Í ´Ù¸¥ Á¡Àº ¿ÜºÎ Ŭ·¡½º¿¡¼­ Çʵ忡 º¸´Ù Á÷°üÀûÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. Áï, ±× Çʵ尡 publicÀÎÁö ¾Æ´ÑÁö, ¾Æ´Ï¶ó¸é Á¢±Ù ¸Þ¼­µåÀÇ À̸§Àº ¾î¶»°Ô µÉ±î ÇÏ´Â ÃßÃøÀ̳ª ¹®¼­¸¦ ã¾Æº¸´Â ¼ö°í¸¦ ´ú°Ô µÇ´Â °ÍÀÔ´Ï´Ù. Àå¼Ò¿¡ µû¶ó Àß »ç¿ëÇÑ´Ù¸é, ÄÚµåÀÇ °£°á¼º°ú ¸íÈ®¼ºÀ» ¾òÀ» ¼ö ÀÖ´Â ¾µ¸¸ÇÑ °ÍÀ¸·Î ½ÇÁ¦·Îµµ ´å³Ý ¶óÀ̺귯¸®ÀÇ ¸¹Àº Ŭ·¡½º³ª ±¸Á¶Ã¼¿¡¼­µµ °ªÀ» ¼³Á¤ÇÏ°í ¾ò±â À§ÇÑ ¹æ¹ýÀ¸·Î ¼Ó¼ºÀÌ ¸¹ÀÌ