Java

Java 제어문 - 반복문 ( for , while , do-while 문 )

비뀨_ 2022. 2. 12. 15:52

전 포스트에서 제어문의 정의와 조건문을 알아봤는데, 제어문의 정의가 궁금하면 앞 포스트를 보면 좋을 것 같다.

https://beetr.tistory.com/36

 

Java 제어문 - 조건문 ( if / switch 문 )

제어문의 뜻 : 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것. 제어문의 종류 조건문 : 조건식에 따라서 다른 실행문을 실행하기 위해서 사용. 반복문 : 어떤 작업을 반복적으

beetr.tistory.com

 

반복문을 다시 설명하자면

말 그대로 어떤 작업을 반복하기 위해서 사용하며, 특정 조건을 충족하면 그만두고 그전까지는 계속 반복한다는 특징이 있다.

 

반복문을 사용하는 이유

예를 들어 1부터 100까지 더해 출력하는 코드가 있다고 가정해보자.

public class LoopEx {
	public static void main(String args[]) {
		for(초기화식; 조건식;증감식) {
			//실행 구문
		}
		while(조건식) {
			//실행 구문
		}
		do {
        	//실행 구문
		}while(조건식)
	}
}

이렇게 다... 쓸 겁니까 정말...?  만약 101개로 바뀐다면..? 1000개로 바뀐다면?

이렇게 반복되는 작업을 효율적으로 하기 위해서 반복문을 사용한다.

반복문의 종류

  • for 문
  • while 문 
  • do - while 문

반복문의 종류는 위의 3개의 종류가 있다.

기본적인 모양은 다음과 같다. 일단 보기만 하고 나중에 이해하는 게 나을 것이다.

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

for 문

반복 횟수를 알고 있을 때 주로 사용한다.

맨 처음 가정을 가져와 보자.

1부터 100까지 100개의 숫자를 더하는 코드가 있다고 가정하면

public class LoopEx {
	public static void main(String args[]) {
		int loopcnt = 100 ; //반복횟수
		int result  = 0; // 결과 값을 보여줄 변수.
		for(int i=1;i<=loopcnt;i++) {
			//결과 = 이전 결과 + i로 결과 갱신하는 코드
			result = result + i; 
			//혹은 result += i; 로 줄여서 쓸 수도 있다.
		}
		System.out.println(result);
	}
}

이렇게 하면 만약 1부터 1000까지 더한 숫자를 구하려면 loopcnt라는 변수를 100에서 1000으로 바꾸면 되고,

50부터 100까지 더한 숫자를 구하려면 i의 값을 50으로 수정하면 바뀐다.

 

작동 순서는 다음과 같다.

for(int i=1;i<=loopcnt;i++) {
    //1. i가 1로 선언 및 초기화 됨.
    //2. i가 loopcnt보다 같거나 작은지 판단
    //3. for문 안의 구문을 수행함.
    //4. i에 1을 더함. 다음 i는 2로 값이 변경 됨.
    
    // ... 반복
    
}

중요한 것은 for문의 i 는 지역 변수이기 때문에 for문 밖으로 나올 수 없다 ( 물에서만 살 수 있는 물고기가 물 밖으로 못 나오는 것과 같은 원리. 폐어는 제외. ) 

 

알아두면 좋은 것

1 . for문에는 초기화를 두 개 이상 쓸 수 있다.  물론 증감식도 초기화한 개수만큼 쓸 수 있다.

for(int i=1,j=100; i<=100 && j>0; i++,j--) {
	//실행구문
}

2 . 변수의 선언이 for문 밖에서 이뤄질 수 있다.

int i=1;
for(;i<=100;i++) {

}
System.out.println(i); // 1

 

작동은 기존의 for문과 똑같이 된다.

장점은 위의 for문에 i는 for문 밖에서 이뤄졌기 때문에 1을 출력할 수 있다.

 

3 . for문의 초기화 식에서 float를 사용하지 말아야 한다.

단적으로 예를 들면, float는 0.1을 정확하게 표현할 수 없고, 0.1보다 아주 조금 크다.

그래서 결과 값이 정확하지 않을 확률이 크다.

 

4 . for문 안에 for문을 쓸 수 있다.

for문이 중첩되면 어떤 일이 벌어질까??

package test;

public class LoopEx {
	public static void main(String args[]) {
		for(int i=0;i<5;i++) {
			System.out.println("i에요!");
			for(int j=0;j<2;j++) {
				System.out.println("  j에요!");
			}
		}
	}
}

이와 같이 i가 1번 돌 때 j는 2번씩 돈다.

큰 톱니바퀴( i로 가정 )가 한번 돌 때, 작은 톱니바퀴(j로 가정)는 여러 번 돌게 된다고 생각하면 된다.

 

 

 

 

 

while 문

조건식이 true일 때 계속해서 반복한다. 특정 조건하에서만 실행될 때 좋다.

 

int loop = 1; //반복 횟수
int sum = 0 ; // 더할 수
while(sum < 100) { // 1번
    sum += loop;	// 2번
    loop++;         // 3번
}
System.out.println("돌아간 횟수 : " + loop);
System.out.println("총 합 : " + sum);

위의 반복문은 총합이 100을 넘어가면 멈추는 코드다.

이처럼 for문과 다르게 횟수가 아니라 특정 조건을 충족할 때까지 도는 게 while문이다.

순서는  1->2->3 처럼 조건을 확인하고 , 실행 구문을 실행하고 다시 반복한다.

int loop = 1; //반복 횟수
int sum = 0 ; // 더할 수
while(true) { // 1번
    if(sum > 100) break;
    sum += loop;
    loop++; 
}
System.out.println("돌아간 횟수 : " + loop);
System.out.println("총 합 : " + sum);

위처럼 while문의 조건안에는 true로 만들 수 있지만, break 키워드가 없으면 무한 반복하기 때문에, 위처럼 사용하려면 break 구문이 필요하다.

do-while 문

while문과 다른점은 do 문을 무조건 한번 실행한 다음 while문의 조건 검사를 한다는 점이다.

 

int loop = 1; //반복 횟수
int sum = 0 ; // 더할 수

do{
 sum += loop;
 loop++; 
}
while(sum < 100);
System.out.println("돌아간 횟수 : " + loop);
System.out.println("총 합 : " + sum);

 

반복문 안에서의 키워드

break

break이 실행되면 반복문을 멈춰버림.

continue

continue가 실행되면 현재 반복문을 뛰어넘어감.