개발/Java

#9. Java의 반복문에 대해 알아보자!

하프 2022. 11. 15. 15:51

안녕하세요! 하프입니다😋

이 글에서는 Java의 제어문 중, 반복문에 대해 알아보려고 합니다! 반복문을 처음 배울 때 헷갈려서 정말 죽을 맛이었습니다... 이번에도 최대한 이해하기 쉽게 설명해드리도록 노력해보겠습니다! 파이팅✨😎

이 글은 <Do it! 자바 프로그래밍 입문> 책을 읽고 이해한 내용을 바탕으로 작성되었습니다😉

 

1. 반복문이 뭔가요?

반복문은 반복되는 일을 효율적으로 처리하기 위해서 사용하는 것입니다. int형 변수인 num에 1부터 10까지 더해야 하는데, num += 1; num += 2; 이렇게 하나씩 쓰기에는 너무 비효율적이죠? 그래서 사용하는 것이 반복문입니다! 반복문에는  while문, do-while문, for문 세 가지 방식이 있는데요, 어떻게 사용하는지 알아보러 가봅시다!

 

2. while문

while문은 조건식이 참인 동안 수행문을 반복해서 수행하는 형식입니다.

while(조건식) {
	수행문 1;
    ...
}
	수행문 2;
    ...

이런 형식으로, 조건식을 만족하는 동안에는 중괄호 안의 수행문 1을 반복해서 처리합니다. 조건식이 거짓이 된 경우에는 while문을 빠져나갑니다! while문을 이용해서 1부터 10까지 더하는 프로그램 코드를 써 볼까요?

int num = 1;
int sum = 0;
while(num <= 10) {
	sum += num;
   	num++;
}
System.out.println("1~10까지의 합은 " + sum + "입니다.");

이렇게 됩니다. num이 10보다 작거나 같은 동안에는 계속 sum에 num을 더하고, num을 1씩 증가시키는 수행문을 수행합니다. num이 계속 증가되어 11이 됐을 때는, while문을 빠져나가고 밑의 출력문을 수행하게 되겠네요!

 

위에서 소개드린 while문은 특정 조건을 만족하는 동안에만 반복되는 명령을 수행하는데요, 어떤 일을 반복해서 수행할 때는 무한 반복을 해야 하는 경우가 있습니다. 이럴 때는 while문을 무한 반복해서 사용할 수 있습니다!

while(true) {
	...
}

while문은 조건이 참일 때 반복하기 때문에, 조건에 true를 써놓으면 항상 참이 되어 수행문을 무한 반복하게 됩니다.

 

3. do-while문

while문은 조건을 먼저 검사하기 때문에 처음부터 조건을 만족하지 않는다면 한 번도 while문을 수행하지 않습니다. 하지만 do-while은 중괄호 안의 문장을 무조건 한 번 수행한 후에 조건식을 검사합니다! 따라서 중괄호 안에 있는 수행문을 반드시 한 번 이상 수행해야 할 때는 do-while문을 사용합니다.

do {
	수행문 1;
    ...
}
while(조건식);

...

위에서 while문으로 구현한 1부터 10까지 더하는 프로그램을 do-while문으로 바꿔봅시다!

int num = 1;
int sum = 0;
do {
	sum += num;
   	num++;
}
while(num <= 10);

System.out.println("1부터 10까지의 합은 " + sum + "입니다.");

이렇게 구현할 수 있습니다. while문의 조건식을 검사하기 전에 do의 중괄호에 있는 sum += num과 num++을 한 번 수행하고 while문의 조건식 검사를 시작합니다!

 

4. for문

다음으로 for문은 반복문 중에서 가장 많이 사용합니다. for문은 while문, do-while문보다는 구조가 조금 더 복잡하게 느껴질 수 있습니다😢 for문 안에 반복문을 구현하는 데 필요한 초기화식, 조건식, 증감식을 함께 작성해야 하기 때문입니다. 저도 처음에 for문을 배울 때 굉장히 헷갈렸는데, 익숙해지고 보니 어떤 조건동안 반복 수행하는지 빠르게 파악할 수 있어서 가장 편리하다고 느꼈습니다!

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

for문의 구조입니다. 초기화식은 for문이 시작할 때 한 번만 수행하며, 반복 수행에 사용할 변수를 초기화합니다. 조건식에서는 언제까지 반복 수행을 할 것인지 나타내고, 증감식에서는 반복 횟수나 for문에서 사용하는 변수의 값을 1만큼 늘리거나 줄입니다. for문의 수행 순서를 이해하기 위해 간단한 예시를 들어서 알아보도록 할게요! 1부터 5까지 출력하는 간단한 프로그램을 for문으로 구현해보겠습니다.

먼저 처음에 num을 1로 초기화하는 ① 과정을 거칩니다. 다음에는 ② 과정으로 넘어가서 조건을 검사하는데, num은 1이므로 조건을 만족하죠! 조건식이 참이기 때문에 ③ 과정으로 넘어가서 수행문인 System.out.println(num);을 수행합니다. 1이 출력되겠네요! 다음으로 ④ 과정으로 넘어가 num++을 수행합니다. num의 값은 2가 되겠네요! 이런 식으로 계속 반복하면 아래의 표와 같이 반복 실행됩니다.

