반복문

반복문은 특정 코드를 조건에 따라 반복하는 제어 구조입니다.


for

for문은 반복문의 한 종류입니다.

for (초기식; 조건식; 증감식) {
  //조건식이 true일 때 반복할 코드
}

초기식을 가지고 조건식을 검사합니다. 이 결과가 true이면 반복문 블록{} 내부의 코드를 실행하고, 내부 실행이 완료되면 증감식을 수행합니다. 이렇게 반복하다가 조건식이 false가 되면 반복을 멈추게 됩니다.

다음 코드는 for문을 이용해서 1부터 10까지 숫자를 더하는 코드입니다.

public class Loop {
    public static void main(String[] args) {
        int total = 0;

        for (int i = 1; i <= 10; i++) {
            total += i;
        }

        System.out.println(total);
    }
}


특이하게도 for문의 초기식, 조건식, 증감식은 생략이 가능합니다. 셋 다 써도 되고, 셋 다 안써도 되고, 셋 중 하나/둘만 골라서 사용해도 됩니다. 단, 식은 생략하더라고 세미 콜론은 그대로 두어야합니다.

방금 전 코드에서 조건식만 냅두고 초기식, 증감식을 생략해보겠습니다. 말이 생략이지 사실 다른 부분에 코드를 적는 것 입니다.

int total = 0;
int i = 1;

for (; i <= 10;) {
	total += i;
    i++;
}

추가적으로 지금 소개한 for문 외에도 다음에 소개할 while, do~while 문도 if문 처럼 중첩이 가능합니다. 반복문도 또한 자원을 많이 잡아먹는 구조이기 때문에 3중첩 이상은 피하는 것이 좋습니다. (가급적이면 2중첩도)


while

while문도 조건에 따라 반복을 수행합니다. for문과의 차이점은 while문은 오직 조건식만을 갖습니다. 따라서 특정 조건에 따라 반복만을 하고싶다면 while을 선택하고, 반복 횟수에 대한 카운터 등이 필요하다면 for를 선택합니다.

while (조건식) {
	//반복할 코드
}

다음 코드는 이전에 사용했던 1부터 10까지 자연수를 모두 더하는 코드를 while 문으로 작성한 코드입니다.

int total = 0;
int i = 1;

while (i <= 10) {
	total += i;
	i++;
}

System.out.println(total);

위 코드를 보셨다면 for와 while은 구조에서 큰 차이를 보이지 않는다는 것을 눈치채셨을 겁니다. 실제로 키워드만 다를 뿐 구조가 거의 흡사하기 때문에 세 반복문 간 변환이 자유롭습니다.


do~while

do~while은 while과 동일하지만, 무조건 한 번은 반복문 코드를 실행하는 반복문입니다. 앞서 본 반복문들과 구조가 조금 다릅니다. 조건식이 제일 마지막에 옵니다.

do {
	//반복할 코드
} while (조건식);

역시 같은 코드를 do~while로 변경해보겠습니다.

int total = 0;
int i = 1;

do {
	total += i;
	i++;
} while (i <= 10);

System.out.println(total);


break, continue

break

break는 앞선 switch문에서 봤듯이 현재 break에서 가장 가까운 코드 블록(switch 또는 반복문)을 탈출하는 명령입니다.

이전에 넣은 코드에 break를 넣으면 어떻게 될까요?

int total = 0;
int i = 1;

while (i <= 10) {
	total += i;
	i++;
	break;
}

System.out.println(total);

조건이 i가 10보다 작은 동안 반복하라고 되어있긴 하지만 첫 번째 반복에서 break를 만났기 때문에 첫 번재 반복만 하고 해당 반복문을 탈출했습니다.

continue

continue는 반복문에서만 사용할 수 있는 제어 명령으로 반복문의 끝으로 이동해서 다음 반복을 진행하는 명령입니다. for에서는 증감식, while, do~while에서는 조건식으로 이동합니다.

다음 코드는 1부터 10까지 더하는데, 조건식과 continue를 이용해서 홀수만 더하는 코드입니다.

int total = 0;
int i = 1;

while (i <= 10) {
	if (i % 2 == 0) {
		i++;
		continue;
	}
	else {
		total += i;
		i++;
	}
}

System.out.println(total);


무한 루프

조건에 따라서 반복문 내부를 영원히 돌게 하는 무한 루프를 만들 수 있습니다. 무한 루프는 다양한 방법으로 만들 수 있지만 가장 간단한 방법은 다음과 같습니다.

for (;;) {}

while (true) {}

do {} while(true);

Labeled Loop

Labeled Loop(이름 붙은 반복문)은 반복문에 이름을 붙이고 break나 continue에 이름을 알려서 한 번에 여러 겹의 반복을 건너뛰거나 탈출할 수 있는 구문입니다.

이름 : 반복문 {
	break 이름;
    continue 이름;
}

아래 코드를 예시로 보겠습니다.

public class Loop {
    public static void main(String[] args) {
        OutsideLoop : for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 5; j++) {
                if (j == 1) {
                    break OutsideLoop;
                }
                System.out.println("j루프 반복");
            }
            System.out.println("i루프 반복");
        }
    }
}

지금까지 배운 반복문에 따르면 "j루프 반복"을 5회 출력 하는 작업을 10번 할텐데, j가 1이 되는 순간 가장 바깥의 루프를 나가도록 이름을 붙였습니다.break의 이름을 가장 바깥의 OutsideLoop라고 이름 붙인 반복문을 지정했더니 j가 1이 되자 바깥 루프까지 탈출했습니다.

0개의 댓글