C# 프로그래밍 7번째 시간 - 무한 루프, 제어문
유니티의 일곱걸음, C# 공부시작 32일차
오늘은 무한 루프 및 이를 제어하는 문장(continue,break,goto문)에 대해서 배우겠습니다!
오늘은 무한 루프를 배울텐데, 전 시간에 배웠던 반복문에서 끝나지 않고 반복하는 것을 의미합니다.
무한 루프의 정의는 종료문을 만나지 못하고 끝없이 동작하는 것을 의미합니다.
1. 무한 루프
반복문을 만드는 중 실수를 하게 되면 코드가 탈출하지 못하고 계속 반복하게 되는데,
이런 단점만 있는 것은 아니고, 장점으로 활용할 수 있습니다.
어떤 시스템이 계속 반복해서 돌고 있다가 특정한 문자나 문장을 입력하면 루프를 종료하는 방식도 있습니다.
무한 루프의 형태를 보겠습니다.
..
while (true) { // 항상 참이므로 무한 루프에 빠진다.
// 실행될 코드
}
..
이 방식은 조건식에 참(true)가 오기 때문에 계속 참으로 인식되어서 영역안에 있는 코드가 무한으로 반복합니다.
이를 활용하는 예를 보겠습니다.
[무한 루프를 이용한 예제]
using System;
namespace Study
{
class Program
{
static void Main(string[] args)
{
int sum = 0;
while (true)
{
Console.Write("수를 입력하세요: ");
string line = Console.ReadLine(); // 값을 입력받는 곳
if (line == "end") break; // end가 입력되면 무한 루프 탈출
sum += int.Parse(line); // 문자열을 숫자로 변환
}
Console.WriteLine("지금까지 입력된 수를 모두 더합니다: " + sum);
}
}
}
이에 따른 결과는
수를 입력하세요: 457 <br>
수를 입력하세요: 1006 <br>
수를 입력하세요: 422 <br>
수를 입력하세요: 14 <br>
수를 입력하세요: 33 <br>
수를 입력하세요: end <br>
지금까지 입력된 수를 모두 더합니다: 1932 <br>
로 나옵니다.
코드를 살펴보면 while문이 등장하는데, 조건식에 참이 와서 항상 참이라는 조건이 성립됩니다.
line에서 값을 입력받는데, 숫자를 입력받으면 반복이 계속 되다가,
end를 입력하면 무한 루프를 빠져나와서 지금까지 입력한 수를 모두 더하는 sum을 출력합니다.
457부터 33까지 입력한 것들을 모두 더하여 1932이란 값이 나왔습니다.
2. break문
앞 예제에서 미리 break문을 쓰긴 했는데, 이에 대해서 자세히 보겠습니다.
전 시간 switch문에서 break문을 사용하였는데, 이를 무한 루프에서도 탈출하는 용도로 사용할 수 있습니다.
break문을 이용한 예제를 만들어보겠습니다.
[break문을 이용한 예제]
using System;
namespace Study
{
class Program
{
static void Main(string[] args)
{
int num = 0;
while (num < 100) // num보다 100이 크면 계속 반복
{
if (num == 40) break; // num이 40이면 break로 인해 반복문 탈출
Console.WriteLine("num: " + num);
num++; // num의 값 1 증가
}
}
}
}
이에 따른 결과는 이러합니다.
num: 0 <br>
num: 1 <br>
num: 2 <br>
num: 3 <br>
... <br>
num: 38 <br>
num: 39 <br>
코드를 보면 while문에서는 조건식 num<100이 나오는데, 본래는 100이 num보다 크면
반복을 시작하여 코드를 계속 실행시킵니다. 근데 그 뒤에 if문을 활용하여, num이 40이 될때
break문을 활용해서 반복문을 탈출하게 하였습니다. 이래서 num이 39에서 끝난 겁니다.
while문 안에서 출력을 한 후에 값을 더하는 형식인데, 40이 됐을때는 바로 탈출했기 때문입니다.
따라서 출력은 39까지로 되어있지만, 실제로는 40까지 계산이 되고 코드가 끝난 것입니다!
3. continue문
continue문은 조건을 확인하는 부분으로 바로 넘기는 방식입니다.
반복문 아래에 있는 문장들을 한번 무시하고 다시 반복조건으로 넘긴다는 것입니다.
for문을 이용하여 예를 들어보겠습니다.
...
for (int i = 0; i < 10; i++) {
if (i == 7) continue;
Console.WriteLine("i: " + i);
}
...
for문을 만나서 반복을 하고 있는데 i가 7이 되면 continue문을 만납니다.
continue문을 거쳐서 아래의 문장을 한번 건너뛰고 다시 반복문으로 들어갑니다.
이를 좀 더 확장하여서 예제를 만들어보겠습니다.
[continue문을 이용한 예제]
using System;
namespace Study
{
class Program
{
static void Main(string[] args)
{
for (int i = 1; i <= 50; i++)
{
if (i % 2 == 1) continue;
Console.WriteLine("i: " + i);
}
}
}
}
이에 따른 결과는 이러합니다.
i: 2 <br>
i: 4 <br>
... <br>
i: 46 <br>
i: 48 <br>
i: 50 <br>
for문을 먼저 보면 i의 값을 1로 초기화하고 반복을 시작합니다.
근데 i를 2로 나눴을때 나머지가 1인, 홀수이면 continue문을 만나서 밑에 있는 문장을 적용하지 않고
다시 반복문으로 넘어갑니다. 그래서 1은 출력이 되지 않고, 1을 더한 2부터 출력이 된 후, 짝수만 출력이 되는 겁니다.
3,5,7… 와 같은 홀수들도 이런 이유로 출력이 되지않습니다.
4. goto문
goto문은 코드와 코드를 넘나드는 기능을 해줍니다. 즉, 레이블을 뛰어넘어버립니다.
레이블(Label)은 코드 내의 위치를 나타내주는 역할을 하는 것입니다.
사용 방식은 이러합니다.
...
goto 레이블;
...
레이블:
// 실행될 코드
...
그럼 이를 활용하여서 앞의 break문 예제를 조금 바꿔서 goto문을 사용해보겠습니다.
[goto문을 이용한 예제]
using System;
namespace Study
{
class Program
{
static void Main(string[] args)
{
int num = 0;
while (num < 100) // num보다 100이 크면 계속 반복
{
if (num == 40) goto EXIT; // num이 40이면 break로 인해 반복 탈출과 동시에 EXIT레이블로 이동
Console.WriteLine("num: " + num);
num++;
}
EXIT: // EXIT 레이블!
Console.WriteLine("탈출!");
}
}
}
이에 따른 결과는 이러합니다.
num: 0 <br>
num: 1 <br>
num: 2 <br>
num: 3 <br>
... <br>
num: 38 <br>
num: 39 <br>
탈출! <br>
break문이 goto EXIT으로 바뀌었는데, 레이블을 넘나드니 goto문이 조금 편해보일 수는 있습니다.
다만, 이를 너무 과도하게 사용하면 흐름을 이해하지 못하고 난잡하게 변하기에
써야될 필요성이 있을때만 이용하는게 좋을 것 같습니다.
마무리하며
오늘은 무한 루프를 주제로, 간단하게 설명하였는데
생각보다 프로그램을 만드려면 자주 써야되고, 이를 제어할 수 있는 문장도 알아야되므로 익혀두는게 좋을 것 같습니다.
다음은 메소드에 대해서 배우겠습니다!!
메소드에 대해서 간단하게 설명하자면, C언어에서의 함수와 비슷한 개념입니다.
여러가지 기능을 할 수 있는 유용한 녀석입니다.
Comments