¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  06. Àε¦¼­(Indexer)  

 

 

5.6 Àε¦¼­(Indexer)

 

Àε¦¼­(Indexer)´Â Ŭ·¡½º ¶Ç´Â ±¸Á¶Ã¼ÀÇ °´Ã¼¸¦ ¹è¿­°ú °°Àº ¹æ½ÄÀ¸·Î À妽º ÇÒ ¼ö ÀÖµµ·Ï ÇØÁִ Ŭ·¡½º ¸â¹öÀÔ´Ï´Ù. ±× ±¸Á¶´Â ¼Ó¼º(Property)°ú À¯»çÇÏ¿© get ¹× set Á¢±ÙÀÚ¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ±×¸®°í Àбâ, ¾²±âÀü¿ëÀ¸·Î set ¶Ç´Â get Á¢±ÙÀÚ¸¸À» Á¤ÀÇÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÇÏÀÚ¸¸ Å« Â÷ÀÌÁ¡Àº, Àε¦¼­(Indexer)´Â °´Ã¼¸¦ À妽º(Index)Çϱâ À§ÇÑ index ÀÎÀÚ¸¦ °¡Áö¸ç, Ŭ·¡½º ÀÚü¸¦ ¹è¿­Ã³·³ »ç¿ëÇϱ⠶§¹®¿¡ this Ű¿öµå°¡ À妽ºÀÇ À̸§À¸·Î »ç¿ëµË´Ï´Ù. ÀÌ·± À妽ºÀÇ ±âº»±¸Á¶¸¦ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

 

Àε¦¼­ÀÇ ±âº»±¸Á¶

class Ŭ·¡½º¸í{

     ¡¦ ¡¦

      µ¥ÀÌÅÍŸÀÔ this[int index]{

        set {

                                                                                                                  //ÁöÁ¤µÈ ¿ä¼Ò ¼³Á¤

        }

        get {

                                                                                                                  //ÁöÁ¤µÈ ¿ä¼Ò ¹Ýȯ

        }

      }

    ¡¦ ¡¦

 }//Ŭ·¡½º

 

À§ ±¸Á¶¸¦ ¹è¿­°ú ¿¬°üÇÏ¿© ¼³¸í µå¸®¸é, µ¥ÀÌÅÍŸÀÔÀº ¹è¿­ÀÇ Å¸ÀÔó·³ Àε¦¼­¸¦ »ç¿ëÇÏ¿© »©°í ³ÖÀ» ŸÀÔÀ» ¸»Çϸç this´Â À§¿¡¼­ ¸»¾¸ µå¸° °Íó·³, ÀÌ Å¬·¡½º ÀÚü¸¦ ÂüÁ¶ÇÏ´Â °ÍÀ̰í, index´Â ¹è¿­ÀÇ Ã·ÀÚ¿Í °°Àº ±¸¼º¿ä¼Ò¸¦ ÁöÁ¤ÇÏ´Â ¸Å°³º¯¼ö ÀÔ´Ï´Ù. set°ú getÀº ¼Ó¼º¿¡¼­ÀÇ ±×°Í°ú µ¿ÀÏÇÑ ¿ªÇÒÀ» ÇÕ´Ï´Ù. set ³»ºÎ¿¡¼­´Â ¿ÜºÎ·ÎºÎÅÍ µé¾î¿À´Â ÀÎÀÚ¸¦ value¶ó´Â ±âº»°ªÀ» ÀÌ¿ëÇÏ°Ô µË´Ï´Ù.

 

±×·¯¸é ½ÇÁ¦ Àε¦¼­(Indexer)¸¦ »ç¿ëÇÑ ¿¹Á¦¸¦ »ìÆìº¸°Ú½À´Ï´Ù. ´ÙÀ½ÀÇ ¿¹Á¦´Â ¹®ÀÚ¿­À» ¾ò¾î³»°í ÁöÁ¤Çϱâ À§ÇÑ Àε¦¼­¸¦ °¡Áø Ŭ·¡½º¸¦ ¸¸µé°í, ArrayList Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¼­ ¹®ÀÚ¿­À» °ü¸®ÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

 

