MoinMoin   ¸®ÆÑÅ丵 UserPreferences
 
Help Info Print View Search Diffs Edit
 À妽º   µµ¿ò¸»   Ã£±â   ´ë¹®   ¹Ù²ï±Û 

  1. ¸ñÀû
  2. ¸®ÆÑÅ丵
    1. ¸®ÆÑÅ丵 À¯Çü
  3. °ü·Ã ¼­Àû
  4. °ü·Ã »çÀÌÆ®
Since 2009. 2. 1.

¸ñÀû

¸®ÆÑÅ丵

  • ÀÌ¹Ì ÀÛ¼ºµÈ Äڵ忡¼­ ¸®ÆÑÅ丵
    1. ÁßºÏ Ã£±â
        Áߺ¹ÀÌ »ý±â´Â ÀÌÀ¯ : ¸Þ½ÅÀú ±â´ÉÀ» ´ã´çÇϰí ÀÖ´Â ±è°úÀåÀº °í°´ÀÇ ¿äûÀ¸·Î LED¿¡ ÀüÈ­¹øÈ£¸¦ Ãâ·ÂÇÏ´Â ±â´ÉÀ» ±¸ÇöÇÏ·Á°í ÇÑ´Ù. SMS ¸ðµâ¿¡¼­µµ ºñ½ÁÇÑ ±â´É ±¸ÇöÀÌ ÀÖÀ»²¨¶ó »ý°¢ÇÏ¿© SMS ¸ðµâ¿¡¼­ LED¿¡ ÀüÈ­¹øÈ£¸¦ Ãâ·ÂÇÏ´Â Äڵ带 ã¾Æº¸¾Ò´Ù. ¿ª½Ã ±è°úÀåÀÇ »ý°¢´ë·Î µ¿ÀÏÇÑ ±â´ÉÀ» ¼öÇàÇÏ´Â ºÎºÐÀÌ ÀÖ¾ú´Ù. ±è°úÀåÀº ´Ã ±×·¸µíÀÌ ÇØ´ç ºÎºÐÀ» ¼±ÅÃÇÏ¿© Ctrl-C۸¦ ´©¸£°í ÆÄÀÏ ºê¶ó¿ìÀú¸¦ º¯°æÇÏ¿© ÀÚ½ÅÀÌ ÀÛ¾÷ÇÏ´Â ÆÄÀÏÀ» ¼±ÅÃÇÏ¿© Ctrl-V¸¦ ´©¸¥´Ù. ÄÄÆÄÀÏÀ» ÇØº¸´Ï SMS ¸ðµâ¿¡¼­ »ç¿ëÇÑ Àü¿ªº¯¼ö°¡ ¾ø¾î¼­ ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇß´Ù. '¿©±âµµ Çϳª Ãß°¡ÇؾßÁö'¶ó´Â ªÀº »ý°¢ ÈÄ Àü¿ªº¯¼ö¸¦ Çϳª Ãß°¡ÇÏ¿© ÄÄÆÄÀÏÀ» ÇÏ´Ï ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´Ù. Æù¿¡´Ù°¡ ³Ö°í Å×½ºÆ®¸¦ ÇÏ´Ï Á¦´ë·Î LED¿¡ ÀüÈ­¹øÈ£°¡ ³ªÅ¸³­´Ù. 'ÀÌÁ¦ µÆ±º' ÀÌ·± ½ÄÀ¸·Î LED¿¡ ÀüÈ­¹øÈ£¸¦ º¸¿©ÁÖ´Â ¸ðµâÀÌ Ãß°¡ µÇ´Â °æ¿ì Áߺ¹µÈ Äڵ尡 »ý°Ü³­´Ù.
    2. Áߺ¹µÈ ºÎºÐ¿¡ ´ëüÇÒ ¼ö ÀÖ´Â °øÅëÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ¿© ´ëü
    3. Àǵµ°¡ ¸íÈ®È÷ ³ªÅ¸³ªÁö ¾ÊÀº ÇÔ¼ö¸í, º¯¼ö¸í ã±â
        Àǵµ°¡ ¸íÈ®ÇÏÁö ¾ÊÀº ÇÔ¼ö, º¯¼ö¸íÀÌ »ý±â´Â ÀÌÀ¯ : ÆÀ³»¿¡ ÇÔ¼ö, º¯¼ö¸í ÀÛ¼º¿¡ ´ëÇÑ ÄÚµù¿øÄ¢À̳ª ÇÕÀǰ¡ ÀÌ·ç¾îÁöÁö ¾Ê¾Ò´Ù. ÇÔ¼öÀÇ °æ¿ì µ¿»ç+¸í»ç·Î Ç¥ÇöµÇ¸ç °¢ ´Ü¾î´Â ´ë¹®ÀÚ·Î ½ÃÀÛÇÑ´Ù¶ó´øÁö... ÀÛ¸í(íÂÙ£)¿¡ ¼ÒȦÇÑ ÀÌÀ¯°¡ ÇÐâ½ÃÀýÀÇ À߸øµÈ ±³À°¿¡¼­ ÀÌÀ¯¸¦ ã¾Æº»´Ù. Äڵ尡 ÁöÀúºÐÇÏ´õ¶óµµ ÄÚ¸àÆ®¸¸ ´Þ¸é ÈÄÇÑ Á¡¼ö¸¦ ¹ÞÀ» ¼ö ÀÖ¾ú´Ù. ¾Æ¹«¸® ÀúÁú ÄÚµå¶óµµ ÄÚ¸àÆ®ÀÇ ¾ç¿¡ µû¸¥ ÄÚ¸àÆ® ¸¸´ÉÁÖÀÇ, ÄÚ¸àÆ®·Î ¼ÓÁËÇÏ°í ±¸¿ø¹Þ´Â ¼¼»óÀÌ¿´±â ¶§¹®ÀÌ´Ù. '³ªÁß¿¡ ÄÚ¸àÆ® ´Þ¸é µÇ´Âµ¥ Áö±Ý ±ÍÂú°Ô ÀÛ¸í±îÁö ½Å°æ¾µ ÇÊ¿ä¾ø¾î'¶ó´Â »ý°¢. ÄÚ¸àÆ®¿¡ ÀÇÁ¸ÇÏ´Â °ÍÀº ÇöÀç ÀÛ¼ºÇÏ´Â Äڵ带 ±ú²ýÇÏ°Ô À¯ÁöÇϱâ À§ÇØ µé¿©¾ß ÇÏ´Â ³ë·ÂÀ» ±ÍÂú¾Æ¼­ ³ªÁßÀ¸·Î ¹Ì·ç´Â °Í°ú °°´Ù. ÀÌ¹Ì ÁöÀúºÐÇØ Áø ÄÚµå´Â ½Ã°£ÀÌ Áö³¯¼ö·Ï ¼öÁ¤ÀÌ ¾î·Æ°í ³ªÁß¿¡ ³»°¡ ¾ß±ÙÀ» ÇØ¾ßÇÏ´Â ¿øÀÎÀÌ µÈ´Ù. À½½ÄÀ» ¸Ô°í ¼³°ÐÀ̸¦ ÇÏÁö ¾Ê°í ¾ÅÅ©´ë¿¡ ±×Àú ½×¾ÆµÎ¾î ¹ú·¹µéÀÌ µé²ú°Ô ¸¸µå´Â °Í°ú °°´Ù.
        Àç¹Õ´Â ÀÏÈ­ : AÇÁ·ÎÁ§Æ®ÀÇ Æ¯Á¤ ¸ðµâ¿¡ int SI, EI; ¶ó´Â Äڵ尡 µé¾î°£ ¸ðµâÀ» BÇÁ·ÎÁ§Æ®¿¡ Æ÷ÆÃÇÑ ÀûÀÌ ÀÖ´Ù. BÇÁ·ÎÁ§Æ®¿¡¼­´Â ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇß´Ù. SIÀÌ¹Ì defineµÇ¾î ÀÖ¾î ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÑ °ÍÀÌ´Ù. ³ª´Â ÇÑÂü µ¿¾È SI°¡ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö ºÐ¼®À» ÇØ¾ß¸¸ Çß´Ù. ±×·¡¾ß¸¸ SIÀÇ º»¸íÀ» ã¾ÆÁÙ ¼ö ÀÖÀ¸¸®¶ó´Â »ý°¢ÀÌ µé¾ú±â ¶§¹®À̾ú´Ù. ºÐ¼®ÈÄ(º¯¼ö¸íÀÌ Âª¾Æ¼­ ÀÌÇØ°¡ Èûµé¾ú´Ù) ±âÁ¸ ÄÚµå ÀÛ¼ºÀÚ¿¡°Ô SI°¡ Ȥ½Ã ?StartIndex¸¦ ÀǵµÇÑ °ÍÀÎÁö¸¦ ¹°¾îº¸¾Ò´Ù. '³×'¶ó´Â ªÀº ´äº¯À» ¾ò°í³ª¼­ SI¸¦ ?StartIndex·Î ¼öÁ¤ÇÏ¿´´Ù.
  • ÁÁÀº ÄÚµå(Good Code)¶õ?
      ³ª»Û ³¿»õ(Bad Smell)°¡ ³ªÁö ¾Ê´Â ÄÚµå

