10.°¡º¯ ±æÀÌ ÆÐŶ

ÇöÀç ±¸Á¶´Â Çì´õº°·Î ÀÏÁ¤ÇÑ Å©±âÀÇ ¹öÆÛ¸¦ ÁغñÇØ ³õ°í ÆÄÀÏ¿¡¼­ ¹öÆÛ Å©±â¸¸Å­ ÀоîµéÀδÙ. ÀÌ°ÍÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â ºñ¾ÐÃà Æ÷¸ËÀÌ°í ·ÎÄÿ¡ ÀÖ´Â ÆÄÀÏÀ̱⠶§¹®ÀÌ´Ù. »ç½Ç ¿þÀ̺ê ÆÄÀÏ·Î À½¾ÇÀ» µè´Â »ç¶÷µµ ¾ø°í µ¿¿µ»óÀÇ À½¼ºÀÌ ¿þÀ̺ê·Î µÇ¾î ÀÖÁöµµ ¾Ê´Ù. ¿þÀ̺ê Àç»ýÀÌ ÇÊ¿äÇÑ ÀÌÀ¯´Â ¾ÐÃàÀ» Ç®¾î Àç»ýÇϱâ À§Çؼ­ÀÌ´Ù.

¾ÐÃà Æ÷¸ËÀº ÀоîµéÀÌ´Â ±æÀÌ°¡ ÀÏÁ¤Çصµ Ç®¾úÀ» ¶§ÀÇ ±æÀÌ´Â ÀÏÁ¤ÇÏÁö ¾Ê´Ù. 1K¸¦ ÀоúÀ» ¶§ ¾ÐÃàÀ» Ç®¸é 2K°¡ µÉ ¼öµµ ÀÖ°í 5K°¡ µÉ ¼öµµ ÀÖ¾î °¡º¯ÀûÀÌ´Ù. °Ô´Ù°¡ ³×Æ®¿öÅ©¸¦ ÅëÇØ ½ºÆ®¸²À¸·Î ¹Þ´Â´Ù¸é Çѹø¿¡ µé¾î¿À´Â µ¥ÀÌÅ;絵 ÀÏÁ¤Ä¡ ¾Ê´Ù. ¸ðµç °ÍÀÌ °íÁ¤ÀûÀÌÁö ¾Ê°í °¡º¯ÀûÀÌ´Ù. µû¶ó¼­ ¿þÀ̺ê Àç»ý ·çƾµµ ÀÌ·± »óȲÀ» ´ëºñÇØ¾ß ÇÑ´Ù.

¹öÆÛ ±æÀ̸¸Å­ Àд °ÍÀÌ ¾Æ´Ï¶ó ÀÓÀÇ ±æÀÌÀÇ ÆÐŶÀ» ¹Þ¾Æ µé¿©¾ß ÇÑ´Ù. ¹öÆÛ¸¦ ´ú ä¿üÀ¸¸é ´Ù ä¿ï ¶§±îÁö ´ë±âÇÏ°í ÆÐŶÀÌ ³²¾ÒÀ¸¸é ´ÙÀ½ ¹öÆÛ·Î ³Ñ°Ü Áà¾ß ÇÑ´Ù. ¹öÆÛ Å©±â¿Í ÆÐŶ Å©±âÀÇ ÀÓÀÇ Á¶ÇÕÀ» ´Ù Áö¿øÇØ¾ß ÇÑ´Ù. Á¶°¢³­ ÆÐŶÀ» Á¶°¢³­ ¹öÆÛ¿¡ ä¿ö ³Ö´Â ½ÄÀ̶ó Á¦¾î ±¸Á¶°¡ º¹ÀâÇÏ´Ù. ¿Ï¼ºµÈ ¿¹Á¦¸¦ º¸°í ºÐ¼®ÇØ º¸ÀÚ.

 

#include <stdio.h>

#include <windows.h>

 

#pragma comment(lib, "winmm.lib")

 

HWAVEOUT hWaveDev;

HANDLE hFile;

DWORD dwRead;

