27-3-´Ù.Á¤Àû ¸â¹ö ÇÔ¼ö

Á¤Àû ¸â¹ö ÇÔ¼öÀÇ °³³äµµ Á¤Àû ¸â¹ö º¯¼öÀÇ °æ¿ì¿Í ºñ½ÁÇÏ´Ù. °´Ã¼¿Í Á÷Á¢ÀûÀ¸·Î ¿¬°üµÈ´Ù±âº¸´Ù´Â Ŭ·¡½º¿Í ¿¬°üµÇ¸ç »ý¼ºµÈ °´Ã¼°¡ Çϳªµµ ¾ø´õ¶óµµ Ŭ·¡½ºÀÇ À̸§¸¸À¸·Î È£ÃâÇÒ ¼ö ÀÖ´Ù. ÀÏ¹Ý ¸â¹ö ÇÔ¼ö´Â °´Ã¼¸¦ ¸ÕÀú »ý¼ºÇÑ ÈÄ obj.func() Çü½ÄÀ¸·Î È£ÃâÇÑ °´Ã¼¿¡ ´ëÇØ ¾î¶² ÀÛ¾÷À» ÇÑ´Ù. ÀÌ¿¡ ºñÇØ Á¤Àû ¸â¹ö ÇÔ¼ö´Â Class::func() Çü½ÄÀ¸·Î È£ÃâÇϸç Ŭ·¡½º Àüü¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ ÀÛ¾÷À» ÇÑ´Ù. ÁÖ·Î Á¤Àû ¸â¹ö º¯¼ö¸¦ Á¶ÀÛÇϰųª ÀÌ Å¬·¡½º¿¡ ¼ÓÇÑ ¸ðµç °´Ã¼¸¦ À§ÇÑ ¾î¶² 󸮸¦ ÇÑ´Ù.

Á¤Àû ¸â¹ö ÇÔ¼ö¸¦ ¼±¾ðÇÏ´Â ¹æ¹ýÀº Á¤Àû ¸â¹ö º¯¼ö¿Í µ¿ÀÏÇÏ´Ù. Ŭ·¡½º ¼±¾ðºÎÀÇ ÇÔ¼ö ¿øÇü¾Õ¿¡ staticÀ̶ó´Â Ű¿öµå¸¸ ºÙÀÌ¸é µÈ´Ù. Á¤Àû ¸â¹ö ÇÔ¼öÀÇ º»Ã¼´Â Ŭ·¡½º ¼±¾ðºÎ¿¡ ÀζóÀÎ Çü½ÄÀ¸·Î ÀÛ¼ºÇÒ ¼öµµ ÀÖ°í ¾Æ´Ï¸é ¿ÜºÎ¿¡ µû·Î Á¤ÀÇÇÒ ¼öµµ Àִµ¥ ¿ÜºÎ¿¡ ÀÛ¼ºÇÒ ¶§ static Ű¿öµå´Â »ý·«ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¾Õ¿¡¼­ ¸¸µç °´Ã¼ °³¼ö¸¦ ¼¼´Â ¿¹Á¦¸¦ Á¶±Ý ¼öÁ¤ÇØ º» °ÍÀÌ´Ù.

 

¿¹ Á¦ : ObjCount2

#include <Turboc.h>

 

class Count

{

private:

     int Value;

     static int Num;

 

public:

     Count() { Num++; }

     ~Count() { Num--; }

     static void InitNum() {

          Num=0;

     }

     static void OutNum() {

          printf("ÇöÀç °´Ã¼ °³¼ö = %d\n",Num);

     }

};

int Count::Num;

 

void main()

{

     Count::InitNum();

     Count::OutNum();

     Count C,*pC;

     C.OutNum();

     pC=new Count;

     pC->OutNum();

     delete pC;

     pC->OutNum();

     printf("Å©±â=%d\n",sizeof(C));

}

 