'¿ì¸®ÆÀÀº À̹ø¿¡ ¸®ÆÑÅ丵À» Çß¾î¿ä.'¶ó´Â ¸»À» µéÀ¸¸é ³ª´Â
'¾Æ ¸®ÆÑÅ丵Àº ¹º°¡¿ä?' ¶ó°í ¹¯´Â´Ù.
'¾Æ, ±×°Ç¿ä. Äڵ带 º¸±â ÁÁ°Ô ¸¸µå´Â°Ô ¸®ÆÑÅ丵ÀÔ´Ï´Ù.' ¶ó°í ÀÚ¶û½º·´°Ô ´ë´äÇÑ´Ù.

¸®ÆÑÅ丵À» Çß´Ù°í ÇÏ´Â ÄÚµåµéÀº ´ÙÀ½°ú °°Àº Ư¡ÀÌ ÀÖ´õ¶ó.

  1. ÇÔ¼ö, º¯¼ö¸íÀÌ ±æ¾îÁ³À½
  2. Å×½ºÆ®·Î ³ÖÀº ÄÚµåµéÀ» »èÁ¦
  3. ifdefÀ¸·Î ÇÊ¿ä¾ø´Â ÄÚµå »èÁ¦
  4. ÇÔ¼öÀÇ ÇÏ´Â ÀÏÀ» Ç¥ÇöÇϱâ À§ÇØ ÄÚ¸àÆ® Ãß°¡
  5. ¼öÇàµÇÁö ¾Ê´Â ÄÚµå »èÁ¦
°á·ÐÀûÀ¸·Î ½ÇÁ¦·Î ÄÄÆÄÀÏ µÇÁö ¾Ê´Â ÄÚµåµéÀ» »èÁ¦ÇÏ°í º¯¼ö¸íÀÌ ¹Ù²î´Â°Ô ´ëºÎºÐÀÌ´Ù.

Áߺ¹À» Á¦°ÅÇÑ´Ù´øÁö ÇÔ¼ö¸¦ ÃßÃâÇØ ³½´Ù´øÁö ÇÏ´Â ÀÏÀº °ÅÀÇ ¾ø´Ù.

³ª»Û ³¿»õ(Bad Smell)¸¦ ã´Â ¹æ¹ý Áß¿¡ Äڵ庹Àâµµ¸¦ ±âÁØÀ¸·Î ÇÏ´Â °Íµµ ÁÁ°Ú´Ù.

Äڵ庹Àâµµ°¡ ³ô°Ô ³ª¿Â ÄÚµå = ¸®ÆÑÅ丵ÀÌ ÇÊ¿äÇÑ ÄÚµå

  1. º¹Àâµµ°¡ 130ÀÎ ÇÔ¼ö ¼±Á¤(°³¹ßÀÚÀÇ ¿äû)
  2. ½ÃÀÛÀü ¿øÄ¢ Á¤Çϱâ
    1. ¸®ÆÑÅ丵 ´ë»ó ÇÔ¼ö°¡ ÇÏ´Â ÀÏ Á¤ÀÇ
    2. extract methodÀÇ naming
    3. extract methodÀÇ parameter »ç¿ë ¹æ¹ý

Unittest¸¦ ÁøÇàÇϸ鼭 º¹Àâµµ°¡ ³ôÀº ÇÔ¼öÀÇ °æ¿ì ¸®ÆÑÅ丵 ¾øÀÌ Unittest¸¦ ÁøÇàÇϱⰡ ¾î·Æ´Ù.
º¹Àâµµ°¡ 130À̶ó¸é ÇϳªÀÇ ÇÔ¼ö¿¡ 130°³ ÀÌ»óÀÇ test case°¡ Á¸ÀçÇØ¾ßÇϱ⠶§¹®ÀÌ´Ù. ÀÌ·± °æ¿ì °¢ testcase¿¡ ´ëÇÑ À̸§À» Á¤ÀÇÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù.
º¹ÀâÇØ¼­ ¸®ÆÑÅ丵ÀÇ Çʿ伺À» ´À³¢Áö¸¸ ½±°Ô ¸®ÆÑÅ丵 ÁøÇàÀ» ÇÏ·ÁÇÏÁö ¾Ê´Â´Ù.
¹®Á¦°¡ ¹ß»ýÇÏ´Â °æ¿ì ÀÚ½ÅÀÌ Ã¥ÀÓÀ» Á®¾ßÇϰí ÇöÀç(?)±îÁöÀÇ ¹®Á¦°¡ ÇØ°áµÈ »óÅÂÀÇ ÄÚµå¶ó´Â »ý°¢¶§¹®ÀÌ´Ù.
ƯÈ÷ ÀÚ½ÅÀÌ Á÷Á¢ °³¹ßÇÑ Äڵ尡 ¾Æ´Ñ °æ¿ì ¸®ÆÑÅ丵Àº »ó»óÁ¶Â÷ ÇÒ ¼ö ¾ø´Ù.
°æÇèÇÑ ¹Ù·Î´Â ÁÖ¼®¹®À̳ª DebuggingÀ» À§ÇÑ ¸Þ½ÃÁö Á¶Â÷µµ ¹Ù²Ù´Â °ÍÀ» ½È¾îÇÑ´Ù.

¸®ÆÑÅ丵À» ÁøÇàÇÏ·Á´Â ½Ãµµ¸¦ ÇÏ·Á¸é ¸ÕÀú ½ÇÁ¦ ±¸Çö ´ã´çÀÚ¸¦ ¼³µæÇϴ ù°ÉÀ½ÀÌ´Ù.

¹Ýº¹µÇ´Â ÆÐÅÏ Ã£±â

if()

    ...
    ...
else if()
    ...
    ...
else if()
    ...
    ...
else
    ...
    ...

Á¶°Ç¹®¿¡¼­ 󸮵Ǵ ºÎºÐÀÇ °æ¿ì ÀÏÁ¤ÇÑ ÆÐÅÏÀ» °¡Áú È®·üÀÌ ³ô´Ù.

