본문 바로가기
Back-end/Java_T.I.L

4. 제어문_반복문(for, while, do-while)

by 사장님나빠여 2021. 12. 31.

목표

자바가 제공하는 제어문을 학습하세요.

학습할 것 (필수)

선택문
반복문


# 반복문

d반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용되며, 반복문의 종류로는

for문과 while문 그리고 while문의 변형인 do-while문이 있다.

for문과 while문은 구조와 기능이 유사하여 어느 경우에는 서로 변환이 가능하며,

반복 횟수를 알고 있을 때는 for문을  그렇지 않을 때는 while문을 사용한다.

 

for문

for문은 아래와 같이 for(초기화 ; 조건식 , 증감식) {블럭} 모두 4부분으로 이루어져 있으며

조건식이 참인 동안 블럭{ } 내의 문장들을 반복하다가 거짓이 되면 반복문을 벗어난다

for(int i=1;i<=5;i++){
	System.out.println("I can do it.")
}

초기화 : 반복문에 사용될 변수를 초기화하는 부분이며 처음에 한번ㅁ나 수행된다

보통 변수 하나로 for문을 제어하지만, 둘 이상의 변수가 필요할 때는 콤마','를 구분자로 변수를 초기화하면 된다.

ex) for(int i=1, j=0;i<=;i++){ }

 

조건식 : 조건식의 값이 참(true)이면 반복을 계속하고, 거짓(false)이면 반복을 중단하고 for문을 벗어난다.

for의 뜻이 '~하는 동안'이므로 조건식이 '참인 동안' 반복을 계속한다고 생각하면 쉽다.

 

증감식 : 

반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다. 매 반복마다 변수의 값이 증감식에 의해서 점진적으로 변하다가 결국 조건식이 거짓이 되어 for문을 벗어나게 된다변수의 값을 1씩 증가시키는 연산자 '++'이 증감식에 주로 사용되지만 다음과 같이 다양한 연산자들로 증감식을 작성할 수도 있다ex) for(int i=1;i<=10;i++)      for(int i=1;i<=10;i--)      for(int i=1;i<=10;i+=2)      for(int i=1;i<=10;i*=3)

 

다중(중첩) for문

for문 안에 또 다른 for문을 포함시키는 것이 가능하며, 중첩 for문이라고도 한다.

중첩 횟수는 거의 제한이 없다. 

ex)

System.out.println("**********");
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");

↓ for문으로 간단히하면

for(int i=1;i<=5;i++){
	System.out.println("**********");
}

↓ 중첩for문으로 더 간단히 하면 이렇게 된다

for(int i=1;i<=5;i++){
	for(int j=1;j<=5;j++){
		System.out.print("*");
    }
    System.out.println();
}

 

while문

for문에 비해 while문은 구조가 간단하다. if문처럼 조건식과 블럭 { }만으로 이루어져 있다.

다만 if문과 달리 while문은 조건식이 '참(true)인 동안' 즉 조건식이 거짓이 될 때까지 블럭 { }내의 문장을 반복한다

while (조건식) { 
	//조건식의 연산결과가 참(true)인 동안, 반복될 문장을 적는다.
}

while문은 먼저 조건식을 평가해서 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭 { } 내의 문장을

수행하고 다시 조건식으로 돌아간다. 조건식이 거짓이 될 때까지 이 과정이 계속 반복된다.

 

for문과 while문의 비교

1부터 10까지의 정수를 순서대로 출력하는 for문을 while문으로 변경하면 아래 오른쪽과 같다.

//초기화, 조건식, 증감식
for(int i=i ; i<=10 ; i++){
     System.out.println(i);
}
int i=1 //초기화

while(i<=10) { //조건식
     System.out.println(i);
      i++;  //증감식
}

위의 두 코드는 완전히 동일하다. for문은 초기화, 조건식, 증감식을 한 곳에 모아 놓은 것이고

while 문과 다르지 않다. 그래서 for문과 while문은 항상 서로 변환이 가능하다.

그래도 이 경우 while문보다 for문이 더 간결하고 알아보기 쉽다. 

만일 초기화나 증감식이 필요하지 않은 경우라면, while문이 더 적합할 것이다.

do-while문

do-while문은 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{ }의 순서를 바꿔놓는 것이다.

그래서 while문과 반대로 블럭{ }을 먼저 수행한 후에 조건식을 평가한다.

while문은 조건식의 결과에 따라 블럭{ }이 한 번도 수행되지 않을 수 있지만,

do-while문은 최소한 한 번은 수행될 것을 보장한다

많이 쓰이지는 않지만 반복적으로 사용자의 입력을 받아서 처리할 때 유용하다.

do{
	//조건식의 연산결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
} while(조건식); ← ! 끝에 ';'을 잊지 않도록 주의 !

break문

break문은 자신이 포함 된 가장 가까운 반복문을 벗어난다.

주로 if문과 함께 사용되어 특정 조건을 만족할 때 반복문을 벗어나게 한다.

특히, 무한 반복문에는 조건문과 break문이 항상 같이 사용된다. 

그렇지 않으면 무한히 반복되기 때문에 프로그램이 종료되지 않을 것이다.

 

continue문continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.

 

continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과 다르다.주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장을 수행하지 않고다음 반복으로 넘어가서 계속 진행하도록 한다.

 

댓글