Qaupot Blog
Software Engineering, Trip

408. 반복문

🕐 Sat, 08 Feb 2014 09:00:00 GMT 🕓 Tue, 24 Aug 2021 07:26:00 GMT

반복문

컴퓨터는 본래 반복적인 계산을 빠르게 계산하기 위해 만들어진 장치이며, 프로그래밍 언어에도 반복을 위한 문법이 포함되어 있습니다.

For Loop

#include <stdio.h>

int main(int argc,char** argv)
{
  int i=0;
  int sum = 0;
  for(i=0 ; i<4 ;i++)
  {
    sum +=i;
  }
}
for( initialization ; condition ; increase )  
{  
  ~처리할 내용  
}
  • initialization : 초기화 시점으로 for 루프에 진입할 때 1회 실행됩니다. 매개 변수로 사용할 새로운 변수를 선언하거나 기존 변수를 사용할 수 있습니다.
    • C 에서는 이곳에서 변수를 선언하는것이 허용되지 않습니다. C는 함수 내의 선언부에서만 지역변수를 선언할 수 있기 때문입니다.
  • condition : 매개 변수에 대한 비교 조건을 기술합니다. true 인 경우 반복 시행됩니다.
  • increase : condition 에 사용될 매개 변수를 제어합니다.

For Loop - initialization

#include <stdio.h>

int main(int argc,char** argv)
{
  int sum = 0;
  for(int i=0 ; i<4 ;i++)
  {
    sum +=i;
  }
}

C++는 코드 중간에 변수를 선언하는것을 허용합니다. 예제 같은 형태의 초기화문이 가능하며, 이 매개변수가 Scope 내에서만 사용되도록 하여 안전한 반복문을 가능하게 합니다.

변수 선언 및 초기화 선언 외에도, 비워두거나 함수 호출을 할 수 있습니다.

For Loop - condition

조건식이 참인지 거짓인지를 판정합니다. 만일 이 값이 참일 경우, 괄호로 묶인 블록안의 내용이 처리됩니다.

거짓일 경우 이 for 문 블록을 빠져나가게 됩니다.
함수 호출 혹은 비워두어도 상관없으며, 비워 둘 경우 항상 참으로 처리됩니다.

#include <stdio.h>

int main(int argc,char** argv)
{
  int i=0;
  int sum = 0;
  for(i=0 ; ;i++)
  {
    if( i > 4)
      break;
  }
}

이러한 경우 언젠가는 이 for 문을 탈출하여야 하므로
예제 for2의 경우처럼 중간에 조건분기를 넣어 특정 조건에서 탈출할 수 있도록 해 주어야 합니다.

  • break 키워드를 사용할 수 있습니다.

그렇지 않다면 무한하게 같은 일을 반복하며, 이는 OS 및 다른 응용프로그램에게 지장을 주게 됩니다.

  • 현대의 프로그램들은 상호 협력적 관계이며, 자신이 자원을 쓰지 않는다면 다른 프로그램이 사용할 수 있도록 양보해 주어야합니다.

For Loop - increase

주로 매개변수를 조작하는 식들이 포함됩니다. i++나 i--같은 식이 포함됩니다.
이 역시 함수호출을 하거나 비워두어도 상관없습니다.

단, 비워 둘 경우 무한루프를 회피하기 위해 처리할 내용의 어딘가에 for 문 매개변수를 조작하는 부분이 있어야 합니다.

While

#include <stdio.h>

int main(int argc,char** argv)
{
  int k = 0;
  while(k<5)
  {
    k++
  }
}

while 문은 for 문에 비해 굉장히 단순한 반복문입니다.

while(condition)  
{  
  ~처리할 내용  
}  

의 형태로 사용되며, condition 이 true 인 동안 계속해서 반복처리를 실행합니다.
while 문은 매개변수를 통한 제어가 아닌, 특정 조건을 만족하는 경우에 대해서 처리하기 적합하게 되어 있습니다.

매개변수의 제어에 관한 호출이 빠져있기 때문에, 통상적으로 while 문은 for 문보다 빠릅니다.

  • 상기 예제에서 사용한 while 문은 매개변수를 만들어 제어를 하고 있으므로 사실상 for 문과 다르지 않습니다.
#include <stdio.h>

int main(int argc,char** argv)
{
  int k = 0;
  while(1)
  {
    k++;
    if(k > 5)
      break;
  }
}

많은 경우, while(1) 혹은 while(true)로 무한 반복을 만들어 놓고, 특정 조건이 되었을때 break 로 루프를 빠져나가게 하는 형태를 보시게 됩니다.

이러한 경우는 별도의 카운팅 매개변수가 필요없는 경우에 해당하며, 메세지 루프나 우리가 사용하는 GUI 형태의 프로그램의 무한루프를 작성할 때 사용됩니다.

Do While

#include <stdio.h>

int main(int argc,char** argv)
{
  int k = 0;
  do
  {
    k++
  }while(k<5);
}

do while 문은 while 문과 비슷한 구조를 가집니다.

do  
{  
  ~처리할 내용  
} while(condition);  

while 문과의 가장 큰 차이점은 반드시 1회는 실행이 보장됩니다. while 의 경우 조건문을 점검하고 블록 안의 코드를 실행하지만, do while 의 경우 블록 안의 코드를 실행한 후 조건문을 점검합니다.

Range-based for-loop (C++11)

C++11의 range-based for-loop 를 지원한다면 위와 같은 for 문의 반복문을 사용할 수도 있습니다.

다른 언어들의 foreach 와 같은 맥락의 반복문으로써, 범위가 있는 매개 변수에 대해서 그 횟수만큼 반복해주는 반복문입니다. 배열형을 사용하거나, class 에서 begin(), end()의 메소드를 제공할 수 있는 경우에 대해 사용할 수 있습니다.

int &n은 해당하는 배열을 레퍼런스로 순회하겠다는 의미이며, int n으로 사용할 수도 있습니다.

  • 이 경우에는 값이 복사됩니다.

제어 - break / continue

break 와 continue 키워드를 이용하여 반복문을 제어할 수 있습니다.

#include <stdio.h>

int main(int argc,char** argv)
{
  while(1)
  {
    k++;
    break;
    if(k > 5)
      break;
  }
}

break 키워드를 사용하면 해당 지점에서 루프 블럭을 탈출합니다.

if(k > 5)
   break;

위의 구현부는 실행되지 않고 바로 while 문이 종료됩니다.

#include <stdio.h>

int main(int argc,char** argv)
{
  while(1)
  {
    k++;
    continue;
    if(k > 5)
      break;
  }
}

continue 키워드를 사용하면 해당 지점에서 루프 블럭 가장 마지막 위치로 이동합니다.

if(k > 5)
   break;

마찬가지로, 위의 구현부는 실행되지 않고 다시 k++; 로 이동하여 루프문이 지속됩니다.

  • 예제의 경우 무한루프에 빠지게 됩니다.

Reference

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.