ȸ»ç¿¡¼­ ¸®ÆÑÅ丵À» ÁøÇàÇÏ´Â °æ¿ì ¾î¶² ÀýÂ÷·Î ÁøÇàÇÒ ¼ö ÀÖÀ»±î?
  1. »çÀüÁغñ ´Ü°è
    1. Àüü ¼Ò½º Äڵ忡 ´ëÇÑ Äڵ庹Àâµµ ÃøÁ¤
    2. ÇÔ¼öº° º¹Àâµµ°¡ ³ôÀº ¼øÀ¸·Î Á¤·Ä
    3. ¸®ÆÑÅ丵 ´ë»ó¿¡ ÇÔ¼ö ¼±Á¤À» À§ÇÑ º¹Àâµµ ±âÁØ ¼±Á¤
        ¿¹) 10ÀÌ»óÀÇ º¹Àâµµ¸¦ °¡Áö´Â ÇÔ¼ö¿¡ ´ëÇØ¼­ ¸®ÆÑÅ丵À» ½Ç½ÃÇÑ´Ù.
  2. ¸®ÆÑÅ丵 ´Ü°è
    1. ¼±Á¤µÈ ÇÔ¼ö¿¡ ´ëÇÑ ºÐ¼®
      • line count ÃøÁ¤
      • ÇÔ¼ö À̸§À¸·Î ÇÏ´Â ÀÏ¿¡ ´ëÇÑ ÆÄ¾ÇÀÌ °¡´ÉÇѰ¡?
      • ÇÏ´Â ÀÏÀÌ ¹«¾ùÀΰ¡?
          ÇØ´ç ÇÔ¼ö°¡ ÇöÀç ó¸®Çϰí ÀÖ´Â ÀϵéÀ» °£·«ÇÑ ¹®Àåµé·Î Ç¥ÇöÇØ º¸±â.
      • ¹Ýº¹µÇ´Â ÆÐÅÏÀÌ Àִ°¡?
    2. ¸®ÆÑÅ丵 ÇØº¸±â
      1. ÇÔ¼ö/º¯¼ö À̸§ º¯°æ
      2. extract method
      3. Áߺ¹Á¦°Å
      4. ....
  3. ¸®ÆÑÅ丵 ÀüÈÄ µ¿ÀÛ¿¡ ´ëÇÑ È®ÀÎ ¹æ¾È ¸¶·Ã
    1. unittest
        ¸®ÆÑÅ丵 ÀüÈÄ µ¿ÀÛ È®ÀÎÀ» À§ÇØ unittest¸¦ Åë°úÇÏ´ÂÁö¸¦ È®ÀÎÇÒ ¼ö ÀÖÀ½.
    2. µ¿ÀÛ È®ÀÎ
        ÀüÈÄ µ¿ÀÛÀ» ½ÇÁ¦·Î ½ÇÇà½ÃÄѺ¸°í È®ÀÎÇÒ ¼ö ÀÖ´Ù.

¾Æ·¡¿Í °°Àº À̽´µé¿¡ ´ëÇØ¼­ »ý°¢ÇØ º¸ÀÚ.
  1. RefactoringÀÌ ¸ÕÀú³Ä? Test°¡ ¸ÕÀú³Ä?
  2. ¾î¶»°Ô ÇØ¾ß ÇöÀç ÆÀÀÌ °è¼Ó RefactoringÀ» À¯ÁöÇÒ ¼ö ÀÖ°Ô ÇÒ±î?
  3. big change¸¦ ÇÇÇÏ´Â ¹æ¹ý
  4. legacy code¸¦ ÀÌÇØÇϴµ¥ ½Ã°£ÀÌ ¿À·¡°É¸®´Â ¹®Á¦
  5. RefactoringÀ» ÇÒ ¼ö ÀÖ´Â ¼÷·ÃµÈ ±â¼úÀÚ°¡ Àִ°¡?(RefactoringÀ» ÇÒ·Á¸é ¼÷·ÃÀÚ¿©¾ß ÇÑ´Ù.)
  6. inflection point ¾î¶»°Ô ¾ËÁö?

¸®ÆÑÅ丵 À¯Çü

void Process(int WhatCase) 
{ 
    ..... 
    ..... 
    switch(WhatCase) 
    { 
        case 0: 
            .... 
            .... 
            .... 
            break; 
        case 1: 
            .... 
            .... 
            .... 
            break; 
        case 2: 
            .... 
            .... 
            break; 
        case 3: 
            .... 
            .... 
            return; 
    } 
 
} 
 
==========> 
 
void Process(int WhatCase) 
{ 
    ..... 
    ..... 
    switch(WhatCase) 
    { 
        case 0: 
            Do_0(); 
            break; 
        case 1: 
            Do_1(); 
            break; 
        case 2: 
            Do_2(); 
            break; 
        case 3: 
            Do_3(); 
            break; 
    } 
} 
 
ÇÔ¼ö Process°¡ ÇÏ´Â ÀÏÀº ¿ÀÁ÷ Case¿¡ ¸Â´Â Do_x ÇÔ¼ö¸¦ È£ÃâÇØ ÁÖ´Â indexing¿ªÇÒ¸¸ Çϱâ·Î Á¤ÀÇÇÑ´Ù. 
 
°£´ÜÇÑ ruleÀ» Á¤Çؼ­ ¹Ýº¹ÀûÀ¸·Î ¸®ÆÑÅ丵À» ÁøÇàÇØ ³ª°£´Ù. 
À§Çèµµ°¡ ³·°í ÇÊ¿äÇÑ parameter¸¸ Do_x ÇÔ¼ö¿¡ ³ÖÀ¸¸é ok. 
½Ã°¢ÀûÀ¸·Î ±ò²ûÇÔÀ» ´À³¦. 
Unittest¸¦ ÇÏ´Â °æ¿ì ÇØ´ç case¿¡ Do_xÇÔ¼ö°¡ ºÒ¸®´Â°¡¸¸ testÇÒ ¼ö ÀÖÀ½. 
½¬¿î ¸®ÆÑÅ丵ÀÌÁö¸¸ ÀǿܷΠ°³¹ßÀÚ°¡ ¼²ºÒÁö ½ÃµµÇÏÁö ¾Ê´õ¶ó. ½ÇÁ¦·Î switch¹®ÀÇ case¾ÈÀÌ break, returnÀÌ º¹ÇÕÀûÀ¸·Î Á¸ÀçÇÏ°í µé¿©¾²±â°¡ Á¦´ë·Î µÇ¾î ÀÖÁö ¾Ê¾Æ ¾à°£ÀÇ µÎ·Á¿òÀ» ´À³¢´Â °ÍÀ¸·Î º¸ÀÓ. 

foo() 
{ 
    while(1) 
    { 
        .... 
        .... 
        if() 
        { 
            switch() 
            { 
                case x1: 
                case x2: 
                    .... 
                    .... 
                    break; 
                case x3: 
                case x4: 
                    if() 
                        continue; 
                    break; 
                case x5: 
                case x6: 
                    if() 
                        continue; 
                    break; 
            } 
        } 
        do_something1(); 
        do_something2(); 
        .... 
    } 
} 

µ¢Ä¡°¡ Å« ÇÔ¼ö¿¡¼­ extract ÇÏ´Â °æ¿ì Å«µ¢¾î¸®·Î ¸ÕÀú ºÐ¸®ÇØ ³¾ °ÍÀÎÁö ¾Æ´Ï¸é ÀÛÀº ºÎºÐÀ» ¸ÕÀú »©³¾ °ÍÀÎÁö °áÁ¤À» ÇØ¾ß ÇÑ´Ù.
ÀÏÁ¾ÀÇ Top-downÀÌ³Ä Bottom-up À̳ĸ¦ °áÁ¤ÇÏ´Â ¼ø°£ÀÌ´Ù.

