36-1.iostream

ÀÔÃâ·Â ½ºÆ®¸²Àº C++ÀÌ ¶óÀ̺귯¸® Â÷¿ø¿¡¼­ Á¦°øÇÏ´Â ±âº»ÀûÀÎ ÀÔÃâ·Â ¹æ¹ýÀ̸ç 25Àå¿¡¼­ °£´ÜÇÑ »ç¿ë ¹æ¹ýÀ» ¼³¸íÇÑ ¹Ù ÀÖ´Ù. ÀÌ Àå¿¡¼­´Â ÀÔÃâ·Â ½ºÆ®¸²ÀÇ »ó¼¼ÇÑ »ç¿ë ¹æ¹ý°ú ¿©·¯ °¡Áö ÀÔÃâ·Â ¿É¼Ç, ±×¸®°í ÆÄÀÏ ÀÔÃâ·Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¼ °ÍÀÌ´Ù. ÀÔÃâ·ÂÀº ¾ð¾îÀÇ °¡Àå ±âº»ÀûÀÎ ±â´ÉÀÓ¿¡µµ ºÒ±¸ÇÏ°í ÀÌ Ã¥Àº µÞºÎºÐ¿¡¼­ µû·Î ´Ù·ç°í Àִµ¥ ³ª¸§´ë·Î ÀÌÀ¯°¡ ÀÖ´Ù.

¿ì¼± ÄÜ¼Ö ÇÁ·ÎÁ§Æ®ÀÇ ½Ç¿ë¼ºÀÌ Å©°Ô ¶³¾îÁö±â ¶§¹®¿¡ ÀÔÃâ·Â ½ºÆ®¸²À» ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡¼­ ¾µ ÀÏÀÌ °ÅÀÇ ¾ø°í ¼³»ç ÀÖ´Ù ÇÏ´õ¶óµµ cout°ú << ¿¬»êÀÚ¸¸ ¾Ë¸é ±âº»ÀûÀÎ ÀÔÃâ·ÂÀ» ÇÒ ¼ö ÀÖÀ¸¸ç ´ëüÇÒ ¼ö ÀÖ´Â ¹æ¹ýµéµµ ¸¹Àº ÆíÀÌ´Ù. ±×º¸´Ù ´õ Áß¿äÇÑ ÀÌÀ¯´Â C++ÀÇ ÀÔÃâ·Â ¹æ¹ýÀÌ »ý°¢º¸´Ù ÈξÀ ´õ º¹ÀâÇؼ­ ¹è¿ì±â ±î´Ù·Ó´Ù´Â Á¡ÀÌ´Ù. ÅÛÇø´ ±â¹ÝÀε¥´Ù C++ÀÇ °ÅÀÇ ¸ðµç ¹®¹ýµéÀ» ÃÑ µ¿¿øÇؼ­ ¸¸µé¾îÁ® Àֱ⠶§¹®¿¡ ³»ºÎ±îÁö ¼Ó¼ÓµéÀÌ ÀÌÇØÇϱâ´Â ¹«Ã´ ¾î·Æ´Ù. °Ô´Ù°¡ Ç¥ÁØ È®¸³ÀüÀÇ ¸¶±¸ÀâÀÌ½Ä È®ÀåÀ¸·Î ÀÎÇØ ÄÄÆÄÀÏ·¯¸¶´Ù µ¿ÀÛÀÌ Á¶±Ý¾¿ ´Þ¶óÁö±âµµ ÇÏ°í ÇÑ°¡Áö ÀÏÀ» Çϴµ¥ ¿©·¯ °¡Áö ¹æ¹ýµéÀÌ Á¸ÀçÇؼ­ °£°áÇÏÁöµµ ¾Ê´Ù.

