27-4-´Ù.mutable

mutableÀº C++¿¡ »õ·Î Ãß°¡µÈ Å°¿öµåÀε¥ ¿µ¾î ¶æ ±×´ë·Î ¹ø¿ªÇÏ¸é º¯´ö½º·´´Ù´Â ¶æÀÌ´Ù. »ó¼öÀÇ ¹Ý´ë Àǹ̷Π»ç¿ëµÇ¸ç "¼öÁ¤ °¡´É" Á¤µµ·Î ÀÌÇØÇÏ¸é µÈ´Ù. mutable·Î ÁöÁ¤µÈ ¸â¹ö´Â »ó¼ö ÇÔ¼ö³ª »ó¼ö °´Ã¼¿¡ ´ëÇؼ­µµ °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. °´Ã¼ÀÇ »óŸ¦ Ç¥ÇöÇÏ´Â Áß¿äÇÑ ¸â¹ö°¡ ¾Æ´Ò ¶§ ÀÌ ¼Ó¼ºÀ» »ç¿ëÇÑ´Ù. Àß ¾²ÀÌÁö ¾ÊÀ¸¹Ç·Î °£´ÜÇÑ ¿¹Á¦ Çϳª¸¸ ¸¸µé¾î º¸ÀÚ.

 

¿¹ Á¦ : mutable

#include <Turboc.h>

 

class Some

{

private:

     mutable int v;

 

public:

     Some() { }

     void func() const { v=0; }

};

 

void main()

{

     Some S;

     S.func();

 

     const Some T;

     T.func();

}

 

func ÇÔ¼ö´Â »ó¼ö ¸â¹ö ÇÔ¼ö·Î ¼±¾ðµÇ¾úÁö¸¸ ¸â¹ö º¯¼ö vÀÇ °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. v°¡ »ó¼ö ¸â¹ö ÇÔ¼ö¿¡¼­µµ °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Â mutable·Î ¼±¾ðµÇ¾ú±â ¶§¹®ÀÌ´Ù. ¸¸¾à mutableÀ» »© ¹ö¸®¸é »ó¼ö ÇÔ¼ö¿¡¼­´Â ¸â¹ö°ªÀ» º¯°æÇÒ ¼ö ¾ø´Ù´Â ¿¡·¯·Î 󸮵ȴÙ. T´Â »ó¼ö °´Ã¼·Î ¼±¾ðµÇ¾úÁö¸¸ ¸¶Âù°¡Áö·Î v¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù.

mutableÀº »ó¼ö ¸â¹ö ÇÔ¼ö³ª »ó¼ö °´Ã¼ÀÇ »ó¼ö¼ºÀ» ¿ÏÀüÈ÷ ¹«½ÃÇØ ¹ö¸°´Ù. º¯¼ö´Â º»ÁúÀûÀ¸·Î °ªÀ» ¸¶À½´ë·Î ¹Ù²Ü ¼ö ÀÖÁö¸¸ const¿¡ ÀÇÇØ °ª º¯°æÀÌ ±ÝÁöµÈ´Ù. mutableÀº ÀÌ·± constÀÇ °ª º¯°æ ±ÝÁö ±â´ÉÀ» ±ÝÁöÇÏ¿© °ª º¯°æÀ» ´Ù½Ã Çã¿ëÇÏ´Â º¹ÀâÇÑ ÁöÁ¤À» ÇÑ´Ù. µµ´ëü ÀÌ·± ÁöÁ¤ÀÌ ¿Ö ÇÊ¿äÇÒ±î?