Top-down¹æ½ÄÀÌ ¿ì¼±ÀÌÁö ¾ÊÀ»±î »ý°¢ÇÑ´Ù.

foo()
{

    ....
    ....
    ....
}
==>
foo()
{
    do_something1();
    do_something2();
}
==>

do_something1()
{

    do_something1_do_something1();
    do_something1_do_something2();
}

do_something2()
{

    do_something2_do_something1();
    do_something2_do_something2();
}

Top-downÀÇ ÀåÁ¡ :

  1. ÀÏÀÇ ½ÃÀÛÁ¡ÀÌ ¸íÈ®ÇÏ´Ù.
  2. ÇÔ¼öÀÇ µ¿ÀÛ¿¡ ´ëÇÑ ±×¸²À» ±×¸®±â ½±´Ù.

void foo()
{
    int input;
    while(1)
    {
      ....
      ....
      API_Call(&input);
      ....
    }
}

===>

void foo()
{

    int input;
    while(1)
    {
      do_something1(&input)
    }
}

do_something1(int* input)
{

    ....
    ....
    API_Call(input);
    ....
}

do_something1ÇÔ¼ö·Î ÃßÃâÇÑ ÈÄ¿¡ inputÀ» paramter·Î »ç¿ëÇÑ´Ù. ÃßÃâÇÑ ÇÔ¼ö ³»ºÎ¿¡¼­ API_CallÀÇ parameter¿¡ ´ëÇÑ º¯°æÀÌ ÇÊ¿äÇÏ´Ù.
do_something1ÇÔ¼ö¿¡¼­ API_Call(&input)·Î »ç¿ëÇÏ´Â °æ¿ì ¾î¶² ÄÄÆÄÀÏ ¿¡·¯µµ ¹ß»ý½ÃŰÁö ¾Ê±â ¶§¹®¿¡ ¹®Á¦¸¦ ÇØ°áÇϴµ¥ ½Ã°£ÀÌ °É¸± ¼ö ÀÖÀ½.

void foo()
{
    switch(id)
    {
      case x1:
        Debug_Print();
        break;
      case x2:
        Debug_Print();
        break;
      case x3:
        ....
        break;
    }
    ....
    ....
}

===>

void foo()
{

    switch(id)
    {
      case x1:
        break;
      case x2:
        break;
      case x3:
        ....
        break;
    }
    foo_Debug_Print(id);
    ....
    ....
}

void foo()
{
    if(A == CONDITION1)
      ....
    else if(A == CONDITION2)
      ....
    else if(A == CONDITION3)
      ....
    else if(A == CONDITION4)
      ....
    eles if(B == CONDITION5)
      ....
    else if(B == CONDITION6)
      ....
    else
      ....
}

===>

void foo()
{

    switch(A)
    {
      case CONDITION1:
        break;
      case CONDITION2:
        break;
      case CONDITION3:
        break;
      case CONDITION4:
        break;
      default:
        if(B == CONDITION5)
          ....
        else if(B == CONDITION6)
          ....
        else
          ....
        break;

    }
}

'ÀÌ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀº ¹º°¡¿ä?'
'ÇÔ¼ö À̸§À» Áö¾îº¼±î¿ä?'
'Xxxx¸¦ ó¸®ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.'
º¸Åë ÇÔ¼ö À̸§À» ÁöÀ¸¶ó°í Çϸé Xxxxx_Process ÀÌ·±½ÄÀ̰ųª Xxxxx_Normal_Process ÀÌ·±½ÄÀÌ´Ù.

¼¼»óÀ» ´Ù °¡Áú¼ö ÀÖ´Â ÇÔ¼öÀ̸§ÀÌ´Ù.
'³Ê¹« ¹æ´ëÇϳ׿ä. ¾î¶² ÀÏÀ» ÇÏ´ÂÁö ¸íÈ®ÇÏÁö ¾Ê±¸¿ä.'
'¿ö³« ÇÏ´Â ÀÏÀÌ ¸¹¾Æ¼­¿ä'

'ÇÏ´Â ÀÏÀ» Çϳª¾¿ ³ª¿­ÇØ º¼±î¿ä?'
'¾î¼°í Àú¼°í ÀÌ·¸Äô Àú·¸Äô ÇÏ´Â ÀÏÀ» ÇÕ´Ï´Ù.'

ÇÏ´Â ÀÏ °¢°¢¿¡ ´ëÇØ¼­ ÇÔ¼ö À̸§À¸·Î ³ª´©°Å³ª ÇÏ´Â ÀÏÀÇ ºÐ¸®°¡ Èûµé°æ¿ì ÇÏ´Â ÀÏÀ» ³ª¿­ÇÏ´Â À̸§À¸·Î ÇÔ¼ö À̸§À» ÀÛ¼ºÇÏÀÚ.

void food() 
{ 
    for(i=0; i<MAX; i++) 
    { 
        if(condition1) 
            continue; 
 
        if(condition2) 
            continue; 
 
        if(condition3) 
            continue; 
 
        if(API_Call(i)) 
            continue; 
 
        .... 
        .... 
    }        
} 
 
===> 
 
void foo() 
{ 
    for(i=0; i<MAX; i++) 
    { 
        if(IsSkipCondition(...)) 
            continue; 
        .... 
        .... 
    }        
} 
 
IsSkipCondition(int index, struct A) 
{ 
    BOOLEAN isSkipCondition = FALSE; 
    if(condition1) 
        isSkipCondition = TRUE; 
    else if(condition2) 
        isSkipCondition = TRUE; 
    else if(condition3) 
        isSkipCondition = TRUE; 
    else if(API_Call(index)) 
        isSkipCondition = TRUE; 
 
    return isSkipCondition; 
} 
 
API_Call ¶§¹®¿¡ for ·çÇÁÀÇ index¸¦ ³Ñ°ÜÁà¾ß ÇØ¼­ ¿ØÁö ±ò²ûÇÏÁö ¾Ê¾Æ º¸ÀδÙ. 

¸®ÆÑÅ丵¿¡¼­ ÇÔ¼ö¸¦ ÃßÃâÇÏ´Â °æ¿ì parameter°¡ ¸¹¾ÆÁö´Â °æ¿ì°¡ »ý±ä´Ù.
ÀÌ·² ¶§ ¾î¶»°Ô ÇØ¾ßÇÒ±î?
paramter¼ö°¡ ¸¹¾ÆÁö´õ¶óµµ ÀÏ´Ü ±âÁ¸ µ¿ÀÛ¿¡ °¡Àå °¡±õ°Ô ¼öÁ¤ÇÏ¿© µ¿ÀÛÀ» È®ÀÎÇÑ´Ù.
paramter¼ö°¡ ¸¹Àº ÇÔ¼ö¸¦ ´Ù½Ã ¸®ÆÑÅ丵À» ÇØ¼­ parameter¼ö¸¦ ÁÙ¿©³ª°£´Ù.

ÇѲ¨¹ø¿¡ ÇÔ¼ö¸¦ ÃßÃâÇϰí parameter±îÁö ¾ø¾Ö·Á°í Çϱ⠺¸´Ù´Â ÇϳªÀÇ ¸ñÇ¥¸¦ Á¤ÇÏ°í ±× ¸ñÇ¥¸¦ Ãæ½ÇÈ÷ ´Þ¼ºÇÏ´Â ¹æÇâÀ¸·Î ÁøÇàÇÏ´Â °ÍÀÌ ¾ÈÁ¤ÀûÀÌ´Ù.