CÀÇ printf¿Í ºñ±³ÇØ º¼ ¶§ ¾ÈÁ¤ÀûÀ̱â´Â ÇÏÁö¸¸ ÆíÀǼº¸é¿¡¼­ ÈξÀ ´õ ¶³¾îÁö¸ç ¼º´É»óÀÇ ÀÌÁ¡µµ ¾ø´Ù. ÀÌ·± º¹ÀâÇÑ ÁÖÁ¦´Â C++À» ¸· ¹è¿ì±â ½ÃÀÛÇÏ´Â »ç¶÷µé¿¡°Ô Èï¹Ì¸¦ ÀÒ°Ô ¸¸µé À§ÇèÀÌ ÀÖ¾î °¡±ÞÀû µÚÂÊ¿¡ ¹èÄ¡Çß´Ù. ´çÀå ÀÌ ³»¿ëÀÌ ²À ÇÊ¿äÄ¡ ¾Ê´Ù¸é ÀÔÃâ·Â ½ºÆ®¸²¿¡ ´ëÇؼ­´Â ±×¸® ÈûÀ» ½ñÀ» ÇÊ¿ä°¡ ¾ø´Ù. ¿¹¸¦ µé¾î À©µµ¿ìÁî ȯ°æÀ¸·Î ¹Ù·Î ³Ñ¾î°¥ °èȹÀ̶ó¸é Àå´ãÄÁµ¥ coutÀ» ¾µ ±âȸ´Â ¾øÀ» °ÍÀÌ´Ù. coutÀ» óÀ½ ¸¸µé ¶§¿Í ÇöÀçÀÇ È¯°æÀº ÀüÇô ¸ÂÁö ¾Ê´Ù. ÀÌ Àý¿¡¼­´Â Áö³ªÄ¡°Ô »ó¼¼ÇÑ ºÎºÐÀº »ý·«ÇÏ°í ¿ä¾àÀûÀ¸·Î ¼³¸íÀ» Àü°³ÇÑ´Ù.

36-1-°¡.ÀÔÃâ·Â ½ºÆ®¸²ÀÇ ±¸Á¶

C++ÀÇ Ç¥ÁØ ÀÔÃâ·Â ½ºÆ®¸²Àº ¿©·¯ °¡Áö º¹ÀâÇÑ »óȲ¿¡ ´ëÇؼ­µµ ÀÔÃâ·ÂÀ» ó¸®ÇÒ ¼ö ÀÖµµ·Ï È®Àå °¡´ÉÇÑ Å¬·¡½º °èÃþÀ» ±¸¼ºÇÏ°í ÀÖ´Ù. ´ÙÀ½ ±×¸²Àº ºñÁÖ¾ó C++ 7.0ÀÇ Çì´õ ÆÄÀÏÀ» ±âÁØÀ¸·Î ±×·Á º» °£´ÜÇÑ Å¬·¡½º °èÃþµµÀÌ´Ù. ´Ù¸¥ ÄÄÆÄÀÏ·¯¿¡¼­´Â Á¶±Ý¾¿ ´Þ¶óÁú ¼öµµ ÀÖ´Ù.

ios_base Ŭ·¡½º´Â ÀÔÃâ·Â°ú °ü·ÃµÈ ¿©·¯ °¡Áö »ó¼ö³ª Ç÷¡±×µéÀ» °¡Áö¸ç ÀÌ Å¬·¡½º·ÎºÎÅÍ ÀÔÃâ·Â Ŭ·¡½ºµéÀÌ ÆÄ»ýµÈ´Ù. Ãâ·Â Ŭ·¡½ºÀÎ basic_ostreamÀÇ ¼±¾ð¹®À» º¸¸é ´ÙÀ½°ú °°ÀÌ µÇ¾î ÀÖ´Ù.

 

template<class _Elem, class _Traits>

class basic_ostream : virtual public basic_ios<_Elem, _Traits>

{

