À©µµ¿ìÁî¿ë ÀÀ¿ë ÇÁ·Î±×·¥Àº ¿øÄ¢ÀûÀ¸·Î ¿©·¯ ¹ø ½ÇÇàÇÒ ¼ö ÀÖ´Ù. A.txt¿Í B.txt¸¦ µ¿½Ã¿¡ ÆíÁýÇÏ°í ½Í´Ù¸é ¸Þ¸ðÀå µÎ °³¸¦ ½ÇÇàÇÒ ¼ö ÀÖÀ¸¸ç ´ç±Ùµµ ¸¶Âù°¡Áö·Î µÎ ¹ø ½ÇÇàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¸ÖƼŽºÅ·ÀÌ °¡´ÉÇÑ ¿î¿µÃ¼Á¦À̹ǷΠÀÌ°ÍÀº Áö±ØÈ÷ ´ç¿¬ÇÑ Çö»óÀÌ´Ù. ±×·¯³ª ÇÁ·Î±×·¥ÀÇ Æ¯¼º»ó µÎ °³ ÀÌ»óÀÇ ÀνºÅϽº°¡ ½ÇÇàµÉ ¼ö ¾ø´Ù°Å³ª °¡´ÉÇÏ´Ù ÇÏ´õ¶óµµ ¹Ù¶÷Á÷ÇÏÁö ¸øÇÑ °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î À̺¥Æ® ·Î±×³ª SQL ¼¹ö °°Àº ¼ºñ½º ÇÁ·Î±×·¥Àº ÄÄÇ»ÅÍ ÇÑ´ë¿¡ ÇϳªÀÇ ¼ºñ½º¸¦ Á¦°øÇϹǷΠµÎ ¹ø ½ÇÇàÇÒ ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù.
MP3 ÆÄÀÏÀ» ¿¬ÁÖÇÏ´Â WinAmp°°ÀÌ µ¶Á¡ÀûÀÎ ÀÚ¿øÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥µµ µÎ ¹ø ½ÇÇàÇÒ ¼ö ¾ø´Ù. ¾îÂ÷ÇÇ ½Ã½ºÅÛ¿¡ »ç¿îµå Ä«µå´Â Çϳª¹Û¿¡ ¾ø°í ¼³»ç º¹¼ö °³ÀÇ ¼Ò¸®¸¦ ¹Í½ÌÇؼ µé·ÁÁÙ ¼ö ÀÖ´Ù ÇÏ´õ¶óµµ ±× ¼Ò¸®¸¦ µè´Â »ç¶÷ÀÌ °¢°¢ÀÇ ¼Ò¸®¸¦ ºÐ¸®Çؼ µèÁö ¸øÇϱ⠶§¹®ÀÌ´Ù. ½ºÅ¸Å©·¡ÇÁÆ®°°ÀÌ Àüü ȸéÀ» »ç¿ëÇÏ´Â °ÔÀÓµµ ÀϹÝÀûÀ¸·Î µü ÇÑ ¹ø¸¸ ½ÇÇàµÉ ¼ö ÀÖ´Ù.
±×·¸´Ù¸é ¿ì¸®°¡ Áö±Ý ¸¸µé°í ÀÖ´Â ´ç±Ù ÆíÁý±âÀÇ °æ¿ì´Â ¾î¶³±î? ½Ã½ºÅÛ ¼ºñ½º¸¦ Á¦°øÇÏ´Â °Íµµ ¾Æ´Ï°í Ưº°È÷ µ¶Á¡ÀûÀÎ ÀÚ¿øÀ» »ç¿ëÇÏ´Â °Íµµ ¾Æ´Ï¹Ç·Î ¿©·¯ ¹ø ½ÇÇàÇصµ º° ¹«¸®´Â ¾ø´Ù. ÇÏÁö¸¸ ÇѲ¨¹ø¿¡ º¹¼ö °³ÀÇ ÆÄÀÏÀ» ÆíÁýÇÒ ¼ö ÀÖ´Â MDI ÇÁ·Î±×·¥À̱⠶§¹®¿¡ ¿©·¯ ¹ø ½ÇÇàÇÏ´Â °ÍÀÌ º° Àǹ̰¡ ¾ø´Â °Íµµ »ç½ÇÀÌ´Ù. ¿ÀÈ÷·Á º¹¼ö °³ÀÇ ÀνºÅϽº¸¦ Çã¿ëÇÒ °æ¿ì ÀáÀçÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÀÒÀ» À§ÇèÀÌ ÀÖ´Ù. µÎ °³ÀÇ ÀνºÅϽº°¡ °°Àº ÆÄÀÏÀ» ÆíÁýÇÏ°í ÀÖÀ» °æ¿ì ¼·Î ÀÌ ÆÄÀÏÀ» µ¤¾î¾²°Ô µÇ¹Ç·Î ¸ÕÀú ÀúÀåÇÑ ÀνºÅϽºÀÇ ÆíÁý °á°ú°¡ ¼Õ»óµÉ °ÍÀÌ´Ù.
º¹¼ö °³ÀÇ ÀνºÅϽº°¡ º°·Î ¹Ù¶÷Á÷ÇÏÁö ¾ÊÁö¸¸ ±×·¸´Ù°í ²À °Á¦·Î ¸·¾Æ¾ß ÇÒ ÇÊ¿ä±îÁö´Â ¾ø´Ù. ÀÌ Á¤Ã¥Àº »ç¿ëÀÚÀÇ ÃëÇâ¿¡ µû¸¦ ¹®Á¦À̹ǷΠ¿É¼ÇÀ¸·Î Á¦°øÇÏ´Â °ÍÀÌ °¡Àå ¹«³ÇÏ´Ù. Option±¸Á¶Ã¼ÀÇ bAllowMulti º¯¼ö°¡ º¹¼ö °³ÀÇ ÀνºÅϽº¸¦ Çã¿ëÇÒ °ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ ÁöÁ¤Çϸç ÀÌ °ªÀÌ FALSEÀÌ¸é µü ÇÑ ¹ø¸¸ ½ÇÇàÇϵµ·Ï ÇÑ´Ù. TRUEÀÏ °æ¿ì º°´Ù¸¥ Á¶Ä¡¸¦ ÃëÇÒ ÇÊ¿ä¾øÀÌ ¾Æ¹«°Íµµ ÇÏÁö ¾ÊÀ¸¸é ÀÚ¿¬½º·´°Ô º¹¼ö °³ÀÇ ÀνºÅϽº°¡ ½ÇÇàµÈ´Ù.
ÇÑ ¹ø¸¸ ½ÇÇàµÇµµ·Ï ÇÏ´Â ¹æ¹ýÀº ¾ÆÁÖ °£´ÜÇÏ´Ù. ½ÇÇàµÉ ¶§ ÀÌ¹Ì ½ÇÇàÁßÀÎ ÀνºÅϽº°¡ ÀÖ´ÂÁö º¸°í ¸¸¾à ÀÖ´Ù¸é ´õ ÀÌ»ó ½ÇÇàÇÏÁö ¸»°í Á¾·áÇÏ¸é µÈ´Ù. °á±¹ ÀÌ ¹®Á¦´Â °°Àº ÇÁ·Î±×·¥ÀÇ ÀÌÀü ÀνºÅϽº¸¦ ¾î¶»°Ô ãÀ» °ÍÀΰ¡ÀÇ ¹®Á¦ÀÌ´Ù. °¡Àå ½¬¿î ¹æ¹ýÀº FindWindow ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀε¥ ´ç±ÙÀº °íÁ¤µÈ À©µµ¿ì Ŭ·¡½º À̸§À» °¡Áö°í ÀÖÀ¸¹Ç·Î ÀÌ ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ¿Ü¿¡ ÆÄÀÏ ¸ÅÇÎÀ̳ª ¹ÂÅؽº°°ÀÌ ½Ã½ºÅÛ Àü¿ªÀûÀ¸·Î À¯ÀÏÇÑ Ä¿³Î °´Ã¼¸¦ ÀÌÀü ÀνºÅϽº ½Äº°¿¡ »ç¿ëÇÒ ¼ö Àִµ¥ ¿©±â¼´Â ¹ÂÅؽº¸¦ »ç¿ëÇغ¸µµ·Ï ÇÏÀÚ. WinMain¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HANDLE hMutex;
....
Option.bAllowMulti=SHRegReadInt(SHCU,KEY"Setting","bAllowMulti",0);
if (Option.bAllowMulti==FALSE) {
#ifdef _DEBUG
hMutex=CreateMutex(NULL,FALSE,"Dangeun_Mutex_For_Debug");
#else
hMutex=CreateMutex(NULL,FALSE,"Dangeun_Mutex_For_Allow_Unique_Instance");
#endif
if (GetLastError() == ERROR_ALREADY_EXISTS) {
ActivateBrood();
return 0;
}
}
hMenu1=LoadMenu(g_hInst,MAKEINTRESOURCE(IDR_MENU1));
hMenu2=LoadMenu(g_hInst,MAKEINTRESOURCE(IDR_MENU2));
....
if (hMutex) {
CloseHandle(hMutex);
}
return (int)Message.wParam;
}
bAllowMulti°¡ FALSEÀÏ ¶§´Â Àü¿ª ¹ÂÅؽº¸¦ »ý¼ºÇ쵂 ´Ù¸¥ ¹ÂÅؽºÆ®¿Í Ãæµ¹ÇÏÁö ¾Êµµ·Ï ÃæºÐÈ÷ ±ä À̸§À» ÁÖ¾ú´Ù. À̶§ ¹ÂÅؽº°¡ ÀÌ¹Ì ÀÖ´Ù¸é, Áï ÀÌÀü ÀνºÅϽº°¡ ¹ÂÅؽº¸¦ ¸¸µé¾î ³õ¾Ò´Ù¸é ÀÌ ÇÁ·Î±×·¥Àº ½ÇÇàµÇÁö ¸»¾Æ¾ß ÇÑ´Ù. ±×·¡¼ ¾Æ¿¹ ¸ÞÀÎ À©µµ¿ìµµ ¸¸µéÁö ¾Ê°í return 0;·Î Á¾·áÇÏ¿´´Ù. ÀÌ ¹ÂÅؽº´Â ¸Þ½ÃÁö ·çÇÁ°¡ Á¾·áµÇ¾úÀ» ¶§ Æı«µÇ¸ç ¹ÂÅؽº°¡ Æı«µÈ ÈÄ¿¡ ´Ù¸¥ ÀνºÅϽº°¡ ½ÇÇàµÉ ¼ö ÀÖ´Ù.
ÇÑ ¹ø¸¸ ½ÇÇàÀ» Çã¿ëÇϱâ À§ÇØ ¹ÂÅؽº¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ÀϹÝÈµÈ ¹æ¹ýÀ̹ǷΠ¹ÂÅؽºÀÇ Á¤ÀǸ¸ ¾Ë°í ÀÖ´Ù¸é ±â¹ý ÀÚü´Â º°·Î ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ Äڵ忡´Â ¸î °¡Áö ƯÀÌÇÑ Á¡ÀÌ Àִµ¥ ƯÀÌÁ¡µé¿¡ ´ëÇؼ¸¸ ¿¬±¸Çغ¸µµ·Ï ÇÏÀÚ. ¿ì¼± µð¹ö±× ¹öÀüÀÏ ¶§¿Í ¸±¸®Áî ¹öÀüÀÏ ¶§ÀÇ ¹ÂÅؽº À̸§ÀÌ ´Ù¸¥µ¥ ÀÌ´Â °³¹ßÁß¿¡´Â ¸±¸®Áî ¹öÀüÀÇ ´ç±ÙÀ» ¾Æ¿¹ ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ÀνÄÇϵµ·Ï Çϱâ À§ÇؼÀÌ´Ù. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ´ç±Ù °³¹ßÁß¿¡´Â ´ç±ÙÀ» ¾µ ¼ö ¾ø´Ù´Â ¹¦ÇÑ Á¦¾àÀÌ »ý°Ü ¹ö¸°´Ù. ÀÌ ÄÚµå´Â ´Ü¼øÈ÷ °³¹ßÀÚÀÇ ÆíÀǸ¦ À§ÇØ Á¸ÀçÇÒ »Ó ´Ù¸¥ ÀÌÀ¯´Â ¾ø´Ù.
´ÙÀ½Àº bAllowMulti ¿É¼ÇÀ» Àд ½ÃÁ¡¿¡ ´ëÇØ »ý°¢Çغ¸ÀÚ. Option ±¸Á¶Ã¼ ÀÚü´Â OnCreate¿¡¼ ÀÐÇôÁö´Âµ¥ ÀÌ ¿É¼ÇÀº WinMainÀÇ ¼±µÎ¿¡¼ Àû¿ëÇϱ⠶§¹®¿¡ ¹Ì¸® ¸ÕÀú Àоî¾ß ÇÑ´Ù. ´Ù¸¥ ¿É¼Ç°ú´Â ´Þ¸® ÇÁ·Î±×·¥ ½ÇÇàÀ» °è¼ÓÇÒ °ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ °áÁ¤ÇÏ´Â ¿ö³« Ư¼öÇÑ ¿É¼ÇÀ̶ó ¸ÞÀÎ À©µµ¿ì°¡ »ý¼ºµÇ°í ³ ´ÙÀ½¿¡ Àо ³Ê¹« ´Ê´Ù. Àá½Ã ÈÄ¿¡ ´Ù½Ã º¸°Ô µÇ°ÚÁö¸¸ ÀÌ ¿É¼ÇÀ» ÀúÀåÇÏ´Â ½ÃÁ¡µµ ¾ÆÁÖ Æ¯ÀÌÇÏ´Ù.
ÀÌ¹Ì ½ÇÇàÁßÀÎ ÀνºÅϽº°¡ ÀÖÀ» ¶§´Â return 0;·Î WinMainÀ» Á¾·áÇ쵂 ±× Àü¿¡ ½ÇÇàÁßÀÎ ÀνºÅϽº¸¦ È°¼ºÈ½ÃÄÑ ÁÖµµ·Ï Çß´Ù. ±×³É Á¶¿ëÈ÷ Á¾·áÇÏ¸é »ç¿ëÀÚ´Â ¹«¾ùÀÌ À߸øµÇ¾ú´ÂÁö ¾Ë ¼ö ¾øÀ¸¹Ç·Î È¥¶õ½º·¯¿ï °ÍÀÌ´Ù. ±×·¡¼ ÀÚ½ÅÀº Á×Áö¸¸ ´ë½Å ÀÚ±â ÇüÀ» ¼Ò°³Çϵµ·Ï ÇßÀ¸¸ç ÀÌ ÀÏÀ» ÇÏ´Â ÇÔ¼ö°¡ ActivateBrood ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â À¯Æ¿¸®Æ¼ ÇÔ¼ö°¡ ¾Æ´Ï¹Ç·Î Dangeun.cpp¿¡ ÀÛ¼ºÇÑ´Ù.
void ActivateBrood()
{
HWND hBrood;
ATOM hAtom;
hBrood=FindWindow(lpszClass,NULL);
if (hBrood==NULL) {
return;
}
if (__argc >1 ) {
hAtom=GlobalAddAtom(__argv[1]);
SendMessage(hBrood,WM_USER+1,(WPARAM)hAtom,0);
GlobalDeleteAtom(hAtom);
} else {
SendMessage(hBrood,WM_USER+1,0,0);
}
SetForegroundWindow(hBrood);
}
ÀÌÀü ÀνºÅϽºÀÇ ¸ÞÀÎ À©µµ¿ì¸¦ FindWindow·Î °Ë»öÇß´Ù. À©µµ¿ì Ŭ·¡½º¸íÀÌ ¡®Dangeun¡¯À̶ó´Â °íÀ¯ÇÑ À̸§À¸·Î µÇ¾î ÀÖÀ¸¹Ç·Î ½±°Ô ¸ÞÀÎ À©µµ¿ì¸¦ ãÀ» ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ãÀº À©µµ¿ì¸¦ È°¼ºÈ½ÃÄÑÁÖµÇ ¸¸¾à Àμö°¡ ÀÖ´Ù¸é ÀÌ Àμöµµ Àü´ÞÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ù ¹ø° ÀνºÅϽº°¡ ½ÇÇàÁßÀÌ°í Ž»ö±â Æ˾÷¸Þ´º¿¡¼ Readme.txt¸¦ ¿¾ú´Ù¸é µÎ ¹ø° ÀνºÅϽº°¡ ÀÌ ÆÄÀϸíÀ» ¹Þ¾Æ¼ ù ¹ø° ÀνºÅϽº¿¡°Ô ´ë½Å ¿¾î ´Þ¶ó°í ºÎŹÀ» ÇÏ´Â °ÍÀÌ´Ù.
ÆÄÀϸíÀº ¹®ÀÚ¿À̹ǷΠÇÁ·Î¼¼½º³¢¸® ÀÌ ¹®ÀÚ¿À» Àü´ÞÇϱâ À§Çؼ´Â IPC¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. WM_COPYDATA, ÆÄÀÏ ¸ÅÇÎ, ÆÄÀÌÇÁ µîÀÇ ¿©·¯ °¡Áö IPC ¹æ¹ýÀÌ ÀÖÁö¸¸ ¿©±â¼´Â °¡Àå °£´ÜÇÑ ±Û·Î¹ú ¾ÆÅèÀ» »ç¿ëÇß´Ù. ÆÄÀϸíÀ» ±Û·Î¹ú ¾ÆÅèÀ¸·Î µî·ÏÇÏ°í ±× ÇÚµéÀ» WM_USER+1ÀÇ wParamÀ¸·Î Àü´ÞÇß´Ù. ±×¸®°í ¾ÆÅèÀ» »èÁ¦ÇÑ ÈÄ ÀÌÀü ÀνºÅϽº¸¦ È°¼ºÈ½ÃÅ°¸é µÈ´Ù. ÀÌ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀ» Á» Àͻ콺·´°Ô Ç¥ÇöÇÏÀÚ¸é ¡®¿ì¸® Çü ¾îµð ÀÖ³ª? ¿©±â ÀÖ±º! Çü ³ª °©´Ï´Ù. ´ë½Å ÀÌ ÆÄÀÏÀ» Á» ¿¾î Áà¿ä¡¯ ÇÏ´Â ²ÃÀÌ´Ù. ¸¸¾à ÇüÀÌ ÀÚ°í ÀÖ´Ù¸é(ÃÖ¼ÒÈ) ±ú¾îÁÖ±â±îÁö ÇÑ´Ù.
±×·¸´Ù¸é ÀÌÀü ÀνºÅϽºÀÎ ÇüÀº µ¿»ýÀÌ Àü´ÞÇÏ´Â ÆÄÀϸíÀ» ¹Þ¾Æ ÀÌ ÆÄÀÏÀ» ¿¾î¾ß ÇÒ Àǹ«°¡ ÀÖ´Ù. WM_USER+1 ¸Þ½ÃÁö(=Çü ÀϾ) Çڵ鷯¸¦ ¸¸µé°í ÀÌ Çڵ鷯¿¡¼ wParamÀ¸·Î Àü´ÞµÇ´Â ¾ÆÅè ÇÚµé·ÎºÎÅÍ ÆÄÀϸíÀ» ÃßÃâÇÏ¿© ¿¾î ÁÖ¸é µÈ´Ù. ¹°·Ð wParamÀÌ NULLÀ̸é ÆÄÀÏÀ» ¿ ÇÊ¿ä°¡ ¾ø´Ù.
LRESULT CALLBACK DGWndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage) {
....
case WM_USER+1:OnUser1(hWnd,wParam,lParam);return 0;
}
return(DefFrameProc(hWnd,g_hMDIClient,iMessage,wParam,lParam));
}
void OnUser1(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
TCHAR Path[MAX_PATH];
if (wParam) {
GlobalGetAtomName((ATOM)wParam,Path,MAX_PATH);
OpenFromFile(Path);
}
if (IsIconic(hWnd)) {
ShowWindow(hWnd,SW_RESTORE);
}
}
¾ÆÅè¿¡ µî·ÏµÈ ¹®ÀÚ¿Àº ´ë»ó ÆÄÀÏÀÇ Àý´ë°æ·ÎÀ̹ǷΠOpenFromFile ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. ¾ÆÅèÀº ÇöÀç ÀνºÅϽº°¡ ¸¸µç °ÍÀÌ ¾Æ´Ï¹Ç·Î ¿©±â¼ Æı«ÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. ¸¸¾à ÀÚ½ÅÀÌ ÃÖ¼ÒȵǾî ÀÖ´Â »óȲÀ̶ó¸é º¹±¸ÇÏ¿© »ç¿ëÀÚ°¡ Áö½ÃÇÑ ÆÄÀÏÀ» Á¦´ë·Î ¿¾úÀ½À» ¸íÈ®È÷ º¸¿©ÁÖµµ·Ï Çß´Ù.
bAllowMulti ¿É¼Çµµ »ç¿ëÀÚ°¡ ÃëÇâ¿¡ µû¶ó ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¿É¼ÇÀ̹ǷΠ¼³Á¤ ´ëÈ»óÀÚ¿¡¼ °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿É¼ÇÀÌ ±â·ÏµÇ´Â ½ÃÁ¡Àº ´Ù¸¥ ¿É¼Ç°ú´Â ´Þ¸® ¾ÆÁÖ Æ¯ÀÌÇÏ´Ù. ApplyNow¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ.
void ApplyNow()
{
HWND hChild;
SInfo *pSi;
HDC hdc;
LOGFONT tFont;
if (Option.bAllowMulti != NewOption.bAllowMulti) {
SHRegWriteInt(SHCU,KEY"Setting","bAllowMulti",NewOption.bAllowMulti);
}
....
»ç¿ëÀÚ°¡ ÀÌ ¿É¼ÇÀ» º¯°æÇßÀ¸¸é ±× Áï½Ã ·¹Áö½ºÆ®¸®¿¡ ±â·ÏÇØ ¹ö¸°´Ù. ¿Ö³ÄÇϸé ÀÌ ¿É¼ÇÀÇ È¿°ú´Â ÇöÀç ÀνºÅϽº¿¡¸¸ ±¹ÇѵǴ °ÍÀÌ ¾Æ´Ï¶ó ÀÌÈĺÎÅÍ ½ÇÇàµÉ ¸ðµç ÀνºÅϽº°¡ ÂüÁ¶ÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù. ¿É¼Ç º¯°æÀÇ È¿°ú°¡ Áï½Ã ³ªÅ¸³ª±â À§Çؼ´Â Option::Save ÇÔ¼ö°¡ È£ÃâµÉ ¶§±îÁö ±â´Ù¸± ¼ö ¾ø´Ù. ApplyNow¿¡¼ ±â·ÏÀ» ÇϹǷΠSave ÇÔ¼ö´Â ÀÌ ¿É¼ÇÀ» ±â·ÏÇÏÁöµµ ¾Ê´Â´Ù. Àû¿ë ½ÃÁ¡, ÀúÀå½ÃÁ¡, Àд ½ÃÁ¡¿¡ ÀÖ¾î¼ ´Ù¸¥ ¿É¼Çµé°ú´Â Á¤¸» ¸¹ÀÌ ´Ù¸¥ ƯÀÌ ¿É¼ÇÀÌ´Ù.