ÀÌÆ²µ¿¾È ¸ðµâ´ã´çÀÚ¿Í ¸®ÆÑÅ丵À» ÁøÇàÇÏ´Ù°¡ ¿À´ÃÀº È¥ÀÚ¼­ ÁøÇàÇß´Ù. ÇÔ²² ÀÛ¾÷ÇÏ´Ù°¡ È¥ÀÚÇÏ´Â °æ¿ì Àå´ÜÁ¡Àº ¹«¾ùÀϱî?
  1. ÀåÁ¡
    • ÀÚ¸®°¡ ÆíÇÏ´Ù.
        Á¼Àº ÀÚ¸®¿¡ Å« ÀÇÀÚ°¡ µé¾î°¡´Ùº¸´Ï ¾É¾Æ ÀÖ´Â ÀÚ¼¼°¡ ºÒÆíÇß´Ù. È¥ÀÚ¼­ ÆíÇÏ°Ô ¾É¾Æ¼­ ÀÛ¾÷ÇÏ´Ï ´ú ÇǰïÇÏ´Ù.
    • Űº¸µå, ¸¶¿ì½º
        Űº¸µå, ¸¶¿ì½º¸¦ ¹ø°¥¾Æ °¡¸é¼­ »ç¿ëÇÏ´Ùº¸´Ï ºÒÆíÇÑ Á¡ÀÌ ÀÖ¾ú´Ù.
    • ¿¡µðÅÍÇÁ·Î±×·¥
        ¿¡µðÅÍÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÏ´Â ´ÜÃàŰ µîÀÇ ¼³Á¤ÀÌ ³ªÀÇ ÀÛ¾÷ ȯ°æ¿¡ ¸ÂÃçÁ®À־ °Ë»ö, º¹»ç, ºÙ¿©³Ö±â µîÀÇ ÀÛ¾÷ÀÌ ´õ ºü¸£´Ù.
  2. ´ÜÁ¡
    • ¸®ÆÑÅ丵 ´ë»ó ÇÔ¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò±â°¡ Èûµé´Ù.
    • ¸®ÆÑÅ丵ÇÒ ÇÔ¼ö ÀÛ¸í
        ´ë»ó ÇÔ¼ö¿¡¼­ ƯÁ¤ºÎºÐÀ» ÃßÃâÇØ ³ùÁö¸¸ ¸¶¶¥È÷ ¾î¶² À̸§À¸·Î Áö¾î¾ß ÇÒÁö °í¹ÎÀÌ´Ù.

'ÀÌ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀÌ ¹º°¡¿ä?'
'À½... Àü¹ÝÀûÀΠ󸮸¦ ÇÕ´Ï´Ù.'
'Á» ±¸Ã¼ÀûÀ¸·Î À̾߱â ÇØÁÙ ¼ö ÀÖ³ª¿ä?'
'À½...'

º¹ÀâÇÑ ÇÔ¼ö´Â ¼ÖÁ÷È÷ ´ã´ç °³¹ßÀÚµµ Á¤È®È÷ ÆÄ¾ÇÀ» ¸øÇϰí ÀÖ´Â °æ¿ì°¡ ¸¹´Ù.
±×·³ »óÅ¿¡¼­ ÇÔ¼öÀÇ Á¤ÀǸ¦ ³»·Á´Þ¶ó´Â °ÍÀº ³Ê¹« ¹«¸®ÇÑ ºÎŹÀ̶ó »ý°¢ÇÑ´Ù.

ÇѰ¡Áö °í¾ÈÇÑ ¹æ¹ýÀº ÇÔ¼öÀÇ Å« ±×¸²À» °°ÀÌ ±×·Áº¸´Â °ÍÀÌ´Ù.

foo()
{

    if(±¹³»)
    {
    }
    else
    {
    }

    switch()
    {

      case x1:
        break;
      case x2:
        break;
      case x3:
        break;
    }

    if(¾Æ³¯·Î±×)
    {
    }
    else
    {
    }

    if(¾Æ³¯·Î±×)
    {
    }
    else
    {
    }

    if(¾Æ³¯·Î±×)
    {
    }
    else
    {
    }

}

==>
foo()
{

    if(±¹³»)
    {
    }
    else
    {
    }

    switch()
    {

      case x1:
        break;
      case x2:
        break;
      case x3:
        break;
    }

    if(¾Æ³¯·Î±×)
    {

      do_something1_¾Æ³¯·Î±×();
      do_something2_¾Æ³¯·Î±×();
      do_something3_¾Æ³¯·Î±×();
    }
    else
    {
      do_something1_µðÁöÅÐ();
      do_something2_µðÁöÅÐ();
      do_something3_µðÁöÅÐ();
    }
}

ÀÌ·¸°Ô 1-2 depth Á¤µµ ¼öÁØ¿¡¼­ ±× ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀ» Á¤ÀÇÇÏ¸é ½¬¿öÁø´Ù.

  • À§¿Í °°Àº ¾Æ¿ô¶óÀÎÀ» Àâ¾ÆÁÖ´Â °£´ÜÇÑ À¯Æ¿¸®Æ¼¸¦ ¸¸µé¾îº¼ ¼ö ÀÖ°Ú±º¿ä!. ³Ê¹« ¸¹Àº µðÅ×À϶§¹®¿¡ ´«¿¡ µé¾î¿ÀÁö ¾Ê´Â °ÍÀε¥, ±×°ÍµéÀ» Àû´çÈ÷ °¨ÃçÁÙ¼ö ÀÖ´Ù¸é ÄÚµå»óÀÇ ÆÐÅÏÀÌ ´õ Àß µå·¯³ªº¸À̰í, ¸®ÆÑÅ͸µÀ» ÇÒ ¸¸ÇÑ ÈùÆ®¸¦ ¾òÀ» ¼ö ÀÖÀ» °Í °°½À´Ï´Ù. --ÇÑÁÖ¿µ

º¹ÀâÇÑ ÇÔ¼ö¸¦ ¸®ÆÑÅ丵ÇÏ´Ùº¸¸é ½Ç¼ö¸¦ Çϱ⠸¶·ÃÀÌ´Ù.
ÄÄÆÄÀÏ ¿¡·¯°¡ ³ª±âµµ Çϰí ȤÀº Á¤»óÀûÀÎ µ¿ÀÛÀÌ ¾ÈµÇ´Â °æ¿ìµµ ÀÖ´Ù.
º¸ÆøÀ» ÀÛ°Ô ÇÏ´õ¶óµµ ¹®Á¦¸¦ ¹ß»ýÇϱ⠸¶·ÃÀÌ´Ù.
¸®ÆÑÅ丵À» ÄÚĪÇÏ´Â °æ¿ì ¹®Á¦°¡ ¹ß»ýÇÏ¸é °³¹ßÀÚ´Â
'À̰б¦È÷ ÇѰŠ¾Æ³Ä?'
'Ȥ½Ã side effectµµ Àִ°Š¾Æ³Ä?'
'À̰Š¿ØÁö ºÒ¾ÈÇѵ¥'
ÀÌ·± ¹ÝÀÀÀ» º¸ÀδÙ.

ÀÌ·± °æ¿ìµµ ÀÖ¾ú´Ù.
´ã´çÀÚ¿Í ÇÔ²² ¸®ÆÑÅ丵À» ÇÑ ¼Ò½º¸¦ updateÇÏ´Ù°¡ ¹®Á¦°¡ ¹ß»ýÇÑ ÀûÀÌ ÀÖ´Ù. ´ã´çÀÚ´Â ÇѼûÀ» ½¬¸ç ¾î¿ ÁÙ ¸ô¶óÇß´Ù.
´ã´çÀÚ ¿· ÀÚ¸®¿¡ ´Ù¸¥ ±â´É °³¹ßÀÚ°¡ ÀÖ´Ù.
¸çÄ¥ µ¿¾È ¿ì¸®°¡ Áñ°Ì°Ô ÀÛ¾÷ÇÏ´Â °ÍÀ» ºÁ¿ÔÁö¸¸ ±×´ÙÁö ±àÁ¤ÀûÀ¸·Î º¸´Â°Å °°Áö´Â ¾Ê¾Ò´Ù.
¸¶Ä§ ±× »ç¶÷ÀÌ ¿ì¸®¿¡°Ô ¸î ¸¶µð ¸»À» °Ç³Þ´Âµ¥
'À½ °ÅºÁ¶ó ¸®ÆÑÅ丵ÇÏ´Ù°¡ À߸øµÇ¸é ±×·¸°Ô µÈ´Ù.'
ÀÌ·± ´À³¦À» ¹Þ¾Ò´Ù.