WAVEFORMATEX wf;

const int hdrnum = 3;

const int bufsize = 3000;

const int pktsize = 2000;

WAVEHDR hdr[hdrnum];

char samplebuf[hdrnum][bufsize];

long availhdr = hdrnum;

int nowhdr = 0;

char pktbuf[pktsize];

char* pktptr;

char* bufptr;

 

void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) {

           if (uMsg == WOM_DONE) {

                        InterlockedIncrement(&availhdr);

           }

}

 

int PlayWave(LPCTSTR song)

{

           hFile = CreateFile(song, GENERIC_READ, FILE_SHARE_READ, NULL,

                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

           if (hFile == INVALID_HANDLE_VALUE) {

                        puts("file not found");

                        return -1;

           }

 

           wf.cbSize = sizeof(WAVEFORMATEX);

           wf.wFormatTag = WAVE_FORMAT_PCM;

           SetFilePointer(hFile, 22, NULL, SEEK_SET); ReadFile(hFile, &wf.nChannels, 2, &dwRead, NULL);

           SetFilePointer(hFile, 24, NULL, SEEK_SET); ReadFile(hFile, &wf.nSamplesPerSec, 4, &dwRead, NULL);

           SetFilePointer(hFile, 34, NULL, SEEK_SET); ReadFile(hFile, &wf.wBitsPerSample, 2, &dwRead, NULL);

           wf.nBlockAlign = wf.nChannels * wf.wBitsPerSample / 8;

           wf.nAvgBytesPerSec = wf.nSamplesPerSec * wf.nBlockAlign;

 

           waveOutOpen(&hWaveDev, WAVE_MAPPER, &wf, (DWORD)waveOutProc, 0, CALLBACK_FUNCTION);

           SetFilePointer(hFile, 44, NULL, SEEK_SET);

 

           for (int i = 0; i < hdrnum; i++) {

                        hdr[i].lpData = samplebuf[i];

           }

 

           // »ùÇà ¹öÆÛ Æ÷ÀÎÅÍ ÃʱâÈ­.

           bufptr = samplebuf[nowhdr];

 

           // ÆÄÀÏ ´Ù ÀÐÀ» ¶§±îÁö ¹Ýº¹

           for (;;) {

                        ReadFile(hFile, pktbuf, pktsize, &dwRead, NULL);

                        // ÆÄÀÏ ³¡ µµ´ÞÇßÀ¸¸é ³ª¸ÓÁö »ùÇà µ¥ÀÌÅÍ º¸³»°í Á¾·áÇÑ´Ù.

                        if (dwRead == 0) {

                                     hdr[nowhdr].dwBufferLength = bufptr - samplebuf[nowhdr];

                                     waveOutPrepareHeader(hWaveDev, &hdr[nowhdr], sizeof(WAVEHDR));

                                     waveOutWrite(hWaveDev, &hdr[nowhdr], sizeof(WAVEHDR));

                                     InterlockedDecrement(&availhdr);

                                     break;

                        }

 

                        // ÆÐŶ Æ÷ÀÎÅÍ ÃʱâÈ­. ³²Àº ÆÐŶ ÃʱâÈ­

                        pktptr = pktbuf;

                        int remainpkt = dwRead;

 

                        // ÆÐŶÀ» ´Ù ¾µ ¶§±îÁö ¹Ýº¹ÇÑ´Ù.

                        for (;;) {

                                     int remainbuf = bufsize - (bufptr - samplebuf[nowhdr]);

 

                                     // ¹öÆÛ ³²Àº¾çº¸´Ù ÆÐŶÀÌ ´õ ÀÛÀ¸¸é ä¿ö ³Ö°í ¹öÆÛ Æ÷ÀÎÅÍ À̵¿ ÈÄ ÆÄÀÏ Àб⠷çƾÀ¸·Î µ¹¾Æ°£´Ù.

                                     if (remainpkt < remainbuf) {

                                                  memcpy(bufptr, pktptr, remainpkt);

                                                  bufptr += remainpkt;

                                                  break;

                                     }

 

                                     // ÆÐŶÀÌ ´õ ¸¹À¸¸é ³²Àº ¹öÆÛ¸¦ °¡µæ ä¿î´Ù.

                                     memcpy(bufptr, pktptr, remainbuf);

 

                                     // ¾´¸¸Å­ ÆÐŶÀº °¨¼ÒÇÏ°í ¹öÆÛ Æ÷ÀÎÅÍ´Â µÚ·Î À̵¿ÇÑ´Ù.

                                     remainpkt -= remainbuf;

                                     pktptr += remainbuf;

 

                                     hdr[nowhdr].dwBufferLength = bufsize;

                                     waveOutPrepareHeader(hWaveDev, &hdr[nowhdr], sizeof(WAVEHDR));

                                     waveOutWrite(hWaveDev, &hdr[nowhdr], sizeof(WAVEHDR));

 

                                     InterlockedDecrement(&availhdr);

 

                                     while (availhdr == 0) Sleep(20);

 

                                     // ´ÙÀ½ ¹öÆÛ·Î À̵¿ÇÏ°í ¹öÆÛ Æ÷ÀÎÅ͸¦ ÃʱâÈ­ÇÑ´Ù.

                                     if (++nowhdr == hdrnum) nowhdr = 0;

                                     bufptr = samplebuf[nowhdr];

                        }

           }

 

           while (waveOutClose(hWaveDev) == WAVERR_STILLPLAYING) { Sleep(10); }

           CloseHandle(hFile);

           return 0;

}

 

int main()

{

           PlayWave(TEXT("c:\\Temp\\takeonme.wav"));

}

 

¸î °³ÀÇ º¯¼ö°¡ »õ·Î Ãß°¡ µÇ¾ú°í Àç»ý ·çÇÁ´Â ¿ÏÀüÈ÷ ´Ù½Ã ÀÛ¼ºÇß´Ù. ÆÐŶÀÇ Å©±â¸¦ ÁöÁ¤ÇÏ´Â pktsize »ó¼ö°¡ Ãß°¡µÇ¾úÀ¸¸ç 2000À¸·Î ÃʱâÈ­Çß´Ù. ±×¸®°í ÀÌ Å©±â¸¸Å­ pktbuf¸¦ Á¤Àû ¹è¿­·Î ¼±¾ðÇÑ´Ù. ÆÐŶ Å©±â¿Í ¹öÆÛ Å©±â°¡ ´Þ¶ó ÆÄÀÏ¿¡¼­ ÀÐ¾î ¹öÆÛ¿¡ ¹Ù·Î ÀúÀåÇÒ ¼ö ¾øÀ¸¸ç ±×·¡¼­ ÆÐŶÀ» Àӽ÷ΠÀúÀåÇÒ ¹öÆÛ°¡ ÇÊ¿äÇÏ´Ù.

¹öÆÛ Å©±â´Â 3000À¸·Î ÁöÁ¤Çß´Ù. È¿À²À» À§ÇØ ÆÐŶ°ú ¹öÆÛ´Â ´õ Å©°Ô Àâ¾Æ¾ß ÇÏ°í ¹è¼ö °ü°èÀÎ °ÍÀÌ ÁÁÀ¸¸ç ¹öÆÛ °³¼öµµ ³Ë³ËÇØ¾ß ÇÑ´Ù. ÇÏÁö¸¸ Áö±ÝÀº ÇнÀÁßÀ̹ǷΠµ¿ÀÛ °úÁ¤À» »ó¼¼ÇÏ°Ô °üÂûÇØ º¸±â À§ÇØ °íÀÇÀûÀ¸·Î ¹è¼ö°¡ ¾Æ´Ñ °ªÀ¸·Î ¼³Á¤ÇÏ°í ¹öÆÛµµ 3°³¸¸ »ç¿ëÇÑ´Ù. ³Ê¹« ÀÛÀº Å©±â°¡ ¾Æ´Ï¸é ÀÓÀÇÀÇ ¾î¶² Á¶ÇÕÀÌ¶óµµ µ¿ÀÛ °¡´ÉÇÏ´Ù. ÀÌ »óÅ¿¡¼­ »ùÇà µ¥ÀÌÅ͸¦ ¾î¶»°Ô ä¿ö Àåºñ·Î º¸³»´ÂÁö ³»ºÎ µ¿ÀÛ °úÁ¤À» À¯ÃßÇØ º¸ÀÚ. ÃÖÃÊ ½ÇÇà½Ã ´ÙÀ½ °úÁ¤À» °ÅÃÄ ¹öÆÛ¸¦ ä¿ì°í »ç¿ëÇÑ´Ù.

µÎ°³ÀÇ for ¹«ÇÑ ·çÇÁ°¡ Àִµ¥ ¹Ù±ùÂÊ ·çÇÁ´Â ÆÄÀÏÀ» ´Ù ÀÐÀ» ¶§±îÁö ¹Ýº¹ÇÏ¸ç ¾ÈÂÊ ·çÇÁ´Â ÆÐŶ Çϳª¸¦ ´Ù ¾µ ¶§±îÁö ¹Ýº¹ÇÑ´Ù. ·çÇÁ ÁøÀÔÀü¿¡ ¹öÆÛ Æ÷ÀÎÅÍÀÎ bufptrÀº ù¹ø° Çì´õ ¹öÆÛÀÇ ¼±µÎ·Î ÃʱâÈ­ÇÏ´Ù. ·çÇÁ·Î ÁøÀÔÇϸé ÆÄÀÏÀ» ÆÐŶ Å©±â¸¸Å­ÀÎ 2000¹ÙÀÌÆ®¸¦ ÆÐŶ ¹öÆÛ¿¡ Àд´Ù. pktptrÀº ÆÐŶ ¹öÆÛÀÇ ¼±µÎ¸¦ °¡¸®Å²´Ù. bufptr, pktptr µÎ Æ÷ÀÎÅÍ´Â ÆÐŶ°ú ¹öÆÛÀÇ ÇöÀç À§Ä¡¸¦ °¡¸®Å²´Ù.

remainpktÀº ÆÐŶ ¹öÆÛÀÇ ³²Àº µ¥ÀÌÅ;çÀ¸·Î ÃʱâÈ­Çϴµ¥ ÀÌ °æ¿ì 2000ÀÌ´Ù. ½ÃÀÛ ¹øÁö°¡ ÀÖ°í ÁøÇà Æ÷ÀÎÅÍ°¡ ÀÖÀ¸´Ï ³²Àº ¾çÀº pktptr - pktbuf ¼ö½ÄÀ¸·Î ±¸ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª remainpkt º¯¼ö°¡ º°µµ·Î ÇÊ¿äÇÑ ÀÌÀ¯´Â ÆÄÀÏ ³¡ºÎºÐ¿¡¼­´Â ÆÐŶ ¹öÆÛ¸¦ ´Ù ä¿ìÁö ¸øÇÏ´Â °æ¿ì°¡ Àֱ⠶§¹®ÀÌ´Ù. ±×·¡¼­ ³²Àº µ¥ÀÌÅ;çÀº ½ÇÁ¦ ÀÐÀº ¾çÀÎ dwRead·Î ¼³Á¤ÇÑ´Ù. ´ë°³ÀÇ °æ¿ì´Â pktsize¿Í °°Áö¸¸ ³¡¿¡¼­¸¸ ´Þ¶óÁø´Ù.

º¯¼ö¸¦ ÃʱâÈ­ÇÑ ÈÄ ¹öÆÛ¸¦ ä¿ì´Â ¾ÈÂÊ ·çÇÁ·Î ÁøÀÔÇÑ´Ù. remainbuf º¯¼ö´Â ¹öÆÛÀÇ ³²Àº ¾çÀÌ´Ù. Å©±â - ÁøÇà °Å¸® °ø½ÄÀ¸·Î ±¸Çϸç ÁøÇà °Å¸®´Â ÇöÀç À§Ä¡-¼±µÎÀÌ´Ù. ¹öÆÛÀÇ ¹øÁö°¡ 6000ÀÌ°í bufptrÀÌ 7000¹øÁö¸¦ °¡¸®Å°°í ÀÖ´Ù¸é 1000¹ÙÀÌÆ®¸¦ »ç¿ëÇßÀ¸¹Ç·Î ³²Àº ¾çÀº 2000ÀÌ´Ù. »·ÇÑ ¼ö½ÄÀÌÁö¸¸ ¸Å¹ø °è»êÇϱ⠱ÍÂú¾Æ ·çÇÁ ¼±µÎ¿¡¼­ Çѹø¸¸ °è»êÇؼ­ Áö¿ª º¯¼ö¿¡ ´ëÀÔÇØ µÎ¾ú´Ù.

´ÙÀ½ µ¿ÀÛÀº ¹öÆÛ¿Í ÆÐŶÀÇ ³²Àº ¾ç¿¡ µû¶ó ´Þ¶óÁø´Ù. ÃÖÃÊ ¹öÆÛ´Â 3000 ³²¾Ò°í ÆÐŶÀº 2000¸¸Å­ Àоú´Ù. ÆÐŶÀÌ ´õ ÀÛÀ¸´Ï ¹öÆÛ¸¦ °¡µæ ä¿ï ¼ö ¾øÀ¸¸ç ¾ÕºÎºÐ¸¸ ä¿ï ¼ö ÀÖ´Ù. ÀÐÀº ÆÐŶÀº ¹öÆÛÀÇ ÇöÀç À§Ä¡¿¡ ÆÐŶ ±æÀ̸¸Å­ º¹»çÇÑ´Ù. ÀÌ °úÁ¤ÀÌ ±×¸²ÀÇ ¨ç¹ø¿¡ ÇØ´çÇÑ´Ù. ¹öÆÛÀÇ ÇöÀç À§Ä¡ÀÎ bufptrÀº ä¿î ±æÀ̸¸Å­ µÚ·Î À̵¿ÇÏ¿© ±×¸²»óÀÇ À§Ä¡°¡ µÇ¸ç ´ÙÀ½ ÆÐŶÀ» ¿©±â´Ù ³ÖÀ¸¶ó°í ±â·ÏÇØ ³õ´Â´Ù.

±×¸®°í break·Î ·çÇÁ¸¦ Å»ÃâÇÏ¸é ¹Ù±ùÂÊ ·çÇÁ ¼±µÎ·Î µ¹¾Æ°¡ ÇÑ ÆÐŶÀ» ´õ ÀоîµéÀδÙ. pktptrÀº ÆÐŶ ¼±µÎ¸¦ °¡¸®Å°°í ³²Àº ÆÐŶÀº 2000ÀÌ´Ù. ÀÌ »óÅ¿¡¼­ ¾ÈÂÊ ·çÇÁ·Î µé¾î¿À¸é ³²Àº ¹öÆÛ°¡ 1000À¸·Î °è»êµÈ´Ù. À̹ø¿¡´Â ¹öÆÛº¸´Ù ÆÐŶÀÌ ´õ Å©´Ï if¹® ¾Æ·¡ÂÊÀ¸·Î ³»·Á¿Â´Ù. ³²Àº ¹öÆÛ°¡ ÀÛÀ¸´Ï ÆÐŶÀ» ´Ù º¹»çÇÒ ¼ö ¾ø°í ¹öÆÛ ³²Àº¾ç¸¸Å­ÀÎ 1000¹ÙÀÌÆ®¸¸ º¹»çÇÑ´Ù. ÀÌ °úÁ¤ÀÌ ±×¸²ÀÇ ¨è¹øÀÌ´Ù.

¿©±â±îÁö ÁøÇàÇÏ¸é ¹öÆÛ Çϳª¸¦ °¡µæ ä¿ü´Ù. ´ÙÀ½ ÀÛ¾÷À» À§ÇØ ÆÐŶ ³²Àº ¾çÀ» º¹»çÇѸ¸Å­ »©°í ÆÐŶÀÇ ÇöÀç À§Ä¡µµ ±×¸¸Å­ À̵¿ÇÏ¿© ±×¸²»óÀÇ pktptrÀ» °¡¸®Å²´Ù. ¹öÆÛ¸¦ °¡µæ ä¿î Çì´õ´Â Àåºñ·Î º¸³»°í ´ÙÀ½ Çì´õ·Î À̵¿Çϸç bufptrµµ ¹öÆÛ ¼±µÎ·Î ÀçÃʱâÈ­ÇÑ´Ù. ¾ÆÁ÷ ÆÐŶÀ» ´Ù ¾´ °ÍÀÌ ¾Æ´Ï¾î¼­ ¾ÈÂÊ for ·çÇÁÀÇ ¼±µÎ·Î µ¹¾Æ°£´Ù. ÆÐŶÀÌ Å©¸é ÀÌ ·çÇÁ¸¦ ¿©·¯¹ø µ¹±âµµ ÇÑ´Ù. À̹ø¿¡´Â ¹öÆÛ°¡ ´õ ¸¹¾Æ ³²Àº ÆÐŶ 1000À» ´ÙÀ½ ¹öÆÛÀÇ ¼±µÎ¿¡ º¹»çÇÑ´Ù.

ÀÌ °úÁ¤ÀÌ ±×¸²ÀÇ ¨é¹øÀÌ´Ù. 1000¹ÙÀÌÆ® º¹»çÇÑ ÈÄ break·Î Å»ÃâÇÏ¸é ¹Ù±ùÂÊ ·çÇÁÀÇ ¼±µÎ·Î µ¹¾Æ°¡ ÇÑ ÆÐŶÀ» ´õ Àд´Ù. À̹ø¿¡´Â ÆÐŶ Å©±â¿Í ¹öÆÛ Å©±â°¡ ²À ¸Â¾Æ if¹®ÀÇ ¹öÆÛ°¡ ´õ ÀÛ´Ù´Â Á¶°ÇÀº °ÅÁþÀÌ µÈ´Ù. ÆÐŶÀ» ¹öÆ۷Πä¿ì¸é ±×¸²ÀÇ ¨ê¹ø »óȲÀÌ µÈ´Ù. ´Ù ä¿üÀ¸´Ï Àåºñ·Î º¸³»°í ´ÙÀ½ Çì´õ·Î À̵¿ÇÑ´Ù. remainpktÀÌ 0ÀÌ¸é ¾ÈÂÊ for ·çÇÁÀÇ if¹®¿¡¼­ ¾Æ¹« °Íµµ º¹»çÇÏÁö ¾Ê°í ·çÇÁ¸¦ Å»ÃâÇÏ¿© ´ÙÀ½ ÆÐŶÀ» Àд´Ù. ÀÌ °úÁ¤À» ÆÄÀÏ ³¡±îÁö ¹Ýº¹ÇÑ´Ù.

ÆÄÀÏÀÇ ¸¶Áö¸· ³¡ ºÎºÐÀº Ư¼öÇÑ »óȲÀÌ µÈ´Ù. pktsize ±æÀ̸¸Å­ ÀÐÁö¸¸ ³¡¿¡¼­´Â ´õ ª°Ô ³²À» °ÍÀÌ¸ç ±×·¡¼­ remainbuf°¡ dwRead °ªÀ» ´ëÀԹ޴´Ù. ¿ä±¸ÇÑ °Íº¸´Ù ´ú ÀоúÁö¸¸ ÀÌ ÆÐŶµµ Àç»ýÀº ÇØ¾ß ÇÑ´Ù. ¾ÈÂÊ ·çÇÁ·Î µé¾î°¡ ¹öÆÛ¸¦ ´Ù ä¿ì¸é Àåºñ·Î º¸³»°í ³²À¸¸é ´ÙÀ½ ¹öÆÛ¿¡ ´ë±â½ÃÄÑ µÐ´Ù. ¹Ù±ùÂÊ ·çÇÁ ¼±µÎ¿¡¼­ ´Ù½Ã ÀÐÀ¸¸é dwRead´Â 0ÀÌ µÇ¸ç À̶§ÀÇ »óȲÀº ´ÙÀ½°ú °°´Ù.

¹öÆÛ°¡ °¡µæ Âù »óȲµµ ¾Æ´Ï°í ±×·¸´Ù°í ´õ ÀÐÀ» µ¥ÀÌÅÍ°¡ ÀÖ´Â °Íµµ ¾Æ´Ï´Ù. À̶§´Â ¹Ì¿Ï¼º ¹öÆÛ¶óµµ Àåºñ·Î º¸³»¾ß ÇÑ´Ù. ¾ÈÂÊ ·çÇÁÀÇ Àü¼Û ÄÚµå´Â Ç×»ó ¹öÆÛ¸¦ ä¿ö º¸³»¹Ç·Î ±æÀÌ°¡ bufsizeÀÌÁö¸¸ ¸¶Áö¸· Àü¼Û ÄÚµå´Â ÀÐÀ½¸¸Å­¸¸ º¸³»¸é µÈ´Ù. ¸¶Áö¸· ÆÐŶÀ» Àåºñ·Î º¸³»°í break·Î Å»ÃâÇϸé ÆÄÀÏÀÇ ¸ðµç µ¥ÀÌÅ͸¦ ´Ù º¸³Â´Ù. ·çÇÁ ¹Ù±ù¿¡¼­ µÞÁ¤¸®¸¦ ÇÏ°í Á¾·áÇÑ´Ù.

±æÁö ¾ÊÀº ÄÚµåÀÌÁö¸¸ Á¦¾î ±¸Á¶°¡ Àº±ÙÈ÷ º¹ÀâÇÏ´Ù. ÃÖ¼ÒÇÑ ÀÌÇØÇϱ⠽±µµ·Ï ÀÛ¼ºÇßÁö¸¸ °¢ º¯¼öÀÇ ¿ªÇÒ°ú º¯°æµÇ´Â Á¤È®ÇÑ ½ÃÁ¡°ú ÀÌÀ¯¸¦ Çѹø¿¡ ÀÌÇØÇϱâ´Â ½±Áö ¾Ê´Ù. ÀÌ·² ¶§´Â µð¹ö°Å¸¦ µ¹·Á º¸¸ç °¢ º¯¼ö°¡ ¾ðÁ¦ ¾î¶»°Ô ¹Ù²î´ÂÁö °üÂûÇØ ºÁ¾ß ÇÑ´Ù. ½Ã°£ÀÌ Á» °É¸®Áö¸¸ ³»ºÎ¸¦ µé¿©´Ù ºÁ¾ß È®½ÇÇÏ°Ô ÀÌÇصȴÙ.

ÀÌ ±¸Á¶°¡ ÃÖ¼±ÀÎ °Íµµ ¾Æ´Ï´Ù. ºÐ±â¾øÀÌ ¸ðµç ³í¸®¸¦ ÇÑ°÷¿¡ ÁýÁßÇÏ´Ù º¸´Ï ÆÐŶÀ» Àü¼ÛÇÏ´Â Äڵ尡 ¹Ýº¹µÇ°í ·çÇÁ Å»Ãâ ½ÃÁ¡µµ Á÷°üÀûÀÌÁö ¸øÇÏ´Ù. while, do while µîÀÇ ´Ù¸¥ Á¦¾î ±¸Á¶¸¦ ä¿ëÇÏ°í ¹Ýº¹ ÄÚµå´Â ÇÔ¼ö·Î ºÐ¸®ÇÏ¿© Á¤¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿©±â¼­´Â ³í¸®¸¸ ÀÌÇØÇÏ°í ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡ »ç¿ëÇÒ ¶§´Â ÃëÇâ¿¡ ¸Â°Ô ¹Ù²ã ¾²±â ¹Ù¶õ´Ù.