7-2. Á¤Àûº¯¼ö

7-2-°¡.Á¤Àûº¯¼ö

Á¤Àûº¯¼ö(Static Variable)´Â Àü¿ªº¯¼ö¿Í Áö¿ªº¯¼öÀÇ ¼º°ÝÀ» µ¿½Ã¿¡ °¡Áö´Â Á» Ưº°ÇÑ ±â¾ï ºÎ·ùÀÌ´Ù. ¾ÕÀÇ µµÇ¥¿¡ ±â·ÏµÇ¾î ÀÖ´Â Á¤Àûº¯¼öÀÇ Æ¯Â¡µéÀ» »ìÆìº¸ÀÚ.

 

¡á ¼±¾ð À§Ä¡´Â Áö¿ªº¯¼ö¿Í ¸¶Âù°¡Áö·Î ÇÔ¼öÀÇ ¼±µÎÀÌ´Ù.

¡á Åë¿ë ¹üÀ§´Â Áö¿ªº¯¼ö¿Í ¸¶Âù°¡Áö·Î ÇÔ¼ö ³»ºÎ·Î ±¹ÇѵȴÙ.

¡á ÀúÀå Àå¼Ò´Â Àü¿ªº¯¼ö°¡ ÀúÀåµÇ´Â Á¤Àû µ¥ÀÌÅÍ ¿µ¿ªÀÌ´Ù.

¡á Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª¿¡ ÀúÀåµÇ¹Ç·Î ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ Ç×»ó Á¸ÀçÇÑ´Ù.

¡á ÃʱⰪ ÁöÁ¤ÀÌ ¾øÀ¸¸é 0À¸·Î ÃʱâÈ­µÇ°í ÇÁ·Î±×·¥ ½ÇÇà½Ã ´Ü ÇÑ ¹ø¸¸ ÃʱâÈ­µÈ´Ù.

 

Á¤Àûº¯¼öÀÇ ¼ºÁúÀ» ¿ä¾àÇÏÀÚ¸é ÀúÀå Àå¼Ò´Â Àü¿ªº¯¼öÀÌµÇ Åë¿ë ¹üÀ§´Â Áö¿ªº¯¼ö¶ó ÇÒ ¼ö ÀÖ´Ù. Á¤Àûº¯¼ö¸¦ ¼±¾ðÇÒ ¶§´Â ¹Ýµå½Ã staticÀ̶ó´Â ÁöÁ¤ÀÚ¸¦ ºÙ¿©¾ß ÇÑ´Ù.

 

static int i;

static double d;

 

ÀÌ·¸°Ô ¼±¾ðÇϸé i³ª d´Â Á¤Àûº¯¼ö°¡ µÇ¾î Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª¿¡ ÀúÀåµÇ¸ç Åë¿ë ¹üÀ§´Â ¼±¾ð¹®ÀÌ ÀÖ´Â ÇÔ¼ö ³»ºÎ·Î ±¹ÇѵȴÙ. ƯÁ¤ ÇÔ¼ö¸¸ »ç¿ëÇ쵂 ±× °ªÀ» °è¼Ó À¯ÁöÇÒ Çʿ䰡 ÀÖÀ» ¶§ Á¤Àûº¯¼ö¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½ ¿¹Á¦°¡ Á¤Àûº¯¼ö¸¦ »ç¿ëÇÏ´Â ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù.

 

¿¹ Á¦ : Static

#include <Turboc.h>

 

void PrintCount();

 

void main()

{

     int i;

    

     for (i=0;i<5;i++) {

          PrintCount();

     }

}

 

void PrintCount()

{

     static int count=0;

 

     count++;

     printf("Àú´Â %d¹øÂ°·Î È£ÃâµÇ¾ú½À´Ï´Ù.\n",count);

}

 

PrintCount ÇÔ¼ö´Â ÀÌ ÇÔ¼ö°¡ È£ÃâµÈ ȸ¼ö¸¦ È­¸éÀ¸·Î Ãâ·ÂÇϴµ¥ ÀÚ½ÅÀÌ È£ÃâµÈ ȸ¼ö¸¦ count¶ó´Â º¯¼ö¿¡ ÀúÀåÇϰí ÀÖ´Ù. ÃÖÃÊ count´Â 0À¸·Î ÃʱâÈ­µÇ°í PrintCount°¡ ÇÑ ¹ø È£ÃâµÉ ¶§¸¶´Ù 1¾¿ Áõ°¡Çϵµ·Ï µÇ¾î ÀÖ´Ù. main¿¡¼­ ÀÌ ÇÔ¼ö¸¦ ´Ù¼¸ ¹ø È£ÃâÇÏ¸ç ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

