- ÇöÀç À§Ä¡
- home > ÄÄÇ»ÅÍ¡¤ICT¡¤¾îÇÐ > ÄÄÇ»ÅÍ¡¤IT µµ¼ > ÇÁ·Î±×·¡¹Ö/¾ð¾î > Effective Modern C++ (ÀÌÆåƼºê ¸ð´ø C++)[ÀλçÀÌÆ®]
[Effective Modern C (ÀÌÆåƼºê ¸ð´ø C )]Àº C 11°ú C 14¸¦ ÀÌ¿ëÇؼ, Áï Çö´ëÀûÀÎ C À» ÀÌ¿ëÇؼ ÁøÁ¤À¸·Î ÈǸ¢ÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. Ã¥¿¡¼´Â Áß°ýÈ£ ÃʱâÄ¡, noexcept ¸í¼¼, ¿Ïº® Àü´Þ, ¶È¶ÈÇÑ Æ÷ÀÎÅÍ »ý¼º ÇÔ¼öÀÇ Àå´ÜÁ¡, std::move¿Í std::forward, ¿À¸¥°ª ÂüÁ¶, º¸Æí ÂüÁ¶ »çÀÌÀÇ °ü°è, ¸íÈ®ÇÏ°í Á¤È®Çϸç È¿°úÀûÀÎ ¶÷´Ù Ç¥Çö½ÄÀ» ÀÛ¼ºÇÏ´Â ±â¹ýµé, std::atomic°ú volatileÀÇ Â÷ÀÌ¿Í °¢°¢ÀÇ »ç¿ë¹ý ¹× C µ¿½Ã¼º API¿ÍÀÇ °ü°è, ¡®±¸½Ä¡¯ C (Áï C 98) ÇÁ·Î±×·¡¹Ö¿¡¼ÀÇ ¸ð¹ü °üÇà Áß Çö´ëÀûÀÎ C ¼ÒÇÁÆ®¿þ¾î °³¹ß¿¡ ¸Â°Ô °íÃÄ¾ß ÇÒ °Íµé¿¡ ´ëÇØ ´Ù·ç°í ÀÖ´Ù.
ÀúÀÚ: ½ºÄà ¸¶À̾ (ÁöÀºÀÌ), ·ù±¤ (¿Å±äÀÌ)
1Àå Çü½Ä ¿¬¿ª
Ç׸ñ 1: ÅÛÇø´ Çü½Ä ¿¬¿ª ±ÔÄ¢À» ¼÷ÁöÇ϶ó
Ç׸ñ 2: autoÀÇ Çü½Ä ¿¬¿ª ±ÔÄ¢À» ¼÷ÁöÇ϶ó
Ç׸ñ 3: decltypeÀÇ ÀÛµ¿ ¹æ½ÄÀ» ¼÷ÁöÇ϶ó
Ç׸ñ 4: ¿¬¿ªµÈ Çü½ÄÀ» ÆľÇÇÏ´Â ¹æ¹ýÀ» ¾Ë¾ÆµÎ¶ó
2Àå auto
Ç׸ñ 5: ¸í½ÃÀû Çü½Ä ¼±¾ðº¸´Ù´Â auto¸¦ ¼±È£Ç϶ó
Ç׸ñ 6: auto°¡ ¿øÄ¡ ¾ÊÀº Çü½ÄÀ¸·Î ¿¬¿ªµÉ ¶§¿¡´Â ¸í½ÃÀû Çü½ÄÀÇ ÃʱâÄ¡¸¦ »ç¿ëÇ϶ó
3Àå Çö´ëÀû C ¿¡ ÀûÀÀÇϱâ
Ç׸ñ 7: °´Ã¼ »ý¼º ½Ã °ýÈ£(())¿Í Áß°ýÈ£({})¸¦ ±¸ºÐÇ϶ó
Ç׸ñ 8: 0°ú NULLº¸´Ù nullptr¸¦ ¼±È£Ç϶ó
Ç׸ñ 9: typedefº¸´Ù º°Äª ¼±¾ðÀ» ¼±È£Ç϶ó
Ç׸ñ 10: ¹üÀ§ ¾ø´Â enumº¸´Ù ¹üÀ§ ÀÖ´Â enumÀ» ¼±È£Ç϶ó
Ç׸ñ 11: Á¤ÀǵÇÁö ¾ÊÀº ºñ°ø°³ ÇÔ¼öº¸´Ù »èÁ¦µÈ ÇÔ¼ö¸¦ ¼±È£Ç϶ó
Ç׸ñ 12: ÀçÁ¤ÀÇ ÇÔ¼öµéÀ» override·Î ¼±¾ðÇ϶ó
Ç׸ñ 13: iteratorº¸´Ù const_iterator¸¦ ¼±È£Ç϶ó
Ç׸ñ 14: ¿¹¿Ü¸¦ ¹æÃâÇÏÁö ¾ÊÀ» ÇÔ¼ö´Â noexcept·Î ¼±¾ðÇ϶ó
Ç׸ñ 15: °¡´ÉÇϸé Ç×»ó constexprÀ» »ç¿ëÇ϶ó
Ç׸ñ 16: const ¸â¹ö ÇÔ¼ö¸¦ ½º·¹µå¿¡ ¾ÈÀüÇÏ°Ô ÀÛ¼ºÇ϶ó
Ç׸ñ 17: Ư¼ö ¸â¹ö ÇÔ¼öµéÀÇ ÀÚµ¿ ÀÛ¼º Á¶°ÇÀ» ¼÷ÁöÇ϶ó
4Àå ¶È¶ÈÇÑ Æ÷ÀÎÅÍ
Ç׸ñ 18: ¼ÒÀ¯±Ç µ¶Á¡ ÀÚ¿øÀÇ °ü¸®¿¡´Â std::unique_ptr¸¦ »ç¿ëÇ϶ó
Ç׸ñ 19: ¼ÒÀ¯±Ç °øÀ¯ ÀÚ¿øÀÇ °ü¸®¿¡´Â std::shared_ptr¸¦ »ç¿ëÇ϶ó
Ç׸ñ 20: std::shared_ptró·³ ÀÛµ¿Ç쵂 ´ë»óÀ» ÀÒÀ» ¼öµµ ÀÖ´Â Æ÷ÀÎÅÍ°¡ ÇÊ¿äÇϸé std::weak_ptr¸¦ »ç¿ëÇ϶ó
Ç׸ñ 21: new¸¦ Á÷Á¢ »ç¿ëÇÏ´Â °Íº¸´Ù std::make_unique¿Í std::make_shared¸¦ ¼±È£Ç϶ó
Ç׸ñ 22: Pimpl °ü¿ë±¸¸¦ »ç¿ëÇÒ ¶§¿¡´Â Ư¼ö ¸â¹ö ÇÔ¼öµéÀ» ±¸Çö ÆÄÀÏ¿¡¼ Á¤ÀÇÇ϶ó
5Àå ¿À¸¥°ª ÂüÁ¶, À̵¿ Àǹ̷Ð, ¿Ïº® Àü´Þ
Ç׸ñ 23: std::move¿Í std::forward¸¦ ¼÷ÁöÇ϶ó
Ç׸ñ 24: º¸Æí ÂüÁ¶¿Í ¿À¸¥°ª ÂüÁ¶¸¦ ±¸º°Ç϶ó
Ç׸ñ 25: ¿À¸¥°ª ÂüÁ¶¿¡´Â std::move¸¦, º¸Æí ÂüÁ¶¿¡´Â std::forward¸¦ »ç¿ëÇ϶ó
Ç׸ñ 26: º¸Æí ÂüÁ¶¿¡ ´ëÇÑ Áߺ¹ÀûÀ縦 ÇÇÇ϶ó
Ç׸ñ 27: º¸Æí ÂüÁ¶¿¡ ´ëÇÑ Áߺ¹ÀûÀç ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ´Â ±â¹ýµéÀ» ¾Ë¾ÆµÎ¶ó
Ç׸ñ 28: ÂüÁ¶ Ãà¾àÀ» ¼÷ÁöÇ϶ó
Ç׸ñ 29: À̵¿ ¿¬»êÀÌ Á¸ÀçÇÏÁö ¾Ê°í, Àú·ÅÇÏÁö ¾Ê°í, Àû¿ëµÇÁö ¾Ê´Â´Ù°í °¡Á¤Ç϶ó
Ç׸ñ 30: ¿Ïº® Àü´ÞÀÌ ½ÇÆÐÇÏ´Â °æ¿ìµéÀ» Àß ¾Ë¾ÆµÎ¶ó
6Àå ¶÷´Ù Ç¥Çö½Ä
Ç׸ñ 31: ±âº» °¥¹«¸® ¸ðµå¸¦ ÇÇÇ϶ó
Ç׸ñ 32: °´Ã¼¸¦ Ŭ·ÎÀú ¾ÈÀ¸·Î À̵¿ÇÏ·Á¸é ÃʱâÈ °¥¹«¸®¸¦ »ç¿ëÇ϶ó
Ç׸ñ 33: std::forward¸¦ ÅëÇؼ Àü´ÞÇÒ auto
Ç׸ñ 1: ÅÛÇø´ Çü½Ä ¿¬¿ª ±ÔÄ¢À» ¼÷ÁöÇ϶ó
Ç׸ñ 2: autoÀÇ Çü½Ä ¿¬¿ª ±ÔÄ¢À» ¼÷ÁöÇ϶ó
Ç׸ñ 3: decltypeÀÇ ÀÛµ¿ ¹æ½ÄÀ» ¼÷ÁöÇ϶ó
Ç׸ñ 4: ¿¬¿ªµÈ Çü½ÄÀ» ÆľÇÇÏ´Â ¹æ¹ýÀ» ¾Ë¾ÆµÎ¶ó
2Àå auto
Ç׸ñ 5: ¸í½ÃÀû Çü½Ä ¼±¾ðº¸´Ù´Â auto¸¦ ¼±È£Ç϶ó
Ç׸ñ 6: auto°¡ ¿øÄ¡ ¾ÊÀº Çü½ÄÀ¸·Î ¿¬¿ªµÉ ¶§¿¡´Â ¸í½ÃÀû Çü½ÄÀÇ ÃʱâÄ¡¸¦ »ç¿ëÇ϶ó
3Àå Çö´ëÀû C ¿¡ ÀûÀÀÇϱâ
Ç׸ñ 7: °´Ã¼ »ý¼º ½Ã °ýÈ£(())¿Í Áß°ýÈ£({})¸¦ ±¸ºÐÇ϶ó
Ç׸ñ 8: 0°ú NULLº¸´Ù nullptr¸¦ ¼±È£Ç϶ó
Ç׸ñ 9: typedefº¸´Ù º°Äª ¼±¾ðÀ» ¼±È£Ç϶ó
Ç׸ñ 10: ¹üÀ§ ¾ø´Â enumº¸´Ù ¹üÀ§ ÀÖ´Â enumÀ» ¼±È£Ç϶ó
Ç׸ñ 11: Á¤ÀǵÇÁö ¾ÊÀº ºñ°ø°³ ÇÔ¼öº¸´Ù »èÁ¦µÈ ÇÔ¼ö¸¦ ¼±È£Ç϶ó
Ç׸ñ 12: ÀçÁ¤ÀÇ ÇÔ¼öµéÀ» override·Î ¼±¾ðÇ϶ó
Ç׸ñ 13: iteratorº¸´Ù const_iterator¸¦ ¼±È£Ç϶ó
Ç׸ñ 14: ¿¹¿Ü¸¦ ¹æÃâÇÏÁö ¾ÊÀ» ÇÔ¼ö´Â noexcept·Î ¼±¾ðÇ϶ó
Ç׸ñ 15: °¡´ÉÇϸé Ç×»ó constexprÀ» »ç¿ëÇ϶ó
Ç׸ñ 16: const ¸â¹ö ÇÔ¼ö¸¦ ½º·¹µå¿¡ ¾ÈÀüÇÏ°Ô ÀÛ¼ºÇ϶ó
Ç׸ñ 17: Ư¼ö ¸â¹ö ÇÔ¼öµéÀÇ ÀÚµ¿ ÀÛ¼º Á¶°ÇÀ» ¼÷ÁöÇ϶ó
4Àå ¶È¶ÈÇÑ Æ÷ÀÎÅÍ
Ç׸ñ 18: ¼ÒÀ¯±Ç µ¶Á¡ ÀÚ¿øÀÇ °ü¸®¿¡´Â std::unique_ptr¸¦ »ç¿ëÇ϶ó
Ç׸ñ 19: ¼ÒÀ¯±Ç °øÀ¯ ÀÚ¿øÀÇ °ü¸®¿¡´Â std::shared_ptr¸¦ »ç¿ëÇ϶ó
Ç׸ñ 20: std::shared_ptró·³ ÀÛµ¿Ç쵂 ´ë»óÀ» ÀÒÀ» ¼öµµ ÀÖ´Â Æ÷ÀÎÅÍ°¡ ÇÊ¿äÇϸé std::weak_ptr¸¦ »ç¿ëÇ϶ó
Ç׸ñ 21: new¸¦ Á÷Á¢ »ç¿ëÇÏ´Â °Íº¸´Ù std::make_unique¿Í std::make_shared¸¦ ¼±È£Ç϶ó
Ç׸ñ 22: Pimpl °ü¿ë±¸¸¦ »ç¿ëÇÒ ¶§¿¡´Â Ư¼ö ¸â¹ö ÇÔ¼öµéÀ» ±¸Çö ÆÄÀÏ¿¡¼ Á¤ÀÇÇ϶ó
5Àå ¿À¸¥°ª ÂüÁ¶, À̵¿ Àǹ̷Ð, ¿Ïº® Àü´Þ
Ç׸ñ 23: std::move¿Í std::forward¸¦ ¼÷ÁöÇ϶ó
Ç׸ñ 24: º¸Æí ÂüÁ¶¿Í ¿À¸¥°ª ÂüÁ¶¸¦ ±¸º°Ç϶ó
Ç׸ñ 25: ¿À¸¥°ª ÂüÁ¶¿¡´Â std::move¸¦, º¸Æí ÂüÁ¶¿¡´Â std::forward¸¦ »ç¿ëÇ϶ó
Ç׸ñ 26: º¸Æí ÂüÁ¶¿¡ ´ëÇÑ Áߺ¹ÀûÀ縦 ÇÇÇ϶ó
Ç׸ñ 27: º¸Æí ÂüÁ¶¿¡ ´ëÇÑ Áߺ¹ÀûÀç ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ´Â ±â¹ýµéÀ» ¾Ë¾ÆµÎ¶ó
Ç׸ñ 28: ÂüÁ¶ Ãà¾àÀ» ¼÷ÁöÇ϶ó
Ç׸ñ 29: À̵¿ ¿¬»êÀÌ Á¸ÀçÇÏÁö ¾Ê°í, Àú·ÅÇÏÁö ¾Ê°í, Àû¿ëµÇÁö ¾Ê´Â´Ù°í °¡Á¤Ç϶ó
Ç׸ñ 30: ¿Ïº® Àü´ÞÀÌ ½ÇÆÐÇÏ´Â °æ¿ìµéÀ» Àß ¾Ë¾ÆµÎ¶ó
6Àå ¶÷´Ù Ç¥Çö½Ä
Ç׸ñ 31: ±âº» °¥¹«¸® ¸ðµå¸¦ ÇÇÇ϶ó
Ç׸ñ 32: °´Ã¼¸¦ Ŭ·ÎÀú ¾ÈÀ¸·Î À̵¿ÇÏ·Á¸é ÃʱâÈ °¥¹«¸®¸¦ »ç¿ëÇ϶ó
Ç׸ñ 33: std::forward¸¦ ÅëÇؼ Àü´ÞÇÒ auto