Á¤Àû ¸â¹ö º¯¼ö NumÀ» Á¤ÀÇÇÒ ¶§ 0À¸·Î ÃʱâÈ­ÇÏÁö ¾Ê¾ÒÀ¸¸ç ÀÌ ÀÛ¾÷Àº »õ·Î Ãß°¡µÈ Á¤Àû ¸â¹ö ÇÔ¼ö InitNumÀÌ ´ã´çÇÑ´Ù. InitNumÀº Á¤Àû ¸â¹ö ÇÔ¼öÀ̹ǷΠCount Ŭ·¡½ºÀÇ °´Ã¼°¡ ÀüÇô ¾ø´Â »óÅ¿¡¼­µµ È£ÃâµÉ ¼ö ÀÖ´Ù. main¿¡¼­ Count::InitNum()À» ¸ÕÀú È£ÃâÇÏ¿© NumÀ» 0À¸·Î ÃʱâÈ­ÇÏ¿´´Ù. º¯¼ö¸¦ ÃʱâÈ­ÇÏ´Â º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µé¾úÀ¸¹Ç·Î ¿øÇÑ´Ù¸é ½ÇÇàÁß¿¡ ¾ðÁ¦µçÁö ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© NumÀ» 0À¸·Î ¸®¼ÂÇÒ ¼öµµ ÀÖ´Ù.

°´Ã¼ÀÇ °³¼ö¸¦ Ãâ·ÂÇÏ´Â OutNum ÇÔ¼öµµ °³º° °´Ã¼¿¡ ´ëÇÑ ÇÔ¼ö°¡ ¾Æ´Ï±â ¶§¹®¿¡ Á¤Àû ¸â¹ö ÇÔ¼ö·Î ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. OutNum ÇÔ¼ö°¡ °´Ã¼·ÎºÎÅÍ È£ÃâµÇÁö ¾ÊÀ¸¹Ç·Î ÀÌÁ¦ °´Ã¼°¡ ÀüÇô »ý¼ºµÇÁö ¾ÊÀº »óÅÂ, Áï NumÀÌ 0ÀÎ »óÅ¿¡ ´ëÇÑ Ãâ·Âµµ °¡´ÉÇÏ´Ù. Á¤Àû ¸â¹ö ÇÔ¼ö°¡ ¾Æ´Ï¸é ÀÌ·± È£ÃâÀº ºÒ°¡´ÉÇÏ´Ù. main¿¡¼­ Áö¿ª °´Ã¼ C¸¦ »ý¼ºÇϱâ Àü¿¡ Count::OutNum()À» È£ÃâÇߴµ¥ ÀÌ È£Ãâ¹®Àº 0À» Ãâ·ÂÇÏ¸ç ¾ÆÁ÷ »ý¼ºµÈ °´Ã¼°¡ ¾ø´Ù´Â °ÍÀ» º¸¿© ÁØ´Ù.

C °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ C.OutNum()À» È£ÃâÇϸé 1ÀÌ Ãâ·ÂµÇ°í pC°´Ã¼¸¦ µ¿Àû »ý¼ºÇÑ ÈÄ pC->OutNum()À» È£ÃâÇϸé 2°¡ Ãâ·ÂµÈ´Ù. ÀÌ µÎ È£ÃâÀÇ ¿¹Ã³·³ Á¤Àû ¸â¹ö ÇÔ¼ö¸¦ °´Ã¼ÀÇ À̸§À¸·Î È£ÃâÇÒ ¼öµµ ÀÖÁö¸¸ À̶§ °´Ã¼ÀÇ À̸§Àº ¾Æ¹«·± Àǹ̰¡ ¾øÀ¸¸ç ÄÄÆÄÀÏ·¯´Â °´Ã¼°¡ ¼Ò¼ÓµÈ Ŭ·¡½ºÀÇ Á¤º¸¸¸ »ç¿ëÇÑ´Ù. ÆíÀÇ»ó C.OutNum(), pC->OutNum(); À̶ó´Â Ç¥ÇöÀ» Çã¿ëÇÒ »ÓÀÌÁö ÀÌ È£ÃâÀº ½ÇÁ¦·Î Count::OutNum()À¸·Î ÄÄÆÄÀϵȴٴ ¾ê±â´Ù.