ºÎÁ¤ÀûÀÎ ´À³¦ÀÌ ´ã´çÀÚ¿¡°Ô °¡Áö ¾Êµµ·Ï ÃÖ´ëÇÑ Ä§ÂøÇÏ°Ô ´ëÀÀÇß´Ù.
'¹Ù²ï ºÎºÐ Ã¼Å©ÇØ º¸ÁÒ. ¹Ù²ï°Ô º°·Î ¾øÀ¸´Ï ±Ý¹æ ã¾Æ³¾ ¼ö ÀÖÀ»²®´Ï´Ù.'
¾à 10ºÐ Á¤µµ ÀÛ¾÷¸¸¿¡ ¹®Á¦¸¦ ÇØ°áÇÏ°í ¿ì¸® µÎ »ç¶÷Àº ±â»Û ¸¶À½À¸·Î Åð±ÙÇÑ ÀûÀÌ ÀÖ´Ù.

foo() 
{ 
    int i; 
     
    .... 
    .... 
    .... 
    i = AssignValue(); 
    .... 
    .... 
 
    .... 
    .... 
    if(i == CONDITION1) 
    .... 
} 
 
===> 
foo() 
{ 
    int i; 
    i = do_something1(); 
    do_something2(i); 
} 
do_something1() 
{ 
    int i; 
    .... 
    i = AssignValue(); 
    .... 
    return i; 
} 
 
do_something2(int i) 
{ 
    .... 
    .... 
    if(i == CONDITION1) 
    .... 
} 
 

foo() 
{ 
    if(CONDITION1) 
    { 
        .... 
        .... 
        .... 
        .... 
        .... 
        .... 
        .... 
    } 
} 
 
===> 
 
foo() 
{ 
    if(CONDITION1) 
    { 
        do_Something1andSomething2(); 
    } 
} 
 
do_Something1andSomething2() 
{ 
        .... 
        .... 
        .... 
        .... 
        .... 
        .... 
        .... 
} 
 
unittest°¡ ¾ø´Â °æ¿ì º¸ÆøÀ» ª°Ô ³ª°¥ Çʿ䰡 ÀÖ´Ù. 
½ÇÁ¦·Î °³¹ßÀÚ¿Í °°ÀÌ ÀÛ¾÷À» Çϸ鼭 ÇØ´ç ºÎºÐÀÇ ÇÏ´Â ÀÏ¿¡ ´ëÇØ¼­ ¹°¾îº¸¾Ò´Ù. 
'ÀÌ ºÎºÐÀº ¹«½¼ ÀÏÀ» ÇÏ´Â ºÎºÐÀΰ¡¿ä?' 
'Something1°ú Something2¸¦ ÇÏ´Â ºÎºÐÀÔ´Ï´Ù.'¶ó°í ÀÚ½ÅÀÖ°Ô ¸»ÇÑ´Ù. 
'±×·³ Something1°ú Something2¸¦ ³ª´­ ¼ö ÀÖ°Ú±º¿ä.' 
°³¹ßÀÚ´Â ¼Ò½º¸¦ ÂùÂùÈ÷ Äm¾îº¸¾ÒÁö¸¸ ¤FÀº ÇÑ ¼ûÀ» ³»½¬¸ç 
'À½... ÀÌ ºÎºÐÀº È£ÃâµÇ´Â ¼ø¼­µµ Áß¿äÇϰí ÀÌ°Ç »ý°¢À» Á» ÇØºÁ¾ß°Ú´Âµ¥¿ä' 
ÇÏÁö¸¸ ¼Ò½º¸¦ »ìÆìº¸´Ï Something1°ú Something2°¡ ½±°Ô ºÐ¸®Çϱ⠾î·Á¿î ±¸Á¶·Î ±ºµ¥±ºµ¥ ¼¯¿© ÀÖ¾ú´Ù. 
ÀÚÄ© º¸ÆøÀ» Å©°Ô ³ª°¬´Ù°¡´Â Á¤»óµ¿ÀÛÀ» º¸ÀåÇϱⰡ Èûµé°Ú´õ¶ó. 
±×·¡¼­ ´ÙÀ½ ´Ü°è·Î do_Something1andSomething2¶ó´Â À̸§À¸·Î extract method·Î 1´Ü°è ¸®ÆÑÅ丵À» ¸¶ÃÆ´Ù. 

°³¹ßÀÚ´Â Ç×»ó ¹Ù»Ú´Ù.
'¾ç»ê ¹®Á¦°¡ ÅÍÁ®¼­¿ä. Áö±ÝÀº ½Ã°£ÀÌ ¾ø½À´Ï´Ù.'
'³ªÁß¿¡ ÇÏ¸é ¾ÈµÉ±î¿ä? Áö±Ý ÇÒ ¿©·ÂÀÌ ¾ø¾î¿ä.'
'Áß¿äÇÑ ÀÏÀÎÁö´Â ¾Ë°Ú´Âµ¥¿ä... Áö±ÝÀº Á»...'

ÀÌ·± ¸»À» ³²±â°í ´Ù½Ã º¹ÀâÇÑ Äڵ忡¼­ ¹®Á¦Á¡À» ã±â À§Çؼ­ À̸®Àú¸® µð¹ö±ëÇÏ´Â ¸ð½ÀÀÌ ³Ê¹« ¾ÈŸ±õ´Ù.

¸®ÆÑÅ丵À» Á¦¾ÈÇÒ ¶§
'°°ÀÌ ÇϽÃÁÒ'
'Á¦°¡ ÀÏ´Ü ¸®ÆÑÅä·©À» ÁøÇàÇØ º¼²²¿ä'
¶ó´Â ¸»À» ÇÑ´Ù.

´Þ¶óÁø ÄÚµåÀÇ ¸ð½ÀÀ» º¸¸é °³¹ßÀÚµµ ±àÁ¤ÀûÀ¸·Î ¹Ù²î±ä ÇÏ´õ¶ó.
¸®ÆÑÅ丵Àº °³ÀÎÀÌ Ã¥ÀÓÁö°í ÇÏ´Â °Íº¸´Ù ÇÔ²² À§Çè¿¡ ´ëÇÑ ¿ä¼Ò¸¦ ºÐ´ãÇØ °¡¸é¼­ ÁøÇàÇÏ´Â°Ô ÁÁÀº°Å °°´Ù.
ƯÈ÷ pair·Î ÁøÇàÇÏ´Â °æ¿ì ½Ã°£ ¼Ò¿ä´Â ÀÖÁö´Â °³¹ßÀÚ¿Í ³ª ¸ðµÎ ¾ÈÁ¤°¨À» °¡Áö´õ¶ó.

foo() 
{ 
    .... 
    .... 
    .... 
    for() 
    { 
        .... 
        if() 
        { 
            .... 
            if() 
            { 
                .... 
                return FALSE 
            } 
            .... 
        } 
        else 
        { 
            .... 
            if() 
            { 
                .... 
                return FALSE 
            } 
            .... 
        } 
         
        .... 
    } 
    .... 
    .... 
} 
 
====> 
 
