4.1.4 for 반복 제어문

jh·2022년 1월 21일
0

Do it! 자바 완전 정복

목록 보기
25/70

for 문은 실행 구문을 반복적으로 수행하는 반복 제어문으로 일반적으로 반복 횟수가 정해질 때 주로 사용한다. 즉, for 문의 구문을 보면 몇 번 반복하는지 유추할 수 있어야 한다. for 문의 기본 문법 구조는 다음과 같다.

💨for 문의 구성

for(초기식; 조건식; 증감식) {
실행 구문; // 조건식이 true인 동안 실행
}

for 다음의 소괄호()안에는 3개의 항목이 있고, 각각은 세미콜론(;)으로 구분돼 있다. 나중에 다시 다루겠지만, 컴파일러는 문법적으로 for문의 소괄호 안에 세미콜론이 2개 있는지 여부만 점검한다.

  • 초기식 : for문이 시작될 때 딱 한 번 실행되고 다시는 실행되지 않는다. 따라서 for 문 안에서만 사용할 변수는 주로 초기식에서 초기화한다.
  • 조건식 : 실행 구문으로 들어가기 위한 유일한 출입구로, 이 조건식의 결과가 true가 나오는 동안은 실행 구문을 계속 반복한다. 만일 조건식이 false가 나오면 더 이상 반복을 수행하지 않고 for 문을 빠져 나간다.
  • 증감식 : for 문의 실행 구문이 모두 수행된 후 닫힌 중괄호{}를 만나면 다음 번 반복을 위해 다시 이동하는 위치로 매회 반복이 수행될 때마다 호출된다.

+) 초기식에 포함된 변수의 선언 위치
초기식에 포함된 변수는 for문의 내외부에서 선언할 수 있다. 먼저 외부에서 변수를 선언하고 초기식에서 초기화만 햇을 때, for문이 종료된 이후에도 변수는 사라지지 않는다.

int i;
for(i = 0; i < 3; i++) {
System.out.println("실행");
}
System.out.println(i); //3

반면 for문의 초기식 안에서 선언했을 때는 for 문의 내부에서만 사용할 수 있으며 대부분 for 문의 반복 횟수를 지정하기 위한 용도로만 변수를 사용하므로 초기식 내부에서 변수를 선언하는 이 방식이 주로 사용된다.

for(int i = 0; i < 3; i++) {
System.out.println("실행");
}
System.out.println(i); // 오류

또한 초기식과 증감식은 쉼표(,)로 구분해 여러 개를 동시에 표기할 수 있다.

for(int i = 0, j = 0; (i+j) < 10; i++, j++)
//...
}

증감식 실행 이후 다시 조건식을 검사하며 이후에는 앞의 과정이 반복된다. for 문의 실행 순서를 정리하면 다음과 같다.

단계 A : 초기식 -> 조건식(참) -> 실행 구문
단계 B : 중괄호 닫힘 -> 증감식 -> 조건식(참) -> 실행 구문
...
단계 C : 중괄호 닫힘 -> 증감식 -> 조건식(거짓) -> 종료

앞에서 언급한 것처럼 컴파일러는 for 문의 소괄호 안에 2개의 세미콜론이 있는지만 문법적으로 점검한다. 즉 초기식 조건식 증감식을 생략하더라도 세미콜론만 있으면 문법 오류는 발생하지 않는다. 그 결과, 몇 가지 특수한 for 문 형태가 가능하다. 먼저 for의 실행 구문으로 진입하는 유일한 입구인 조건식을 생략하면 컴파일러는 조건식에 true를 자동으로 삽입한다. 즉 for 문으로 들어가는 무늘 항상 열어 놓은 셈이다. 따라서 for 문에서 조건식을 생략하면 구문을 끊임 없이 반복한다.

for 문에서 조건식이 생략됐을 때(무한 루프)

for (초기식; ; 증감식){
실행 구문;
}

대부분 무한 루프 안에는 break 키워드를 삽입해 특정 조건을 만족했을 때 무한 루프를 탈출하도록 프로그래밍 한다.
break를 이용한 무한 루프 탈출

for(int i = 0; i++){
if(i > 10) {
break;
}
System.out.print(i + " "); // 0 1 2 3 4 5 6 7 8 9 10
}

무한 반복을 하는 코드 다음에 어떤 실행 코드를 작성하면 문법 오류가 발새한다. 무한 루프에 가로막혀 결코 도달할 수 없는 코드를 작성했기 때문이다. 또, 조건식에 명시적으로 false를 넣으면 문이 항상 닫힌 상태이므로 for 문 안의 내용을 절대 실행할 수 없으므로 오류가 발생한다. 지극히 직관적이고 당연한 결과다.

for 문에서 도달할 수 없는 코드를 작성해 오류가 발생하는 예

for( ; ; ) { 
실행 구문;
}
실행 구문; // - 오류 발생

for( ; false ; ) {
실행 구문; // - 오류 발생
}

실습

     // for 문 기본 문법 구조
        int a; // for 문의 반복 횟수를 지정하는 변수를 외부에서 선언
        for(a = 0; a < 3; a++);{
            System.out.print(a + "");
        }
       System.out.println();

        for(int i = 0; i < 3; i++) { // for 문의 반복 횟수를 지정하는 변수를 초기식에서 선언
            System.out.print(i + "");
        }
        System.out.println();

        for(int i = 0; i < 100; i++) {
            System.out.print(i + "");
        }
        System.out.println();

        for(int i = 10; i > 0 ; i--) {
            System.out.print(i + "");
        }
        System.out.println();

        for(int i = 0; i < 10 ; i += 2) {
            System.out.print(i + "");
        }
       System.out.println();

        for(int i = 0, j = 0; i < 10; i++, j++) {
            System.out.println(i + j + "");
        }
        System.out.println();

        //for 문의 특수한 형태 (무한 루프)
      /*  for(int i = 0; ; i++) {
        System.out.print(i + "");
        }
        for(;;) {
        System.out.print("무한 루프");
        }
        */
        System.out.println();
        
        //무한 루프 탈출
        for(int i = 0; ; i++) {
            if(i>10) {
                break;
            }
            System.out.print(i + "");
        }
        System.out.println("무한 루프 탈출");

결과

profile
코딩 공부 중...

0개의 댓글