| ¸®ÆÑÅ丵 | UserPreferences |
|
|
'¿ì¸®ÆÀÀº À̹ø¿¡ ¸®ÆÑÅ丵À» Çß¾î¿ä.'¶ó´Â ¸»À» µéÀ¸¸é ³ª´Â '¾Æ ¸®ÆÑÅ丵Àº ¹º°¡¿ä?' ¶ó°í ¹¯´Â´Ù. '¾Æ, ±×°Ç¿ä. Äڵ带 º¸±â ÁÁ°Ô ¸¸µå´Â°Ô ¸®ÆÑÅ丵ÀÔ´Ï´Ù.' ¶ó°í ÀÚ¶û½º·´°Ô ´ë´äÇÑ´Ù.
¸®ÆÑÅ丵À» Çß´Ù°í ÇÏ´Â ÄÚµåµéÀº ´ÙÀ½°ú °°Àº Ư¡ÀÌ ÀÖ´õ¶ó.
Áߺ¹À» Á¦°ÅÇÑ´Ù´øÁö ÇÔ¼ö¸¦ ÃßÃâÇØ ³½´Ù´øÁö ÇÏ´Â ÀÏÀº °ÅÀÇ ¾ø´Ù. |
|
³ª»Û ³¿»õ(Bad Smell)¸¦ ã´Â ¹æ¹ý Áß¿¡ Äڵ庹Àâµµ¸¦ ±âÁØÀ¸·Î ÇÏ´Â °Íµµ ÁÁ°Ú´Ù.
Äڵ庹Àâµµ°¡ ³ô°Ô ³ª¿Â ÄÚµå = ¸®ÆÑÅ丵ÀÌ ÇÊ¿äÇÑ ÄÚµå |
|
|
Unittest¸¦ ÁøÇàÇÏ¸é¼ º¹Àâµµ°¡ ³ôÀº ÇÔ¼öÀÇ °æ¿ì ¸®ÆÑÅ丵 ¾øÀÌ Unittest¸¦ ÁøÇàÇϱⰡ ¾î·Æ´Ù. º¹Àâµµ°¡ 130À̶ó¸é ÇϳªÀÇ ÇÔ¼ö¿¡ 130°³ ÀÌ»óÀÇ test case°¡ Á¸ÀçÇØ¾ßÇϱ⠶§¹®ÀÌ´Ù. ÀÌ·± °æ¿ì °¢ testcase¿¡ ´ëÇÑ À̸§À» Á¤ÀÇÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù. º¹ÀâÇØ¼ ¸®ÆÑÅ丵ÀÇ Çʿ伺À» ´À³¢Áö¸¸ ½±°Ô ¸®ÆÑÅ丵 ÁøÇàÀ» ÇÏ·ÁÇÏÁö ¾Ê´Â´Ù. ¹®Á¦°¡ ¹ß»ýÇÏ´Â °æ¿ì ÀÚ½ÅÀÌ Ã¥ÀÓÀ» Á®¾ßÇϰí ÇöÀç(?)±îÁöÀÇ ¹®Á¦°¡ ÇØ°áµÈ »óÅÂÀÇ ÄÚµå¶ó´Â »ý°¢¶§¹®ÀÌ´Ù. ƯÈ÷ ÀÚ½ÅÀÌ Á÷Á¢ °³¹ßÇÑ Äڵ尡 ¾Æ´Ñ °æ¿ì ¸®ÆÑÅ丵Àº »ó»óÁ¶Â÷ ÇÒ ¼ö ¾ø´Ù. °æÇèÇÑ ¹Ù·Î´Â ÁÖ¼®¹®À̳ª DebuggingÀ» À§ÇÑ ¸Þ½ÃÁö Á¶Â÷µµ ¹Ù²Ù´Â °ÍÀ» ½È¾îÇÑ´Ù.
¸®ÆÑÅ丵À» ÁøÇàÇÏ·Á´Â ½Ãµµ¸¦ ÇÏ·Á¸é ¸ÕÀú ½ÇÁ¦ ±¸Çö ´ã´çÀÚ¸¦ ¼³µæÇϴ ù°ÉÀ½ÀÌ´Ù. |
|
¹Ýº¹µÇ´Â ÆÐÅÏ Ã£±â
if()
...
...
...
... |
ȸ»ç¿¡¼ ¸®ÆÑÅ丵À» ÁøÇàÇÏ´Â °æ¿ì ¾î¶² ÀýÂ÷·Î ÁøÇàÇÒ ¼ö ÀÖÀ»±î?
|
¾Æ·¡¿Í °°Àº À̽´µé¿¡ ´ëÇØ¼ »ý°¢ÇØ º¸ÀÚ.
|
|
µ¢Ä¡°¡ Å« ÇÔ¼ö¿¡¼ extract ÇÏ´Â °æ¿ì Å«µ¢¾î¸®·Î ¸ÕÀú ºÐ¸®ÇØ ³¾ °ÍÀÎÁö ¾Æ´Ï¸é ÀÛÀº ºÎºÐÀ» ¸ÕÀú »©³¾ °ÍÀÎÁö °áÁ¤À» ÇØ¾ß ÇÑ´Ù. ÀÏÁ¾ÀÇ Top-downÀÌ³Ä Bottom-up À̳ĸ¦ °áÁ¤ÇÏ´Â ¼ø°£ÀÌ´Ù.
Top-down¹æ½ÄÀÌ ¿ì¼±ÀÌÁö ¾ÊÀ»±î »ý°¢ÇÑ´Ù.
foo()
.... .... ==> foo() {
do_something2(); ==>
do_something1()
do_something1_do_something2();
do_something2()
do_something2_do_something2();
Top-downÀÇ ÀåÁ¡ :
|
|
void foo() {
while(1) {
.... API_Call(&input); ....
===>
void foo()
while(1) {
do_something1(int* input)
.... API_Call(input); ....
do_something1ÇÔ¼ö·Î ÃßÃâÇÑ ÈÄ¿¡ inputÀ» paramter·Î »ç¿ëÇÑ´Ù. ÃßÃâÇÑ ÇÔ¼ö ³»ºÎ¿¡¼ API_CallÀÇ parameter¿¡ ´ëÇÑ º¯°æÀÌ ÇÊ¿äÇÏ´Ù. |
|
void foo() {
{
break;
break;
break; .... ....
===>
void foo()
{
break; foo_Debug_Print(id); .... ....
|
|
void foo() {
===>
void foo()
{
|
|
'ÀÌ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀº ¹º°¡¿ä?' 'ÇÔ¼ö À̸§À» Áö¾îº¼±î¿ä?' '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±îÁö ¾ø¾Ö·Á°í Çϱ⠺¸´Ù´Â ÇϳªÀÇ ¸ñÇ¥¸¦ Á¤ÇÏ°í ±× ¸ñÇ¥¸¦ Ãæ½ÇÈ÷ ´Þ¼ºÇÏ´Â ¹æÇâÀ¸·Î ÁøÇàÇÏ´Â °ÍÀÌ ¾ÈÁ¤ÀûÀÌ´Ù. |
ÀÌÆ²µ¿¾È ¸ðµâ´ã´çÀÚ¿Í ¸®ÆÑÅ丵À» ÁøÇàÇÏ´Ù°¡ ¿À´ÃÀº È¥ÀÚ¼ ÁøÇàÇß´Ù. ÇÔ²² ÀÛ¾÷ÇÏ´Ù°¡ È¥ÀÚÇÏ´Â °æ¿ì Àå´ÜÁ¡Àº ¹«¾ùÀϱî?
|
|
'ÀÌ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀÌ ¹º°¡¿ä?' 'À½... Àü¹ÝÀûÀΠ󸮸¦ ÇÕ´Ï´Ù.' 'Á» ±¸Ã¼ÀûÀ¸·Î À̾߱â ÇØÁÙ ¼ö ÀÖ³ª¿ä?' 'À½...'
º¹ÀâÇÑ ÇÔ¼ö´Â ¼ÖÁ÷È÷ ´ã´ç °³¹ßÀÚµµ Á¤È®È÷ ÆÄ¾ÇÀ» ¸øÇϰí ÀÖ´Â °æ¿ì°¡ ¸¹´Ù.
ÇѰ¡Áö °í¾ÈÇÑ ¹æ¹ýÀº ÇÔ¼öÀÇ Å« ±×¸²À» °°ÀÌ ±×·Áº¸´Â °ÍÀÌ´Ù.
foo()
{ } else { }
switch()
if(¾Æ³¯·Î±×)
if(¾Æ³¯·Î±×)
if(¾Æ³¯·Î±×)
==>
{ } else { }
switch()
if(¾Æ³¯·Î±×)
do_something2_¾Æ³¯·Î±×(); do_something3_¾Æ³¯·Î±×(); else {
do_something2_µðÁöÅÐ(); do_something3_µðÁöÅÐ();
ÀÌ·¸°Ô 1-2 depth Á¤µµ ¼öÁØ¿¡¼ ±× ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀ» Á¤ÀÇÇÏ¸é ½¬¿öÁø´Ù.
|
|
º¹ÀâÇÑ ÇÔ¼ö¸¦ ¸®ÆÑÅ丵ÇÏ´Ùº¸¸é ½Ç¼ö¸¦ Çϱ⠸¶·ÃÀÌ´Ù. ÄÄÆÄÀÏ ¿¡·¯°¡ ³ª±âµµ Çϰí ȤÀº Á¤»óÀûÀÎ µ¿ÀÛÀÌ ¾ÈµÇ´Â °æ¿ìµµ ÀÖ´Ù. º¸ÆøÀ» ÀÛ°Ô ÇÏ´õ¶óµµ ¹®Á¦¸¦ ¹ß»ýÇϱ⠸¶·ÃÀÌ´Ù. ¸®ÆÑÅ丵À» ÄÚĪÇÏ´Â °æ¿ì ¹®Á¦°¡ ¹ß»ýÇÏ¸é °³¹ßÀÚ´Â 'À̰б¦È÷ ÇѰŠ¾Æ³Ä?' 'Ȥ½Ã side effectµµ Àִ°Š¾Æ³Ä?' 'À̰Š¿ØÁö ºÒ¾ÈÇѵ¥' ÀÌ·± ¹ÝÀÀÀ» º¸ÀδÙ.
ÀÌ·± °æ¿ìµµ ÀÖ¾ú´Ù.
ºÎÁ¤ÀûÀÎ ´À³¦ÀÌ ´ã´çÀÚ¿¡°Ô °¡Áö ¾Êµµ·Ï ÃÖ´ëÇÑ Ä§ÂøÇÏ°Ô ´ëÀÀÇß´Ù. |
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´Ü°è ¸®ÆÑÅ丵À» ¸¶ÃÆ´Ù.
|
°³¹ßÀÚ´Â Ç×»ó ¹Ù»Ú´Ù. '¾ç»ê ¹®Á¦°¡ ÅÍÁ®¼¿ä. Áö±ÝÀº ½Ã°£ÀÌ ¾ø½À´Ï´Ù.' '³ªÁß¿¡ ÇÏ¸é ¾ÈµÉ±î¿ä? Áö±Ý ÇÒ ¿©·ÂÀÌ ¾ø¾î¿ä.' 'Áß¿äÇÑ ÀÏÀÎÁö´Â ¾Ë°Ú´Âµ¥¿ä... Áö±ÝÀº Á»...'
ÀÌ·± ¸»À» ³²±â°í ´Ù½Ã º¹ÀâÇÑ Äڵ忡¼ ¹®Á¦Á¡À» ã±â À§Çؼ À̸®Àú¸® µð¹ö±ëÇÏ´Â ¸ð½ÀÀÌ ³Ê¹« ¾ÈŸ±õ´Ù.
¸®ÆÑÅ丵À» Á¦¾ÈÇÒ ¶§
´Þ¶óÁø ÄÚµåÀÇ ¸ð½ÀÀ» º¸¸é °³¹ßÀÚµµ ±àÁ¤ÀûÀ¸·Î ¹Ù²î±ä ÇÏ´õ¶ó. |
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ÇÏ´À³Ä ¾Æ´Ï¸é ÇØ´ç º¯¼ö°ªÀ» ±×³É ÂüÁ¶¸¸ ÇÏ´À³Ä ÀÔ´Ï´Ù. |
* 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");
}
}