foo() 
{ 
    .... 
    .... 
    .... 
    if(do_something1() == FALSE) 
        return FALSE; 
    .... 
    .... 
} 
 
bool do_something1() 
{ 
    for() 
    { 
        .... 
        if() 
        { 
            .... 
            if() 
            { 
                .... 
                return FALSE 
            } 
            .... 
        } 
        else 
        { 
            .... 
            if() 
            { 
                .... 
                return FALSE 
            } 
            .... 
        } 
         
        .... 
    } 
    return TRUE; 
} 

¾îÁ¦ ¸®ÆÑÅ丵 °ü·Ã À̾߱⸦ ÇÏ´Ù°¡ °³¹ßÀÚ°¡ ´ë¶ä ÀÌ·± À̾߱⸦ Çß´Ù.
'Á»´õ ÀÏÂï ¸¸³µ´õ¶ó¸é ÁÁ¾ÒÀ»ÅÙµ¥¿ä. ¸¹ÀÌ ¾Æ½¬¿ö¿ä'
±× °³¹ßÀÚ´Â Á»´õ ¸¹Àº ºÎºÐÀ» ¸®ÆÑÅ丵ÇÏ°í ½Í¾îÇÑ´Ù. ÇöÀç Ãâ½Ã ÀÏÁ¤À¸·Î ¸ðµç ÇÔ¼ö¿¡ ´ëÇØ¼­ ¸®ÆÑÅ丵À» ÇÏÁö ¸øÇÏ´Â °ÍÀÌ ¾Æ½±´Ù°í ÇÑ´Ù.

'ÆÄÀÏÀ» ºÐ¸®Çϸ鼭 Àü¿ªº¯¼ö·Î »ç¿ëÇØ¾ß ÇÒ²¨ °°¾Æ¿ä'
'Àú´Â ¿¹Àü¿¡ °³¹ßÇÒ ¶§ Àü¿ªº¯¼ö¸¦ ÀüÇô »ç¿ëÇÏÁö ¾Ê¾Ò¾î¿ä. Set/GetÀ¸·Î »ç¿ëÇÏ´Â°Ç ¾î¶³±î¿ä?'
'Àü¿ªº¯¼ö°¡ ÆíÇÏÁö ¾Ê³ª¿ä?'
¾îÁ¦ °³¹ßÀÚ¿Í ÀÌ·± ´ëÈ­¸¦ ³ª´©¾ú´Ù.
¸®ÆÑÅ丵À» ÁøÇàÇϸ鼭 Å« »çÀÌÁîÀÇ ÆÄÀÏÀ» ³ª´©´Â ÀÛ¾÷À» Çϰí ÀÖ¾ú´Ù.
ÆÄÀÏÀ» ³ª´©´Ùº¸¸é ÆÄÀÏ ³»¿¡¼­ static º¯¼ö·Î »ç¿ëÇÏ´ø ³ðÀ» ºÐ¸®ÇÑ ÆÄÀÏ¿¡¼­ ÂüÁ¶ÇØ¾ß Çϱ⿡ ÀÌ·± °í¹ÎÀ» ÇÏ°Ô µÇ´õ¶ó.

'µð¹ö±ë °üÁ¡¿¡¼­µµ Set/GetÀº Àǹ̰¡ ÀÖ½À´Ï´Ù. º¸Åë µð¹ö±ë¿¡¼­ Áß¿äÇÑ °ÍÀº ÇØ´ç º¯¼ö¿¡ »õ·Î¿î °ªÀ¸·Î assignÇÏ´À³Ä ¾Æ´Ï¸é ÇØ´ç º¯¼ö°ªÀ» ±×³É ÂüÁ¶¸¸ ÇÏ´À³Ä ÀÔ´Ï´Ù.
µð¹ö±ëÀ» À§Çؼ­ trace ¸Þ½ÃÁö¸¦ Âï´õ¶óµµ º¸Åë È®ÀÎÇÏ´Â °ÍÀº ÇØ´ç º¯¼ö¿¡ ƯÁ¤ °ªÀÌ assignµÇ´Â ½ÃÁ¡À» ã±â À§ÇØ ÇÏ´Â µð¹ö±ëÀÌ ¸¹ÁÒ. ÇÔ¼öÀ̸§ÀÌ Setº¯¼ö¸íÀÎ °æ¿ì¸¦ ãÀ¸¸é ÇØ´ç º¯¼ö¿¡ °ªÀÌ assignµÇ´Â °æ¿ì¸¦ ½±°Ô ãÀ» ¼ö ÀÖ¾î¿ä. ÇöÀç ó·³ Àü¿ªº¯¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç º¯¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ì¸¦ ¸ðµÎ °Ë»öÇØ¾ß ÇÏ°í ¶Ç assignÀÌ ÀϾÁö´Â ÂüÁ¶°¡ ÀϾ´ÂÁö¸¦ ´«À¸·Î ¸ðµÎ È®ÀÎÇØ ºÁ¾ßÇϰÚÁÒ. µð¹ö±ëÀ» ÇÒ ¶§ SetÇÔ¼ö¿¡¸¸ ƯÁ¤ Á¶°ÇÀ» ÁØ´Ù¸é ¿øÇÏ´Â °æ¿ì¸¦ ½±°Ô ã¾Æ³¾ ¼ö ÀÖ¾î¿ä. ƯÈ÷ ½Ã½ºÅÛ ÇÁ·Î±×·¥À̳ª m/w °³¹ßÀ» ÇÒ ¶§ ¾ÆÁÖ À¯¿ëÇÏ´Ù°í »ý°¢ÇÕ´Ï´Ù.'

* switchÀÇ return Á¦°Å (2009. 6. 25)

foo() 
{ 
    switch(condition) 
    { 
        case 1: 
           .... 
           .... 
           return; 
        case 2: 
           .... 
           .... 
           return; 
        case 3: 
           .... 
           .... 
           return; 
        case 4: 
           .... 
           .... 
           break; 
        case 5: 
           .... 
           .... 
           break; 
    } 
    .... 
    .... 
    .... 
} 
 
===> 
foo() 
{ 
    switch(condition) 
    { 
        case 1: 
           .... 
           .... 
           return; 
        case 2: 
           .... 
           .... 
           return; 
        case 3: 
           .... 
           .... 
           return; 
        case 4: 
           .... 
           .... 
           break; 
        case 5: 
           .... 
           .... 
           break; 
    } 
    do_something(); 
 
} 
 
===> 
foo() 
{ 
    switch(condition) 
    { 
        case 1: 
           .... 
           .... 
           break; 
        case 2: 
           .... 
           .... 
           break; 
        case 3: 
           .... 
           .... 
           break; 
        case 4: 
           .... 
           ....           
           do_something(); 
           break; 
        case 5: 
           .... 
           .... 
           do_something(); 
           break; 
        default: 
           do_something(); 
           break; 
    } 
} 
 
===> 
foo() 
{ 
    switch(condition) 
    { 
        case 1: 
           do_case1(); 
           break; 
        case 2: 
           do_case2(); 
           break; 
        case 3: 
           do_case3(); 
           break; 
        case 4: 
           do_case4(); 
           break; 
        case 5: 
           do_case5(); 
           break; 
        default: 
           do_something(); 
           break; 
    } 
} 
 
foo() 
{ 
    .... 
    .... 
    .... 
     
    if(flag & flag2) 
    { 
        if(flag && ...) 
        { 
           .... 
           .... 
           return; 
        } 
        if(flag && ...) 
        { 
           .... 
           .... 
           return; 
        } 
        .... 
        .... 
    } 
     
    if(flag && ...) 
    { 
         .... 
         .... 
         return; 
    } 
 
    if(flag && ...) 
    { 
         .... 
         .... 
         return; 
    } 
 
    if(flag && ...) 
    { 
         .... 
         .... 
        return; 
    } 
    .... 
    .... 
} 
===> 
 