±×·¡¼­ delete pC;·Î pC °´Ã¼¸¦ ÇØÁ¦ÇÑ ÈÄ¿¡µµ pC->OutNum()À̶ó´Â È£ÃâÀÌ Á¤»óÀûÀ¸·Î µ¿ÀÛÇÑ´Ù. ÄÄÆÄÀÏ·¯´Â pC¿¡ ½ÇÁ¦·Î °´Ã¼°¡ »ý¼ºµÇ¾î ÀÖ´ÂÁö¸¦ º¼ Çʿ䵵 ¾øÀ¸¸ç pC°¡ Count *ÇüÀ̶ó´Â °Í¸¸ ÂüÁ¶ÇÒ »ÓÀÌ´Ù. ½ÉÁö¾î mainÀÇ 4¹øÂ° ÁÙ¿¡ pC°¡ ÇÒ´çµÇ±âµµ ÀüÀÎ C.OutNum()À» pC->OutNum()À¸·Î ¹Ù²ãµµ Àß µ¿ÀÛÇÑ´Ù. ÀÌ°É º¸¸é ÄÄÆÄÀÏ·¯°¡ Æ÷ÀÎÅÍÀÇ Å¸ÀÔ¸¸À¸·Î È£ÃâÇÒ ÇÔ¼ö¸¦ °áÁ¤ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

 

     Count *pC;

     pC->OutNum();               // »ý¼º Àü¿¡µµ È£Ãâ °¡´É

     pC=new Count;

     pC->OutNum();               // »ý¼º ÈÄ¿¡µµ È£Ãâ °¡´É

     delete pC;

     pC->OutNum();               // ÆÄ±«µÈ ÈÄ¿¡µµ È£Ãâ °¡´É

 

Á¤Àû ¸â¹ö ÇÔ¼ö´Â ƯÁ¤ÇÑ °´Ã¼¿¡ ÀÇÇØ È£ÃâµÇ´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î ¼û°ÜÁø Àμö this°¡ Àü´ÞµÇÁö ¾Ê´Â´Ù. Ŭ·¡½º¿¡ ´ëÇÑ ÀÛ¾÷À» Çϱ⠶§¹®¿¡ ¾î¶² °´Ã¼°¡ ÀÚ½ÅÀ» È£ÃâÇß´ÂÁö ±¸ºÐÇÒ Çʿ䰡 ¾øÀ¸¸ç µû¶ó¼­ È£ÃâÇÑ °´Ã¼¿¡ ´ëÇÑ Á¤º¸µµ ÇÊ¿ä¾ø´Ù. ±×·¡¼­ Á¤Àû ¸â¹ö ÇÔ¼ö´Â Á¤Àû ¸â¹ö¸¸ ¾×¼¼½ºÇÒ ¼ö ÀÖÀ¸¸ç ÀÏ¹Ý ¸â¹ö(ºñÁ¤Àû ¸â¹ö)´Â ÂüÁ¶ÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé ÀÏ¹Ý ¸â¹ö ¾Õ¿¡´Â ¾Ï½ÃÀûÀ¸·Î this->°¡ ºÙ´Âµ¥ Á¤Àû ¸â¹ö ÇÔ¼ö´Â this¸¦ Àü´Þ¹ÞÁö ¾Ê±â ¶§¹®ÀÌ´Ù. Á¤Àû ¸â¹ö ÇÔ¼öÀÎ InitNum¿¡¼­ ºñÁ¤Àû ¸â¹öÀÎ Value¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù.

 

static void InitNum() {

     Num=0;

     Value=5;

}

 

ÀÌ Äڵ带 ÄÄÆÄÀÏÇϸé Á¤Àû ¸â¹ö ÇÔ¼ö¿¡¼­ Value¸¦ ºÒ¹ýÀ¸·Î ÂüÁ¶Çß´Ù´Â ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù. InitNumÀÇ º»Ã¼¿¡¼­ Value¸¦ ĪÇÏ¸é ´©±¸ÀÇ ValueÀÎÁö¸¦ ÆÇ´ÜÇÒ ¼ö ¾ø´Ù. ¶ÇÇÑ Á¤Àû ¸â¹ö ÇÔ¼ö´Â »ý¼ºµÈ °´Ã¼°¡ ÀüÇô ¾ø¾îµµ È£ÃâÇÒ ¼ö Àִµ¥ À̶§ Value´Â ¾Æ¿¹ Á¸ÀçÇÏÁöµµ ¾Ê´Â´Ù. ºñÁ¤Àû ¸â¹ö ÇÔ¼öµµ È£ÃâÇÒ ¼ö ¾øÀ¸¸ç ¿À·ÎÁö Á¤Àû ¸â¹ö¸¸ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.