Àú´Â 1¹øÂ°·Î È£ÃâµÇ¾ú½À´Ï´Ù.

Àú´Â 2¹øÂ°·Î È£ÃâµÇ¾ú½À´Ï´Ù.

Àú´Â 3¹øÂ°·Î È£ÃâµÇ¾ú½À´Ï´Ù.

Àú´Â 4¹øÂ°·Î È£ÃâµÇ¾ú½À´Ï´Ù.

Àú´Â 5¹øÂ°·Î È£ÃâµÇ¾ú½À´Ï´Ù.

 

count º¯¼ö´Â PrintCount ÇÔ¼ö ³»ºÎ¿¡¼­¸¸ »ç¿ëµÇ¹Ç·Î ÀÌ ÇÔ¼ö ¹Û¿¡¼­´Â ÂüÁ¶ÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. ÇÏÁö¸¸ ±×·¸´Ù°í ÇØ¼­ count¸¦ Áö¿ªº¯¼ö·Î ¼±¾ðÇØ¼­´Â ¾ÈµÇ´Âµ¥ Áö¿ªº¯¼ö´Â ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù ½ºÅÿ¡ ´Ù½Ã »ý¼ºµÇ°í ÇÔ¼ö°¡ ³¡³¯ ¶§ ÆÄ±«µÇ¾î ¹ö¸®¹Ç·Î °ªÀ» °è¼Ó À¯ÁöÇÒ ¼ö ¾ø´Ù. È£Ãâ ȸ¼ö¸¦ ±â¾ïÇÏ´Â Ä«¿îÆ® º¯¼ö°¡ Á¦ ±â´ÉÀ» ´Ù ÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù. ¶Ç ±×·¸´Ù°í ÇØ¼­ count¸¦ Àü¿ªº¯¼ö·Î ¼±¾ðÇϸé PrintCount ÀÌ¿ÜÀÇ ÇÔ¼ö¿¡¼­µµ ÀÌ º¯¼ö¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ°Ô µÇ¹Ç·Î ÇÔ¼öÀÇ µ¶¸³¼ºÀ» ÇìÄ¡°Ô µÈ´Ù.

±×·¡¼­ ±â¾ï Àå¼Ò´Â Àü¿ªÀûÀ̰í Åë¿ë ¹üÀ§´Â Áö¿ªÀûÀÎ Á¤Àûº¯¼ö·Î ¼±¾ðÇÑ °ÍÀÌ´Ù. Á¤Àûº¯¼ö·Î ¼±¾ðÇϸé ÇÔ¼ö°¡ ³¡³ªµµ °ªÀÌ ÆÄ±«µÇÁö ¾Ê°í °è¼Ó À¯ÁöµÇ¹Ç·Î Ä«¿îÆ®·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ Åë¿ë ¹üÀ§°¡ ÇÔ¼ö ³»ºÎ·Î ±¹ÇѵǹǷΠ¿ÜºÎ¿¡¼­ ÀÌ º¯¼ö¸¦ ÂüÁ¶ÇÒ ¼ö ¾øÀ¸¸ç µð¹ö±ë½Ã¿¡µµ ¹®Á¦°¡ µÇÁö ¾Ê°í ÀÌ ÇÔ¼ö¸¦ ´Ù¸¥ ÇÁ·ÎÁ§Æ®·Î °¡Á®°¡ ½±°Ô Àç»ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

º¸´Ù½ÃÇÇ Á¤Àûº¯¼ö´Â Áö¿ªº¯¼ö¿Í Àü¿ªº¯¼öÀÇ ÀåÁ¡À» ¸ðµÎ °¡Áö´Â Á¶±Ý ƯÀÌÇÑ ±â¾ï ºÎ·ùÀÌ´Ù. À§ ¿¹Á¦Ã³·³ °è¼Ó Áõ°¡ÇÏ´Â Ä«¿îÆ® °ªÀ̳ª ÃÖÈÄ ½ÇÇà °á°ú¸¦ ÇÔ¼ö ½º½º·Î°¡ º¸À¯Çϵµ·Ï ÇÏ°í ½ÍÀ» ¶§ Á¤Àûº¯¼ö¸¦ »ç¿ëÇÑ´Ù. Á¤Àûº¯¼ö¸¦ Àß »ç¿ëÇÏ¸é ±¸Á¶ÀûÀ¸·Îµµ ưưÇÏ°í µð¹ö±ë¿¡µµ À¯¸®ÇÑ ÁÁÀº Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.