&

IndexerTest.cs

Ü Indexer¸¦ Å×½ºÆ®ÇÑ ¿¹Á¦

using System;

using System.Collections;

class SimpleIndexer{

        ArrayList lname = new ArrayList();

        public object this[int index]{

                  get{

                                 if (index >-1 & index<lname.Count) {//¹üÀ§³»¿¡ ÀÖ´Â °Í

                                  return lname[index];

                         }else{

                                  return null;

                         }

                  }

                  set{

                                  if(index>-1 & index<lname.Count){//¹üÀ§³»¿¡ Àִ°ÍÀº º¯°æµÊ

                                  lname[index] = value;

                                  } else if (index == lname.Count){//¼ø¼­´ë·Î Çϳª¾¿ Ãß°¡ÇÏ¸é µÊ

                                  lname.Add(value);

                                  } else {//¼ø¼­´ë·Î°¡ ¾Æ´Ï¸é

                                              Console.WriteLine("sid["+index+"] : ÀÔ·Â ¹üÀ§ Ãʰú ¿¡·¯!!");

                          }

                  }

        }

}

class IndexerTest {

            public static void Main(){

                      SimpleIndexer sid = new SimpleIndexer();

                      sid[0]= "hong";

                      sid[1]= "kim";

                      sid[2]= "sung";

                              sid[10] = "park"; // ¹üÀ§Ãʰú

                       Console.WriteLine("----getting----");

                       Console.WriteLine(sid[0]);

                       Console.WriteLine(sid[1]);

                       Console.WriteLine(sid[2]);

       }//main

}//class

C:\C#Example\05>csc IndexerTest.cs

C:\C#Example\05>IndexerTest

----setting----

sid[10] : ÀÔ·Â ¹üÀ§ Ãʰú ¿¡·¯!!

 

----getting----

sid[0] : hong

sid[1] : kim

sid[2] : sung

sid[3] : Àμö 3¿¡ ÇØ´çÇÏ´Â µ¥ÀÌÅͰ¡ ¾ø½À´Ï´Ù.

 

¼Ò½º¸¦ ºÐ¼®ÇØ º¸¸é ¸ÕÀú ArrayList Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ­ System.Collections ³×ÀÓ½ºÆäÀ̽º¸¦ usingÇϰí ÀÖ½À´Ï´Ù. ArrayList Ŭ·¡½º´Â °´Ã¼µéÀ» ÀúÀåÇϱâ À§Çؼ­ »ç¿ëµÇ´Â ´å³Ý ÇÁ·¹ÀÓ¿÷ÀÇ Å¬·¡½º·Î, ÀÌ¿Í °°ÀÌ ¹è¿­µî Ä÷º¼Ç¿¡ °ü·ÃµÈ Ŭ·¡½ºµéÀ» Á¤ÀÇÇÑ ³×ÀÓ½ºÆäÀ̽º°¡ System.CollectionsÀÔ´Ï´Ù.

 

n                 using System.Collections;

 

±×¸®°í Àε¦¼­¸¦ ¼±¾ðÇÏ´Â SimpleIndexer Ŭ·¡½ºÀÇ ³»ºÎ¸¦ »ìÆìº¸¸é, ¸ÕÀú °´Ã¼¸¦ ÀúÀåÇϱâ À§Çؼ­ ArryListÀÇ °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.

 

n                 ArrayList lname = new ArrayList();

 

Àε¦¼­ÀÇ ¸®ÅÏÇüÀ» object·Î ¼±¾ðÇÕ´Ï´Ù. ArrayListÀÇ °´Ã¼°¡ ¹ÝȯÇÏ´Â °ªÀÌ object ÇüÀ̹ǷΠÀÌ·¸°Ô ¼±¾ðÇØ¾ß ÇÕ´Ï´Ù.

 

n                 public object this[int index]

 