foo() 
{ 
    .... 
    .... 
    .... 
     
    if(flag & flag2) 
    { 
        if(flag && ...) 
        { 
            do_something1(); 
            return; 
        } 
        if(flag && ...) 
        { 
            do_something2(); 
           return; 
        } 
        do_something7(); 
    } 
     
    if(flag && ...) 
    { 
         do_something3(); 
         return; 
    } 
 
    if(flag && ...) 
    { 
         do_something4(); 
         return; 
    } 
 
    if(flag && ...) 
    { 
        do_something5(); 
        return; 
    } 
    do_something6(); 
} 
GetCondition() 
{    
    if(flag & flag2) 
    { 
        if(flag && ...) 
        { 
            return condition1; 
        } 
        if(flag && ...) 
        { 
            return condition2; 
        } 
        do_something7(); 
    } 
     
    if(flag && ...) 
    { 
        return condition3; 
    } 
 
    if(flag && ...) 
    { 
        return condition4; 
    } 
 
    if(flag && ...) 
    { 
        return condition5; 
    } 
    return condition6; 
} 
 
foo() 
{ 
    condition = GetCondition(is_do_something7) 
 
    if(is_do_something7 == TRUE) 
        do_something7(); 
 
    switch(condition) 
    { 
        case 1: 
           do_something1(); 
           break; 
        case 2: 
           do_something2(); 
           break; 
        case 3: 
           do_something3(); 
           break; 
        case 4: 
           do_something4(); 
           break; 
        case 5: 
           do_something5(); 
           break; 
        case 6: 
           do_something6(); 
           break; 
    } 
} 

switch¹® Áß°£¿¡ #ifdef°¡ µé¾î°¡ ÀÖ´Â º¸±â ÁÁ°ÔÇÏ´Â ¹æ¹ýÀÌ ¾øÀ»±î? 
 
foo() 
{ 
    switch(condition) 
    { 
        case 1: 
            break; 
        case 2: 
            break; 
        case 3: 
            break; 
        case 4: 
            break; 
#ifdef OTHER_CONDITION 
        case 5: 
            break; 
        case 6: 
            break; 
        case 7: 
            break; 
#endif 
        case 8: 
            break; 
        case 9: 
            break; 
        default: 
            break; 
    } 
} 

º¸Åë if.. else if.. µîÀ¸·Î Á¶°ÇÀÌ ¿©·¯°ã ÁßøµÇ´Â °æ¿ì switch¹®À¸·Î º¯°æ°¡´ÉÇÑ °æ¿ì°¡ ¸¹´Ù.
switch¹®À¸·Î ¼öÁ¤Çϸé Äڵ尡 Á»´õ º¸±â ½¬¿î°Å °°´Ù.

void foo() 
{ 
    .... 
    .... 
    if(a>b) 
        return 1; 
    else if(b>a) 
        return -1; 
    .... 
    .... 
    if(c>d) 
        return 1; 
    else if(d>c) 
        return -1; 
    .... 
    .... 
    if(e>f) 
        return 1; 
    else if(f>e) 
        return -1; 
    .... 
} 
 
#define CompareMoreOrLess(a,b){    \ 
    if(a>b)                        \ 
        return 1;                  \ 
    else if(b>a)                   \ 
        return -1;                 \ 
} 
 
void foo() 
{ 
    .... 
    .... 
    CompareMoreOrLess(a,b) 
    .... 
    .... 
    CompareMoreOrLess(c,d) 
    .... 
    .... 
    CompareMoreOrLess(e,f) 
    .... 
} 

´ëºÎºÐÀÇ ÀÛ¾÷ÀÌ ±æÀ̰¡ ±ä ÇÔ¼ö¸¦ ÀÛ°Ô Âɰ³´Â ÀÏÀÌ´Ù.
¹°·Ð ÇÔ¼öÀ̸§À» °³¹ßÀÚ¿Í ÇÔ²² ½Å°æ½á¼­ Áþ°í Áߺ¹ÀÌ µÇ´Â °ÍÀ» Á¦°Åµµ Çß´Ù.
3ÁÖ Á¤µµ ÁøÇàÇÏ´Ùº¸´Ï ÃʹÝÀÇ Èñ¿­Àº ÀÌÁ¦ ¾à°£ÀÇ ±ÍÂúÀ½À¸·Î º¯Çß´Ù.

'¹º°¡ ´Ù¸¥ °ÍÀÌ ¾øÀ»±î?'

°³¹ßÀÚ¿Í À̾߱âÇϸ鼭 ÇÊ¿äÇÏ´Ù°í »ý°¢µÇ´Â ºÎºÐÀº
±âÁ¸Äڵ忡 »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇÏ´Â °æ¿ì ¾î¶² ½ÄÀ¸·Î Ãß°¡ÇؾßÇÒ±î?

string, time, bit µî°ú °ü·ÃµÈ ÀÚÁÖ »ç¿ëÇÏ´Â ¿¬»ê¿¡ ´ëÇÑ ¸®ÆÑÅ丵 ÆÐÅÏÀÌ ÇÊ¿äÇÔ. 
¾Æ·¡ ¿¹Á¦¿¡´Â time°ú string¿¡ °ü·ÃµÈ ÀÚÁÖ »ç¿ëÇÏ´Â ¿¹Á¦. 
 
void GetStringTimeFormatByTime(A_CHAR* szTime, int nHour, int nMinute, BOOL b12Hours) 
{ 
    BOOL bPM = FALSE; 
 
    if (b12Hours) 
    { 
        if (nHour >= 12) 
        { 
            bPM = TRUE; 
            if (nHour > 12) // 13:00~23:00 => 01:00~11:00 pm 
            { 
                nHour -= 12; 
            } 
        } 
        else 
        { 
            bPM = FALSE; 
            if (nHour == 0) // 00:00 => 12:00 am 
            { 
                nHour = 12; 
            } 
        } 
    } 
 
    // HH:MM or HH:MM XX (XX => AM or PM) 
    szTime[0] = '0' + (nHour / 10); 
    szTime[1] = '0' + (nHour % 10); 
    szTime[2] = ':'; 
    szTime[3] = '0' + (nMinute / 10); 
    szTime[4] = '0' + (nMinute % 10); 
 
    if (!b12Hours) 
    { 
        szTime[5] = '\0'; 
    } 
    else 
    { 
        if (!bPM) 
        { 
            szTime[5] = 'A'; 
        } 
        else 
        { 
            szTime[5] = 'P'; 
        } 
 
        szTime[6] = 'M'; 
        szTime[7] = '\0'; 
    } 
} 
 
===> 
void GetStringTimeFormatByTime(A_CHAR* szTime, int nHour, int nMinute, BOOL b12Hours) 
{ 
    BOOL bPM = FALSE; 
 
    if (b12Hours) 
    { 
        bPM = (nHour >= 12); 
        nHour = nHour % 12; 
 
        if (nHour == 0) // 00:00 => 12:00 am 
        { 
            nHour = 12; 
        } 
    } 
 
    SPRINTF(szTime, L"%02d:%02d", nHour, nMinute); 
 
    if(b12Hours) 
    { 
        SPRINTF(szTime+5, L"%s", (bPM)?L"PM":L"AM"); 
    } 
} 
 

°ü·Ã ¼­Àû

°ü·Ã »çÀÌÆ®


PythonPowered EditText of this page (last modified 2010-01-04 20:10:40)
FindPage by browsing, searching, or an index
Or try one of these actions: DeletePage, DeleteUploadedFile, LikePages, SpellCheck, UploadFile