     ....

 

º¸´Ù½ÃÇÇ ½ÇÁ¦ Ŭ·¡½º°¡ ¾Æ´Ï¶ó ´ÙÀ½°ú °°Àº µÎ °³ÀÇ Àμö¸¦ ÃëÇϴ Ŭ·¡½º ÅÛÇø´ÀÌ´Ù.

 

_Elem

Ãâ·ÂÇÏ´Â µ¥ÀÌÅÍÀÇ ±âº» ŸÀÔÀÌ´Ù. Åë»ó ¹®ÀÚ¿­ ÇüÅ·ΠÃâ·ÂµÇ¹Ç·Î °ú°Å¿¡´Â char ŸÀÔÀÇ ¹®ÀÚµéÀ» Ãâ·ÂÇßÀ¸³ª ¸ðµç ¹®ÀÚ¸¦ 16ºñÆ® Äڵ带 Ç¥ÇöÇÏ´Â À¯´ÏÄÚµå ȯ°æ¿¡¼­´Â wchar_t°¡ µÉ ¼öµµ ÀÖ´Ù. wchar_t´Â unsigned short·Î Á¤ÀǵǾî ÀÖ´Ù. ¸¸¾à ¹Ì·¡¿¡ ¼¼»óÀÇ ¸ðµç ¹®ÀÚ¸¦ 32ºñÆ®·Î Ç¥ÇöÇÏ´Â ÄÚµå ü°è°¡ ³ª¿Â´Ù¸é _ElemÀº unsigned longÀÌ µÉ ¼öµµ ÀÖÀ¸¸ç basic_ostream ÅÛÇø´Àº ÀÌ·± ŸÀÔ¿¡ ´ëÇÑ ÁöÁ¤À» Àμö·Î ¼±ÅÃÇϵµ·Ï ÃæºÐÈ÷ ÀϹÝÀûÀ¸·Î ¼³°èµÇ¾î ÀÖ´Ù.

_Traits

ÀÌ Àμö´Â Ãâ·Â ¹®ÀÚ¿­ÀÇ ÇüÅÂ¿Í °ü¸® ¹æ¹ýÀ» Á¤ÀÇÇÏ´Â °´Ã¼ÀÌ´Ù. º¸ÆíÀûÀ¸·Î ³Î Á¾·á ¹®ÀÚ¿­À» ¸¹ÀÌ »ç¿ëÇϴµ¥ ½ÃÀÛ ¹øÁö¿¡¼­ºÎÅÍ ¹®ÀÚ°¡ ³ªÅ¸³ª¸ç ³¡Àº NULL ¹®ÀڷΠǥÇöÇÏ´Â ¹æ½ÄÀÌ´Ù. C/C++À» ÁÖ·Î »ç¿ëÇÏ´Â »ç¶÷µé¿¡°Ô´Â ÀÌ ¹®ÀÚ¿­ ÇüÅ°¡ ¾ÆÁÖ Àͼ÷ÇÏ°ÚÁö¸¸ ÀÌ´Â ¹®ÀÚ¿­À» Ç¥ÇöÇÏ´Â ¿©·¯ °¡Áö ¹æ¹ý ÁßÀÇ ÇϳªÀÏ »ÓÀÌ´Ù. º£ÀÌÁ÷ÀÇ ±âº» ¹®ÀÚ¿­ÀÎ BSTR°ú ÆĽºÄ®ÀÇ ¹®ÀÚ¿­ ŸÀÔÀº ³Î Á¾·á ¹®ÀÚ¸¦ »ç¿ëÇÏ´Â ´ë½Å ¼±µÎ¿¡ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ¸ÕÀú ¹àÈ÷°í ¹®ÀÚ¿­À» µÚ¿¡ ÀúÀåÇÑ´Ù. ´ÙÀ½Àº "Format"À̶ó´Â ¹®ÀÚ¿­À» Ç¥ÇöÇÏ´Â µÎ °¡Áö ¹æ¹ýÀÌ´Ù.

³Î Á¾·á ¹®ÀÚ¿­¿¡ Àͼ÷ÇÑ »óȲ¿¡¼­ BSTR Æ÷¸ËÀº ¾ÆÁÖ ÀÌ»óÇÏ°Ô º¸ÀÌ°ÚÁö¸¸ µÎ ¹æ½Ä ¸ðµÎ ÀÏÀå ÀÏ´ÜÀÌ ÀÖ´Ù. BSTRÀº ±æÀÌ Á¤º¸°¡ Á¦ÀÏ ¾Õ¿¡ ÀÖÀ¸¹Ç·Î ÀÏÀÏÀÌ ¼¼ º¸Áö ¾Ê¾Æµµ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ±Ý¹æ ¾Ë ¼ö ÀÖ´Ù´Â °ÍÀÌ ÀåÁ¡ÀÌ°í ³Î Á¾·á ¹®ÀÚ¿­Àº ½ÃÀÛ ¹øÁö¿¡ ¹®ÀÚ¿­ÀÌ ¹Ù·Î µé¾î ÀÖÀ¸¹Ç·Î Æ÷ÀÎÅ͸¦ ÅëÇØ ¹®ÀÚ¿­À» ´Ù·ç±â ½±´Ù. ¹Ý¸é ³Î Á¾·á ¹®ÀÚ¿­Àº ±æÀ̸¦ Á¶»çÇÏ´Â ¼Óµµ°¡ ¹«Ã´ ´À¸°µ¥ ³Î ¹®ÀÚ°¡ ³ª¿Ã ¶§±îÁö ¸Þ¸ð¸®ÀÇ µÚÂÊÀ» ÀÏÀÏÀÌ Àо´Â ¼ö¹Û¿¡ ¾ø´Ù.

ÀÌ µÎ °¡Áö Æ÷¸Ë ¿Ü¿¡µµ ¹®ÀÚ¿­À» Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¹«¼öÈ÷ ¸¹À» °ÍÀÌ´Ù. ÀÌ·± ¹æ½ÄÀ» ÁöÁ¤ÇÏ´Â Àμö°¡ ¹Ù·Î _TraitsÀε¥ ÀÌ °´Ã¼°¡ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ °ü¸®ÇÏ´Â ¹æ¹ý, ¹®ÀÚ°£ÀÇ ¼ø¼­¸¦ Á¤ÇÏ´Â ¹æ¹ý µîÀ» °áÁ¤ÇÑ´Ù. µðÆúÆ®ÀÎ char_Traits<_Elem> °´Ã¼´Â ¿ì¸®¿¡°Ô ÀÌ¹Ì Àͼ÷ÇÑ ³Î Á¾·á ¹®ÀÚ¿­À» °ü¸®ÇÏÁö¸¸ ¿øÇÑ´Ù¸é ´Ù¸¥ °ÍÀ¸·Î ¹Ù²Ü ¼öµµ ÀÖ´Ù. ±×·¡¼­ ÀÔÃâ·Â °´Ã¼°¡ ´Ù·ç´Â ¹®ÀÚ¿­Àº ¹Ýµå½Ã NULL·Î ³¡³ªÁö ¾Ê¾Æµµ µÇ¸ç ƯÁ¤ÇÑ ÄÚµå ü°è¿¡ Á¾¼ÓµÇÁöµµ ¾Ê´Â´Ù.

 

basic_ostream Ŭ·¡½º´Â Àμö·Î ÁÖ¾îÁø ŸÀÔÀ» ¿ä¼Ò·Î °¡Áö´Â ¹®ÀÚ¿­À» Ç¥ÇöÇ쵂 ¹®ÀÚ¿­À» ´Ù·ç´Â ¹æ½ÄÀº _Traits°´Ã¼¿¡ µû¶ó ´Þ¶óÁø´Ù. ÀÌ Å¬·¡½º·ÎºÎÅÍ µÎ °³ÀÇ Æ¯¼öÈ­µÈ Ŭ·¡½º°¡ Á¤ÀǵȴÙ.

 

typedef basic_ostream<char, char_traits<char> > ostream;

typedef basic_ostream<wchar_t, char_traits<wchar_t> > wostream;

 

ostreamÀº char ŸÀÔÀÇ ¹®ÀÚ¿­À» Ãâ·ÂÇϴ Ŭ·¡½ºÀ̸ç char_traits<char> °´Ã¼´Â C¿¡¼­ º¸ÆíÀûÀ¸·Î »ç¿ëµÇ´Â ³Î Á¾·á ¹®ÀÚ¿­À» °ü¸®ÇÏ´Â °´Ã¼ÀÌ´Ù. wostreamÀº wchar_t ŸÀÔÀÇ ¹®ÀÚ¿­, Áï À¯´ÏÄÚµå ¹®ÀÚ¿­À» Ãâ·ÂÇϴ Ŭ·¡½ºÀÌ´Ù. °ú°Å Ç¥ÁØÀÌ È®¸³µÇ±â Àü¿¡´Â ostreamÀÌ ÀÏ¹Ý Å¬·¡½º¿´Áö¸¸ À¯´ÏÄڵ带 ´Ù·ê ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ basic_ostream ºÎ¸ð Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹Þµµ·Ï ¼öÁ¤µÇ¾ú´Ù. Ç¥ÁØ ÀԷµµ ¸¶Âù°¡Áö·Î basic_istream ºÎ¸ð Ŭ·¡½º·ÎºÎÅÍ ¾È½Ã, À¯´ÏÄڵ带 ÀԷ¹޴ µÎ °³ÀÇ Æ¯¼öÈ­µÈ Ŭ·¡½º¸¦ Á¤ÀÇÇÑ´Ù. Ç¥ÁØ ¶óÀ̺귯¸®´Â 8°³ÀÇ ÀÔÃâ·Â °´Ã¼¸¦ ¹Ì¸® Á¤ÀÇÇϴµ¥ iostream Çì´õ ÆÄÀÏÀ» º¸¸é ´ÙÀ½°ú °°Àº ¼±¾ð¹®À» º¼ ¼ö ÀÖ´Ù.

 

extern istream cin;

extern ostream cout;

extern ostream cerr;

extern ostream clog;

extern wistream wcin;

extern wostream wcout;

extern wostream wcerr;

extern wostream wclog;

 

cinÀÌ Ç¥ÁØ ÀÔ·Â °´Ã¼À̸ç coutÀÌ Ç¥ÁØ Ãâ·Â °´Ã¼ÀÌ´Ù. cerrÀº Ç¥ÁØ ¿¡·¯ °´Ã¼ÀÌµÇ ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾Ê°í °ð¹Ù·Î Ãâ·ÂÀ» ³» º¸³½´Ù´Â Á¡ÀÌ cout°ú ´Ù¸£¸ç clog´Â µð¹ö±ëÀ» À§ÇÑ ±â·Ï °´Ã¼ÀÌ¸ç ¹öÆÛ¸¦ »ç¿ëÇÑ´Ù. cerr°ú clog·ÎÀÇ Ãâ·ÂÀº µÑ ´Ù ¸ð´ÏÅÍ·Î ³ª°¡°Ô µÇ¾î ÀÖÁö¸¸ ÀçÁöÇâµÉ °æ¿ì ´Ù¸¥ ÀåÄ¡·Î Ãâ·ÂÀ» ³» º¸³¾ ¼öµµ ÀÖ´Ù. ¾Æ·¡ÂÊÀÇ w°¡ ºÙÀº °´Ã¼µéÀº À¯´ÏÄÚµå ÀÔÃâ·Â °´Ã¼µéÀÌ´Ù.

Ç¥ÁØ ÀÔÃâ·Â °´Ã¼µéÀº È¿À²ÀûÀÎ ÀÔÃâ·Â °ü¸®¸¦ À§ÇØ ³»ºÎÀûÀ¸·Î ¹öÆÛ¸¦ »ç¿ëÇÑ´Ù. ÀÔÃâ·ÂÇÒ ¶§¸¶´Ù ÇÑ ¹®ÀÚ¾¿ ÀåÄ¡·Î Á÷Á¢ ÀÔÃâ·ÂÇÏ¸é ´À¸®±â ¶§¹®¿¡ ¹öÆÛ°¡ ÇÊ¿äÇÏ´Ù. ÀÌ ¹öÆÛ´Â streambuf¶ó´Â ³»ºÎ Ŭ·¡½º¿¡ ÀÇÇØ ÀÚµ¿À¸·Î °ü¸®µÈ´Ù.