Á¤Àûº¯¼ö¿¡¼­ ÇѰ¡Áö À¯ÀÇÇÒ Á¡Àº ÀÌ º¯¼ö°¡ ¾ðÁ¦ ÃʱâÈ­µÇ´Â°¡ ÇÏ´Â Á¡ÀÌ´Ù. ÇÔ¼ö ¼±µÎ¿¡¼­ Á¤Àûº¯¼ö¸¦ ¼±¾ðÇϰí ÀÖÀ¸¹Ç·Î ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù ÃʱâÈ­µÉ °Í °°Áö¸¸ ±×·¸Áö ¾ÊÀ¸¸ç ÇÔ¼ö°¡ ÃÖÃʷΠȣÃâµÉ ¶§ ´Ü ÇÑ ¹ø¸¸ ÃʱâÈ­µÈ´Ù. »ç½Ç ÃʱâÈ­¶ó´Â ¸» ÀÚü¿¡ ÀÌ¹Ì ÀÏȸ¼ºÀÇ Àǹ̰¡ ³»Æ÷µÇ¾î ÀÖÁö ¾ÊÀº°¡? À§ ¿¹¿¡¼­ count=0;À¸·Î ÃʱâÈ­µÇ´Â Äڵ尡 PrintCount ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù ½ÇÇàµÈ´Ù¸é ÀÌ º¯¼ö°¡ °ªÀ» °è¼Ó À¯ÁöÇÏÁö ¸øÇÒ °ÍÀÌ´Ù.

¶Ç ¸¸¾à Á¤Àûº¯¼ö ¼±¾ð¹®¿¡¼­ ÃʱâÈ­¸¦ ÇÏÁö ¾ÊÀ¸¸é Àü¿ªº¯¼ö¿Í ¸¶Âù°¡Áö·Î 0À¸·Î ÀÚµ¿ ÃʱâÈ­µÈ´Ù. ±×·¡¼­ À§ ¿¹Á¦ÀÇ count ¼±¾ð¹®¿¡¼­ ÃʱâÈ­ ºÎºÐÀº »©°í static int count;¶ó°í ¼±¾ðÇØµµ count´Â 0À¸·Î ÃʱâÈ­µÈ´Ù. ÇÔ¼ö ³»ºÎ¿¡¼­ Å« ¹è¿­À» ¼±¾ðÇϰí ÃʱâÈ­ÇÒ ¶§´Â ÃʱâÈ­ ½Ã°£À» Àý¾àÇϱâ À§ÇØ Á¤ÀûÀ¸·Î ¼±¾ðÇÏ¿© ÇÑ ¹ø¸¸ ÃʱâÈ­Çϵµ·Ï ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù Å« ¹è¿­ÀÌ ¸Å¹ø »ý¼º, ÃʱâÈ­, ÆÄ±«¸¦ ¹Ýº¹ÇϹǷΠ´À·ÁÁø´Ù.

PrintCount ¿¹Á¦¿¡¼­¿Í °°ÀÌ ÇÔ¼ö ³»ºÎ¿¡¼­ ¼±¾ðµÈ Á¤Àûº¯¼ö¸¦ ³»ºÎ Á¤Àûº¯¼ö¶ó°í ÇÑ´Ù. Á¤Àûº¯¼ö´Â ±× Ư¼º»ó ƯÁ¤ ÇÔ¼ö Àü¿ëÀ¸·Î ¼±¾ðÇÏ´Â °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ º¸Åë Á¤Àûº¯¼ö¶ó°í ÇÏ¸é ³»ºÎ Á¤Àûº¯¼ö¸¦ ÀǹÌÇÑ´Ù. ÈçÇÏÁö´Â ¾ÊÁö¸¸ ÇÔ¼ö ¿ÜºÎ¿¡¼­µµ Á¤Àûº¯¼ö¸¦ ¼±¾ðÇÒ ¼ö Àִµ¥ ÀÌ·¸°Ô ¼±¾ðµÈ º¯¼ö¸¦ ¿ÜºÎ Á¤Àûº¯¼ö¶ó°í ÇÑ´Ù. ¿ÜºÎ Á¤Àûº¯¼ö´Â ƯÁ¤ ÇÔ¼ö¿¡ ¼Ò¼ÓµÇ¾î ÀÖÁö ¾ÊÀ¸¹Ç·Î ÀϹÝÀûÀ¸·Î Àü¿ªº¯¼ö¿Í °°Àº ¼ºÁúÀ» °¡Áø´Ù.

