[혼공자] 04-2. 반복문 : for문, while문, do-while문

Benjamin·2023년 2월 26일
0

혼공자

목록 보기
11/27

04-2. 반복문 : for문, while문, do-while문

반복문은 어떤 작업(코드)이 반복적으로 실행되도록 할 때 사용된다.

for, while문은 서로 변환 가능하기때문에 반복문 작성시 어느 쪽을 선택해도 좋지만, for문은 반복 횟수 알고있을 때 주로 사용하며, while문은 조건에 따라 반복할 때 주로 사용한다.

while문과 do-while문의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐일 뿐, 동작 방식은 동일하다.

for 문

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

실행 순서는 '초기화식 -> [조건식 -> 실행문 -> 증감식 -> 조건식 -> 실행문 -> 증감식 ->...-> 조건식] -> for문 빠져나옴' 이다.
[]안의 과정은 조건식이 true일 경우 계속 반복되는것을 뜻하고, 특정 시점에 조건식을 체크했는데 false일경우 반복문을 빠져나오게된다.

  1. for문이 처음 실행될 때 초기화식이 제일 먼저 실행된다.

  2. 조건식을 평가해서 true이면 for문 블록 내부의 실행문을 실행하고, false이면 for문 블록을 실행하지 않고 종료한다.

  3. 블록 내부실행문들이 모두 실행되면 증감식을 실행하고, 다시 조건식을 평가한다.

  4. 조건식 평가 결과가 true이면 '실행문 -> 증감식 -> 조건식'으로 다시 진행하고, false이면 for문이 종료된다.

for문은 주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문이다.

초기화식은 조건식과 실행문, 증감식에서 사용할 변수를 초기화하는 역할을 한다.
초기화식이 필요없을 경우 이를 생략할 수 있다.

int i=1;

for(; i<=100; i++) {...}

어떤 경우에는 초기화식이 둘 이상 있을 수 있고, 증감식 역시 둘 이상 있을 수 있다.
이런경우에는 쉼표(,)로 구분작성한다. (타입이 다른 변수 두 개는 한번에 초기화 당연히 불가능)

for(int i=0, j=100; i<=50 && j>=50; i++, j--) {...}

초기화식에 선언된 변수는 for문 블록 내부엥서 사용되는 로컬변수이다.
따라서 for문을 벗어나면 사용할 수 없다.
벗어나서 사용하게되면 컴파일에러가 발생한다.

아래와 같이 변수 i를 초기화식에서 선언하지않고, 그 전에 선언했다면 for문 내부뿐만아니라 벗어나서도 사용할 수 있다.

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

String str = i + "원";

초기화식에서 처음 선언이아니라, 기존의 변수의 값을 초기화만 하는것도 가능하다.

for문을 작성할 때 주의할 점은 초기화식에서 루프 카운터 변수를 선언할 때 부동 소수점을 쓰는 float타입을 사용하지 말아야한다는 것이다.

다음 예를 보면 이론적으로 10번 반복해야한다.

for(float x= 0.1f; x<=1.0f; x +=0.1f) {...}

하지만 0.1은 float타입으로 정확하게 표현할 수 없기떄문에 루프 카운터 변수 x에 더해지는 실제값은 0.1보다 약간 크다. 결국 해당 루프는 9번만 실행된다.

중첩 for문

for문은 또 다른 for문을 내포할 수 있는데, 이것을 중첩 for문이라고 한다.
이 경우 바깥쪽 for문이 한 번 실행될 때마다 중첩된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 돌아간다.

while문

for문이 정해진 횟수만큼 반복한다면, while문은 조건식이 true일 경우에 계속해서 반복한다.
조건식에는 비교 또는 논리 연산식이 주로 오는데, 조건식이 false가 되면 반복을 멈추고 while문을 종료한다.

while(조건식) {
	실행문
}
  1. while문이 처음 실행될 때 조건식을 평가한다.
  2. 평가 결과가 true이면 실행문을 실행한다.
  3. 실행문이 모두 실행되면 조건식으로 되돌아가 다시 조건식을 평가한다.
  4. 만약 조건식이 true라면 실행문 -> 조건식으로 다시 진행한다.
  5. 만약 조건식이 false라면 while문을 종료한다.

while문 조건식에 사용할 루프 카운터 변수는 while문 시작전에 미리 선언해놓아야 한다.

조건식에는 boolean타입 변수나 true/false 값을 산출하는 어떤 연산식이든 올 수 있다.
만약 조건식에 true를 사용하면 while(true)가 되어서 무한루프를 돈다.
이는 무한히 반복해서 실행하기때문에 언젠가 while문을 빠져나가기 위한 코드가 필요하다.

while문을 종료시키기 위해서는 변수의 값을 false로 만들거나, break문을 이용하는 방법이 있다.

do-while 문

조건식에 의해 반복실행한다는 점에서는 while문과 동일하다.
while문은 시작할 때부터 조건식을 검사하여 블록 내부를 실행할지 결정하지만, 경우에따라 블록 내부의 실행문을 우선 실행하고 실행 결과에 따라 반복 실행을 계속할지 결정할 수도 있다.
이 때 do-while문을 사용할 수 있다.

do {
	실행문;
} while(조건식);

주의할 점은 작성시 while()뒤에 반드시 세미콜론을 붙여야한다.

  1. do-while문이 처음 실행될 때 실행문을 우선 실행한다.
  2. 실행문이 모두 실행되면 조건식을 평가한다.
  3. 조건식 결과가 true이면 실행문 -> 조건식과 같이 반복 실행한다.
  4. 조건식 결과가 false면 do-while문을 종료한다.

break 문

반복문인 for, wwhile, do-while문의 실행을 중지할 때 사용한다.
또한 switch문에서도 break를 사용하여 switch문을 종료한다.

break문은 대게 if문과 같이 사용되어 if문의 조건식에 따라 for문과 while문을 종료할 때 사용한다.

만약 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고, 바깥쪽 반복문은 종료하지 않는다.
중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙이고, break 이름;을 사용한다.

Label : for(...) {
	for(...) {
    	break Label; //이걸 만나면
    }
}
//여기로 바로 빠져나옴

참고로 반복문에 char타입도 가능하다.

for(char upper = 'A'; upper<= 'D'; upper++) {
	System.out.println(upper);
}

//A
//B
//C
//D

continue문

반복문인 for, while, do-while문에서만 사용되는데, 블록 내부에서 continue문이 실행되면 이후 실행문은 실행하지않고, 바로 for문의 증감식 또는 while문, do-while문의 조건식으로 이동한다.

continue문은 반복문을 종료하지않고 계속 반복을 수행한다는 점이 break와 다르다.
이것도 대게 if문과 같이 사용되는데, 특정 조건을 만족하는 경우에 continue문을 실행해서 그 이후의 문장을 실행하지않고 다음 반복으로 넘어간다.


출처
혼자 공부하는 자바

0개의 댓글