get Á¢±ÙÀÚ¿¡¼­´Â »© °¡·Á´Â °ªÀÌ ÇöÀç ArryList °´Ã¼°¡ °¡Áø °ªÀÌ¸é ±× °ªÀ» ¸®ÅÏÇØ ÁÖ°í ±×·¸Áö ¾Ê´Ù¸é, nullÀ» ¹ÝȯÇÕ´Ï´Ù. ÀÌ ¶§ index´Â ¸®ÅÏÇÒ °ªÀÇ À§Ä¡¸¦ ÀǹÌÇÕ´Ï´Ù.

 

n                  get{

n                     if (index >-1 & index<lname.Count) {//¹üÀ§³»¿¡ ÀÖ´Â °Í

n                        return lname[index];

n                     }else{

n                        return null;

n                     }

n                  }

 

¸¶Âù°¡Áö·Î set Á¢±ÙÀÚ¿¡¼­µµ indexÀÇ À§Ä¡¿¡ µ¥ÀÌÅ͸¦ ÇÒ´çÇÏ°í ¸¸¾à index°¡ ÇØ´ç ¹üÀ§¸¦ ³ÑÀ¸¸é ±×¿¡ ÇØ´çÇÏ´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÕ´Ï´Ù.

 

n                  set{

n                     if(index>-1 & index<lname.Count){//¹üÀ§³»¿¡ Àִ°ÍÀº º¯°æµÊ

n                        lname[index] = value;

n                     } else if (index == lname.Count){//¼ø¼­´ë·Î Çϳª¾¿ Ãß°¡ÇÏ¸é µÊ

n                        lname.Add(value);

n                     } else {

n                        Console.WriteLine("sid["+index+"] : ÀÔ·Â ¹üÀ§ Ãʰú ¿¡·¯!!");

n                     }

n                  }

 

¾Æ·¡ÀÇ ½ÇÇà Ŭ·¡½ºÀÇ ¸ÞÀÎ ¸Þ¼­µå¿¡¼­´Â Àε¦¼­¸¦ Æ÷ÇÔÇÑ Å¬·¡½ºÀÇ °´Ã¼¸¦ »ý¼º½ÃÄÑ ¸¶Ä¡ ¹è¿­Ã³·³ °ªÀ» Áý¾î³Ö°í ¶Ç ºÒ·¯¿À°í ÀÖ½À´Ï´Ù. À̰ÍÀ» °¡´ÉÇÏ°Ô ÇÏ´Â °ÍÀÌ ¹Ù·Î Àε¦¼­(Index)ÀÔ´Ï´Ù.

 

n                  sid[0]= "hong";

n                  sid[1]= "kim";

n                  sid[2]= "sung";

n                  sid[10] = "park";

n                  Console.WriteLine("----getting----");

n                  Console.WriteLine(sid[0]);

n                  Console.WriteLine(sid[1]);

n                  Console.WriteLine(sid[2]);

 

ÀÌ·¸°Ô Àε¦¼­´Â ¹è¿­°ú °°Àº ÇüÅ·Π°´Ã¼¸¦ »ç¿ëÇÏ°í ½ÍÀ» ¶§ Ŭ·¡½º ³»¿¡ ±¸Çö ÇØ ÁÖ¸é µÇ´Â °ÍÀÔ´Ï´Ù. ±×¸®°í, »ç¿ëÀÚ°¡ ±× °´Ã¼¸¦ ¹è¿­°ú °°Àº Çü½ÄÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸ç ¿øÇÏ´Â °á°ú¸¦ ¸°ÅÏÇØ ¾ò¾î ³¾ ¼ö ÀÖ´Â °ÍÀÌ Àε¦¼­ÀÇ ¿ªÇÒÀÔ´Ï´Ù. Áï, ³»ºÎÀÇ ½ÇÁ¦ÀûÀÎ ±¸ÇöÀ» ¾î¶»°Ô Çϴ°¡´Â ÇÁ·Î±×·¡¸ÓÀÇ ¸òÀÎ °ÍÀÔ´Ï´Ù.



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