250x250
Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

minjea.dev의 코딩블로그

[c#] 반복문(break, continue, 그리고 goto문) 본문

코딩강좌/c#

[c#] 반복문(break, continue, 그리고 goto문)

minjea.dev 2022. 4. 8. 12:00
728x90

우리는 저번 시간에 조건문에 대하여 배워보았습니다. 그런데 아직 우리가 할수 없는것이 하나 있습니다. 그건 바로 특정 코드를 특정 횟수만큼 반복하여 실행하는것입니다.

반복문을 왜 배워야 할까요? 예를 들어, 1에서 100까지의 수를 출력하는 코드를 작성한다고 해봅시다. 그러면 우리는 코드를 약 100줄을 짜야 합니다. 그런데 여기서 더 큰 문제는, 코드를 변경해야 하는 경우입니다. 코드를 1000에서 1100까지의 수를 출력하는 코드로 변경해야 한다면 우리는 코드를 일일이 하나하나 다 변경해야 합니다..... 너무 끔찍할것 같습니다.

이럴때 반복문이 사용되는 것입니다.

반복문

반복문이란 무언가를 반복해서 실행하는 것입니다. 어떠한 기준을 만족할 때까지 말이죠.

while문

while문은 if문과 사용 방식이 비슷합니다. while문의 사용방법은 다음과 같습니다.

while(조건) {
	실행문;
}

조건은, if문과 같이, bool을 반환하는 함수나 연산자를 넣으시면 됩니다. 그 이유는, while문은 조건이 거짓이 될 때까지 실행문을 반복하여 실행하기 때문입니다. 이를 이용하여 1에서 10까지의 수를 출력하는 예제입니다.

int n = 0;
while(n<10) {
	Console.WriteLine(n+1);
	n++;
}

위 예제는 변수 n의 값이 10보다 작을 경우, 콘솔에 n+1의 값을 출력하도록 코딩되어 있습니다. 그런데, 4번째 줄에 n++;는 어떤 역할을 할까요? 저 코드는 반복문 안에 있는 코드를 모두 실행한 후, n의 값을 1씩 증가시키는 역할을 합니다. 따라서, 변수 n의 값은 while문 안의 조건이 참이라면 값이 1씩 증가하게 되므로, 언젠간 조건이 거짓이 되면서 반복문을 빠져나올수 있는 역할을 하는 겁니다.

for문

for문은 while과 달리, n을 선언(이름이 꼭 n이 아니어도 됨)하는 부분과, n의 값을 1씩 증가시키는 부분이 한 괄호 안에 쓸수 있기 때문에, while보단 가독성이 좋고, 사용도 쉽습니다. for문은 아래와 같이 사용할수 있습니다.

for (초기화식;조건;증감식) {
	실행문;
}

확실히 while문보다는 사용하기가 쉽고, 가독성도 좋은 것을 알수 있습니다. 아래 코드는 1부터 10까지 출력하는 예제입니다.

int n;
for (n=0;n<10;n++) {
    Console.WriteLine(n);
}

foreach문

foreach문은 나열이 가능한 자료형, 즉, 배열의 원소를 쉽게 꺼내올수 있도록 하는 반복문입니다. 배열은 나중에 설명드릴 예정이니, 지금은 배열을 공부하고 난 후 다시 돌아오셔서 확인하시는걸 추천합니다.

foreach문은 in 연산자 우측에 오는 배열을 순회하면서 각각의 요소들을 in 연산자 좌측에 오는 변수에 넣어서, foreach 문 안에 있는 실행문에서 그 변수를 사용할수 있도록 하는 반복문입니다.

foreach (변수 in 표현식) {
	실행문;
}

다음은 1에서 10까지의 정수가 담긴 배열에 foreach문을 사용하여 1~10까지의 수를 콘솔에 출력한 예제입니다.

int [] array = new int[] {1,2,3,4,5,6,7,8,9,10};
foreach (int e in array) {
    Console.WriteLine(e);
}


break문
break는 switch, for, foreach, while, do 에서만 사용이 가능합니다. break가 반복문 내에서 사용된다면, break를 감싸고 있는 첫번째 반복문을 탈출합니다. 아래 예제는, n이 10보다 작지 않은 경우, break를 이용하여 반복문을 탈출하는 예제입니다.

int n = 0;
while(true) {
    if (n<10) break;
    Console.WriteLine(n+1);
    n++;
}

continue문

continue문은 실행을 멈추고 조건을 평가하는 부분으로 옮겨가서 반복을 계속하는 역할을 합니다. break와는 반대의 역할을 하는 셈인거죠. 다음은 1~100까지의 수중에서, continue 문을 이용해 짝수의 합을 구하는 예제입니다

int result = 0;
int n = 1;
while(n++<=100){
    if(n%2!==0) continue;
    result+=n;
}
Console.WriteLine(result);

위 코드에서 while은 n이 100이 넘지 않는다면 계속 코드를 반복시킵니다. 반복을 하면 계속 4번째 줄에 있는 n%2!==0 코드를 만나게 되는데, 이 코드는 n을 2로 나눈 후 나머지가 0이 아니라면(짝수가 아니라면), continue 문을 이용해 다시 반복문의 조건 평가 부분으로 이동하여 다시 반복문을 실행합니다. 이처럼, continue 문을 사용할수 있습니다.

goto

goto문은 반복문이 없던 시절, 개발자들은 if문과 goto만을 이용하여 반복문을 구현했습니다. 다만, goto문은 지금은 거의 쓰이지 않게 되었는데, 그 이유는, goto로 반복문을 구현하면 가독성이 떨어지고, 이미 for, foreach, while등의 좋은 반복문이 추가되었기 때문입니다.

goto는 레이블의 위치로 제어 흐름을 옮기는 역할을 하는데, 레이블은, 여러분이 정하는 이름 뒤에 콜론을 붙여 만듭니다.(레이블은 관례상 대문자로만 쓰는것이 일반적입니다)

다음은 if/goto/레이블을 이용하여 반복문을 구현한 예제입니다.

int n = 0;

LOOP:
    if(n<10) {
        goto LOOPEND;
    }
    Console.WriteLine(n+1);
    n++;
    goto LOOP;
LOOPEND:
    Console.WriteLine("반복문 탈출");

위 코드는 아까 배운, while, for, foreach에 비하면 너무 복잡하고, 어디가 루프의 시작이고, 어디가 끝인지 알아보기가 쉽지 않습니다. 또한 레이블의 위치를 정확히 알아보기도 힘듭니다. 따라서, goto는 요즘에는 거의 쓰이지 않습니다. 이 문법은 예전 코드를 해석할때만 사용하는걸 추천합니다.

728x90

'코딩강좌 > c#' 카테고리의 다른 글

[c#] 생성자와 소멸자, 그리고 this  (0) 2022.04.10
[c#] 클래스  (0) 2022.04.09
[c#] 조건문  (0) 2022.04.07
[c#] 여러가지 연산자  (0) 2022.04.06
[c#] 변수와 상수, 그리고 스택과 힙  (0) 2022.04.05