°´Ã¼¿¡ »ó¼ö¼ºÀ» ÁÖ´Â ÀÌÀ¯´Â °´Ã¼ÀÇ »óÅ°¡ ¿ì¹ßÀûÀ¸·Î º¯°æµÇ´Â °ÍÀ» ±ÝÁöÇÏ¿© ¾ÈÁ¤¼ºÀ» ³ôÀÌÀÚ´Â ÃëÁöÀÌ´Ù. ±×·±µ¥ ¶§·Î´Â °´Ã¼ÀÇ ¸â¹öÀ̸鼭µµ °´Ã¼ÀÇ »óÅ¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â ¸â¹ö°¡ Á¸ÀçÇϱ⵵ Çϴµ¥ ¿¹¸¦ µé¾î °ª ±³È¯À» À§ÇÑ Àӽà º¯¼ö°¡ ÀÌ¿¡ ÇØ´çÇÑ´Ù. ¶Ç´Â i, j°°Àº Åë»óÀûÀÎ ·çÇÁ Á¦¾î º¯¼öµµ °´Ã¼ÀÇ »óŶó°í º¼ ¼ö ¾øÀ¸¸ç µð¹ö±ëÀ» À§ÇØ ÀÓ½ÃÀûÀ¸·Î Ãß°¡µÈ ¸â¹öµµ mutableÀ̾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î °´Ã¼ »óŸ¦ Ãâ·ÂÇØ º¸±â À§ÇÑ ¹®ÀÚ¿­ ¹öÆÛ¸¦ ¸â¹ö·Î Àá½Ã ¼±¾ðÇß´Ù¸é ÀÌ ¹öÆÛ´Â °´Ã¼ÀÇ ÁÖ¿ä ¸â¹ö º¯¼ö¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

¿¹ Á¦ : mutableinfo

#include <Turboc.h>

 

class Position

{

private:

     int x,y;

     char ch;

     mutable char info[256];

 

public:

     Position(int ax, int ay, char ach) { x=ax;y=ay;ch=ach; }

     void OutPosition() const { gotoxy(x, y);putch(ch); }

     void MoveTo(int ax, int ay) { x=ax; y=ay; }

     void MakeInfo() const { sprintf(info,"x=%d, y=%d, ch=%c",x,y,ch); }

     void OutInfo() const { puts(info); }

};

 

void main()

{

     const Position Here(11,22,'Z');

     Here.MakeInfo();

     Here.OutInfo();

}

 

°´Ã¼ÀÇ ÇöÀç »óŸ¦ ¹®ÀÚ¿­·Î Ãâ·ÂÇϱâ À§ÇØ info¶ó´Â ¹®ÀÚ¿­ ¹öÆÛ¸¦ ¸â¹ö º¯¼ö·Î ¼±¾ðÇßÀ¸¸ç ÀÌ ¹öÆÛ¿¡ »óŸ¦ Á¶¸³ÇÏ´Â MakeInfo¿Í OutInfo ÇÔ¼ö¸¦ ¼±¾ðÇß´Ù. Position Ŭ·¡½º´Â ¿ö³« °£´ÜÇؼ­ »óŸ¦ Á¶»çÇÏ´Â °ÍÀÌ ¾ÆÁÖ ½±Áö¸¸ º¹ÀâÇÑ Å¬·¡½º´Â »óÅ°¡ ¼ö½Ã·Î º¯Çϸç ƯÁ¤ ½ÃÁ¡ÀÇ »óŸ¦ Áï½Ã Á¶»çÇϱâ Èûµç °æ¿ìµµ ÀÖ¾î ¹Ì¸® Á¶»çÇØ µÎ¾î¾ß ÇÑ´Ù. À̶§ info´Â °´Ã¼ ÀÚüÀÇ »óÅ°¡ ¾Æ´Ï¶ó ¼Óµµ Çâ»óÀ» À§ÇÑ ÀÓ½ÃÀûÀΠij½Ã Á¤º¸ÀÏ »ÓÀÌ¸ç ¿øÇÑ´Ù¸é ¾ðÁ¦µçÁö ´Ù½Ã Á¶»çÇÒ ¼ö ÀÖ´Ù. °´Ã¼ÀÇ ¼Ó¼ºÀÌ ¾Æ´Ñ ¸â¹ö¿¡ ´ëÇØ ¿¹¿ÜÀûÀ¸·Î ¾Æ¹«³ª °ªÀ» º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ÀåÄ¡°¡ ¹Ù·Î mutableÀÌ´Ù. À§ ¿¹Á¦¿¡¼­ info°¡ mutableÀÌ ¾Æ´Ï¶ó¸é MakeInfo´Â »ó¼ö ¸â¹ö ÇÔ¼ö°¡ µÉ ¼ö ¾øÀ¸¸ç »ó¼ö °´Ã¼¿¡ ´ëÇؼ­´Â Á¤º¸¸¦ Á¶»çÇϰųª Ãâ·ÂÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇØÁú °ÍÀÌ´Ù.

 

