4-2. 반복문

Hyun Jun·2022년 1월 22일
0

자바의 정석

목록 보기
16/52
post-thumbnail
post-custom-banner

반복문

주어진 조건을 만족하는 동안, 반복적인 작업을 수행하도록 함.

종류에는 for문, while문, do-while문이 있음.

 

for문

while문과 기능이 유사하지만, 주로 반복횟수를 알고 있을 때 사용하기 적합함.

 

구조

for (초기화; 조건식; 증감식) {
    // 조건식이 true일 때 수행할 코드
}

초기화, 조건식, 증감식은 모두 생략해도 됨. 이 경우에는 조건식이 항상 true인 것으로 간주되어 블럭{}안의 코드들이 무한히 반복 수행되는 무한 루프가 됨.

for (;;) {
    // 수행할 코드 (break 하지 않는 한, 무한 반복됨)
}

 

실행 순서

초기화 (최초 1회) → 조건식 평가 → 조건식이 true일때 수행할 코드 → 증감식 → 조건식 평가 → ... (반복)

조건식이 false가 되는 순간 for문을 빠져나옴.

초기화할 때, 타입 지정을 빼먹지 않도록 주의

일반적으로는 1가지만 사용하지만, 2가지 이상의 변수가 필요하면 ,로 구분. (단, 모든 변수의 타입은 같아야함)

for (int i = 0; i < 10; i++) {
    System.out.printf("%d번째 출력입니다%n", i + 1);
}

 

중첩 for문

for문 안에 또 다른 for문을 넣는 것도 가능함.

for (int i = 2; i < 10; i++) {
    for (int j = 1; j < 10; j++) {
        System.out.printf("%d * %d = %d%n", i, j, i * j);
    }
}

 

향상된(enhanced) for문

배열과 컬렉션의 요소에 접근할 때 기존 for문 보다 편리하게 접근 가능하게 해주는 문법 (JDK 1.5부터 지원됨)

for (타입 변수명 : 배열 또는 컬렉션) {
    // 반복 수행할 코드
}

📌 [주의] 변수명의 타입은 배열(또는 컬렉션)의 요소의 타입과 같아야함.

 

1부터 5까지의 숫자가 담긴 배열 arr의 모든 원소를 한번씩 출력한다고 하면,

int[] arr = {1, 2, 3, 4, 5};

for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

위의 기존 for문 방식을 enhanced 버전으로 만들어보면,

for (int el: arr) {
    System.out.println(el);
}

이렇게 훨씬 간결하게 iteration 을 표현할 수 있음.

 

while문

조건식과 블럭{}으로만 이루어져 있어 for문에 비해 구조가 단순함. 조건식은 생략할 수 없음.

while (조건식) {
   // 조건식이 true인 동안 수행할 코드
}

 

for문과의 비교

1부터 10까지 출력하는 for문은 다음과 같음.

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

이를 while문으로 표현하면,

int i = 0; // 초기화
while (i < 10) {
    System.out.println(i + 1)
}

 

while문도 조건식이 항상 true이게 만들면 무한 루프가 가능함.

while (true) {
    // 수행할 코드 (break 하지 않는 한, 무한 반복됨)
}

 

do-while문

while문을 변형시켜 조건식을 뒤쪽으로 보내고 블럭{}do 키워드와 함께 앞에 위치시킴.

do {
    // 수행할 코드 (최초 1회는 무조건 실행됨. 그 이후는 조건식의 평가 결과가 true면 반복)
} while (조건식)

 

break문

자신이 포함되어있는 가장 가까운 반복문 하나로부터 벗어나게 해줌.

보통은 무한 루프인 반복문을 제어하기 위해 사용함.

 

예시)

while (조건식) {
    // 조건식이 true일 때 수행할 코드
    if (조건식2) {
        // 조건식2가 true일 때 수행할 코드
        break; // 반복문 탈출
    }
}

 

continue문

반복이 진행되는 도중 continue를 만나면 반복문의 시작 위치로 이동함.

  • for문: 증감식으로 이동

  • while문과 do-while문: 조건식으로 이동

break는 조건문인 switch문 안에서도 쓰였던 반면, continue문은 반복문 안에서만 쓸 수 있음.

 

예시)

for (초기화; 조건식; 증감식) {
    // 조건식이 true일 때 수행할 코드
    if (조건식2) {
        continue; // 조건식2가 true이면 for문 내부를 끝까지 돌지 않고 다시 증감식으로 이동함.
    }
    // 조건식2가 false일 때 수행할 코드 (위쪽에서 continue를 만났다면 실행되지 않음)
}

 

이름 붙은 반복문

반복문에 이름을 정해놓고 break문이나 continue문을 사용할 때 이름을 호출해주면 중첩된 반복문을 효율적으로 제어할 수 있음.

예시)

반복문 이름: for (초기화; 조건식; 증감식) {
                 for (초기화2; 조건식2; 증감식2) {
                     if (조건식3) {
                         break 반복문 이름; // 가장 바깥쪽 반복문의 이름을 지정했으므로 전체 반복문 즉시 탈출.
                     }
                 }

             }
profile
Back-end Engineer 👨‍💻
post-custom-banner

0개의 댓글