num 값 1 (초기화) 2 3 4 5 6
조건식
(num <= 5)
거짓
출력 값 1 2 3 4 5 for문 종료
증감식 수행 수행 수행 수행 수행 x

이해가 되시나요? for문은 이렇게 표를 그려서 실행되는 과정을 정리해보면 더 이해가 잘 된답니다!

참고로 for문의 초기화 부분과 증감식 부분은 콤마(,)로 구분하여 여러 문장을 사용할 수 있습니다. 예를 들어 i라는 변수를 새로 만들어 초기화하고, sum이라는 변수도 초기화가 필요하다면 for(int i = 1, sum = 0; ...)와 같이 사용할 수 있어요!

 

5. for문은 왜 가장 자주 사용하나요?

for문을 자주 사용하는 이유는 반복 횟수를 관리할 수 있기 때문인데요, while문에 비해 초기화, 조건 비교, 증감식을 한 줄에 쓸 수 있고 가독성이 좋습니다!

위에 있는 코드는 while문, 아래는 for문으로 구현한 1~10까지 더하는 프로그램입니다. while문은 초기화, 조건식, 증감식까지 하나씩 써줘야 하지만 for문은 한 줄에 모두 쓸 수 있어서 편리합니다!

 

이건 다른 얘기지만... for문은 배열과 함께 자주 사용합니다. 배열은 같은 자료형이 순서대로 모여있는 구조인데, 배열 순서를 나타내는 색인은 항상 0부터 시작하기 때문에 배열의 요소 위치는 n(전체 개수) - 1번째로 표현합니다. 이러한 배열의 특성 때문에 for와 배열은 함께 사용합니다! 배열 자료형은 나중에 글에서 다뤄보도록 하겠습니다. 😎

마지막으로 하나만 더!! for문의 초기화식, 조건식, 증감식이 필요없을 경우에는 생략할 수 있습니다. 또한 무한 반복을 하고 싶은 경우에는 모두 생략하고 for( ; ; )로 사용하면 됩니다!

 

6. 반복문 중첩시키기

반복문 안에 또 다른 반복문을 중첩해서 사용하는 경우도 종종 있는데요, 대표적으로 구구단 출력 프로그램을 예시로 들 수 있습니다. 2단부터 9단까지 증가하는 변수를 선언하고, 그 뒤에 곱하는 수를 1부터 9까지 증가하도록 변수를 선언하여 구구단을 출력할 수 있습니다.

for(int dan = 2; dan <= 9; dan++) {
	for(int times = 1; times <= 9; times++) {
    		System.out.println(dan + " X " + times + " = " + dan * times);
  	}
   	System.out.println();	// 한 줄 띄워서 출력하기
}

이렇게요! 첫 번째 외부 for문은 2~9단을 출력합니다. 내부 for문은 times = 1부터 시작하여 1씩 증가하면서 조건을 만족할 때까지 계속 출력하고, times가 10이 되면 내부 for문이 끝나고 외부 for문으로 돌아가 dan을 증가시키고 다시 내부 for문에서 times가 10이 되기 전까지 수행하는 것이죠!

 

7. continue와 break문

continue문은 반복문과 함께 쓰이며, continue문이 있으면 이후의 문장은 수행하지 않고 for문의 처음으로 돌아가서 증감식을 수행합니다. 반복문을 계속 수행하는데 특정 조건에서는 수행하지 않고 건너뛰어야 할 때 continue문을 사용합니다!

int total = 0;
int num;

for(num = 1; num <= 100; num++) {
	if(num % 2 == 0)
    	continue;
    total += num;
    }
    System.out.println("1부터 100까지 홀수의 합은 " + total + "입니다.");
}

이렇게 num이 짝수인 경우에는 continue문을 사용해서 건너뛰고, 홀수만 total에 더하게 됩니다!

 

break문이전 글에서 switch-case문에 대해 소개할 때 설명드렸는데요, 반복문에서도 break문을 사용하면 더 이상 수행문을 반복하지 않고 빠져나옵니다.

int sum, num = 0;
for(num = 0; sum < 100; num++) {
	sum += num;
}

이 코드에서는 sum이 100보다 같거나 클 경우에는 종료됩니다. 숫자를 몇까지 더하면 100이 넘는지 알고 싶은데, 그러면 코드를 어떻게 작성해야 할까요?

int sum, num = 0;
for(num = 0; ; num++) {
	sum += num;
    if(sum >= 100)
    	break;
}

이 코드에서는 조건식을 생략하는 대신 sum이 100보다 크거나 같으면 break문을 사용하여 반복문을 중단하도록 구현했습니다. 이렇게 break문을 사용해야 정확한 결과를 얻을 수 있어요!

참고로, break문을 사용할 때 반복문이 중첩된 경우, break문을 사용하면 해당 반복문 수행만 중지합니다. 내부 반복문에 break문을 사용한다면 내부 반복문만 빠져나오고, 외부 반복문을 계속 수행한다는 것을 유의하세요!

 

이 글에서는 자바의 반복문과 사용 방법에 대해 알아보았는데요, 이해가 잘 됐을지 모르겠네요... 다음에는 자바의 클래스에 대해 알아보도록 할게요! 자바는 객체 지향 언어인 만큼 클래스가 중요합니다. 함께 열심히 알아보도록 합시다! ✨