ÀÌ»óÀ¸·Î »ó¼ö ¸â¹ö¿¡ ´ëÇØ ¿¬±¸ÇØ º¸¾Ò´Ù. »ó¼öÀÇ °³³äÀÌ µµÀÔµÈ ÀÌÀ¯´Â º¯°æÇÏÁö ¸»¾Æ¾ß ÇÒ °ªÀ» À߸ø º¯°æÇÏ´Â ¿ì¹ßÀûÀÎ »ç°í¸¦ ¹æÁöÇÏ¿© °ñÄ¡¾ÆÇ ¹ö±×ÀÇ ¿øÀÎÀ» ¿øõÀûÀ¸·Î Â÷´ÜÇϱâ À§Çؼ­ÀÌ´Ù. const Å°¿öµå´Â ÄÄÆÄÀÏ·¯°¡ ÄÄÆÄÀÏÀ» ÇÒ ¶§¸¸ ÂüÁ¶ÇϹǷΠ°á°ú ÇÁ·Î±×·¥ÀÇ Å©±â³ª ¼º´É¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ÄÄÆÄÀÏ·¯¿¡°Ô °¡±ÞÀû »ó¼¼ÇÑ Á¤º¸¸¦ Á¦°øÇÏ¸é ½ÇÇàÁß¿¡ ¿ì¿¬È÷ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¡·¯¸¦ ÄÄÆÄÀÏÇÒ ¶§ ¹Ì¸® ¾Ë ¼ö ÀÖ°Ô µÈ´Ù. ÄÄÆÄÀÏ ¿¡·¯´Â ¹ß°ß Áï½Ã ¿øÀÎÀ» ÆľÇÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ½ÇÇàÁßÀÇ ¿¡·¯ º¸´Ù ÈξÀ ´õ ¼öÁ¤Çϱ⠽±°í ¸»½éÀ» ºÎ¸± ¿©Áöµµ ³·´Ù.

°ªÀ» º¯°æÇÏÁö ¾Ê´Â ¸â¹ö ÇÔ¼ö³ª ÇÔ¼ö ³»ºÎ¿¡¼­ º¯°æµÇÁö ¾Ê´Â Àμö¿¡ ´ëÇØ ÀÏÀÏÀÌ const¸¦ ºÙÀÌ´Â °ÍÀº ¹«Ã´À̳ª ¹ø°Å·Î¿î ÀÏÀÌ´Ù. ÀÏ´Ü »ó¼ö¸¦ »ç¿ëÇϸé ÇÁ·ÎÁ§Æ®³»ÀÇ ¸ðµç ÇÔ¼öµéÀÌ »ó¼ö ±ÔÄ¢À» ÁöÅ°µµ·Ï ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù. °¡·É func(int a) ÇÔ¼ö°¡ a¸¦ º¯°æÇÏÁö ¾Ê´Â´Ù ÇÏ¿© func(const int a)·Î ¿øÇüÀ» ¹Ù²Ù¸é func ÇÔ¼ö°¡ a¿Í ÇÔ²² È£ÃâÇÏ´Â ÇÔ¼öµéµµ »ó¼ö¸¦ ¹Þ¾Æ µéÀ̵µ·Ï ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù. ±× ¿Ü¿¡ »ó¼ö¸¦ »ç¿ëÇÏ¸é ±ÍÂú¾ÆÁö´Â Á¡µéµµ ¸¹ÀÌ ÀÖ´Ù.

ÇÏÁö¸¸ ºÐ¸íÇÑ °ÍÀº óÀ½ºÎÅÍ ¿øÄ¢´ë·Î »ó¼ö ÁöÁ¤À» Á¦´ë·Î ÇÏ°Ô µÇ¸é È®½ÇÈ÷ ÇÁ·Î±×·¥ÀÇ ¾ÈÀü¼ºÀÌ ³ô¾ÆÁø´Ù´Â °ÍÀÌ´Ù. ¹Ù²Ü ¼ö ¾ø´Â °ª ¶Ç´Â »óȲ¿¡ ´ëÇØ const¸¦ ºÙ¿© ¹Ì¸® ½Å°íÇØ µÎ¸é °³¹ßÀÚÀÇ ½Ç¼ö³ª ³í¸®ÀûÀÎ ¼³°è ¿À·ù¿¡ ÀÇÇÑ »ç°í ¹ß»ý½Ã ÄÄÆÄÀÏ·¯°¡ Àû±ØÀûÀ¸·Î ½Å¼ÓÇÏ°Ô À߸øÀ» ¾Ë·Á ÁØ´Ù.