´Ù¸¸ Àü¿ªº¯¼ö¿Í ´Ù¸¥ Á¡Àº extern ¼±¾ð¿¡ ÀÇÇØ ¿ÜºÎ ¸ðµâ·Î ¾Ë·ÁÁöÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. Áï ÀÚ½ÅÀÌ ¼±¾ðµÈ ¸ðµâ¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµâ Àü¿ªº¯¼ö°¡ µÈ´Ù. ¾ÕÀÇ Extern2 ¿¹Á¦¿¡¼­ global.cppÀÇ value º¯¼ö ¼±¾ð¹®À» static int value=1234; ¶ó°í ¼öÁ¤Çϸé global.cpp ¿ÜºÎ¿¡¼­ extern ¼±¾ðÀ» ÇÏ´õ¶óµµ ÀÌ º¯¼ö¸¦ ÂüÁ¶ÇÒ ¼ö ¾ø°Ô µÈ´Ù.

Àü¿ªº¯¼öÀ̸鼭µµ ¿ÜºÎ¿¡ ¾Ë·Á¼­´Â ¾ÈµÇ´Â ±×·± º¯¼ö°¡ ÇÊ¿äÇÒ ¶§ ¿ÜºÎ Á¤Àûº¯¼ö¸¦ »ç¿ëÇÑ´Ù. ÁÖ·Î ¸ðµâÀÇ ÀçȰ¿ë¼ºÀ» ³ôÀ̱â À§ÇØ »ç¿ëÇϴµ¥ ±¸Ã¼ÀûÀÎ ¿¹¸¦ µé¾î º¸ÀÚ. ±×·¡ÇÈ °ü·Ã ÇÔ¼öµéÀ» Á¦°øÇÏ´Â graphic.cpp¿Í graphic.h¸¦ ¾ÆÁÖ °øµé¿©¼­ Á¦ÀÛÇߴµ¥ ÀÌ ¸ðµâ¿¡¼­ mode, color °°Àº Àü¿ªº¯¼ö¸¦ »ç¿ëÇϰí ÀÖ´Ù°í ÇÏÀÚ. ÀÌ ¸ðµâÀ» ¾²°í ½ÍÀº »ç¶÷ÀÌ graphic.* ÆÄÀϸ¸ º¹»çÇØ¼­ »ç¿ëÇÏ¸é µÇµµ·Ï ÇÏ°í ½Í´Ù.

±×·±µ¥ ÀÌ ¸ðµâÀ» »ç¿ëÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡ ÀÌ¹Ì mode, color¶ó´Â Àü¿ªº¯¼ö°¡ »ç¿ëµÇ°í ÀÖ´Ù¸é ¸íĪÀÇ Ãæµ¹ÀÌ ¹ß»ýÇÏ°Ô µÉ °ÍÀÌ°í ¾çÂÊ Áß Çϳª´Â º¯¼öÀÇ À̸§À» ¹Ù²Ù¾î¾ß ÇÑ´Ù. ÀÌ·² ¶§ mode, color º¯¼ö¸¦ ¿ÜºÎ Á¤Àûº¯¼ö·Î ¼±¾ðÇÏ¸é ´Ù¸¥ ¸ðµâ¿¡´Â ¾Ë·ÁÁöÁö ¾ÊÀ¸¹Ç·Î À̸§ÀÇ Ãæµ¹À» ¹æÁöÇÒ ¼ö ÀÖ°Ô µÇ°í ÀÌ ¸ðµâÀº ¾Æ¹« ÇÁ·ÎÁ§Æ®¿¡¼­³ª ÀçȰ¿ëÇϱ⠽¬¿öÁø´Ù.