본문 바로가기
Java & Kotlin/Java

7. 반복문 (for문, while문, do-while문, 디버깅표)

by heekng 2021. 1. 18.
반응형
 
자바에서의 반복문의 종류와 이용방법에 대하여 알아보겠습니다.
자바의 반복문에는 for문과 while문이 있습니다.

1. for문
for문이란 임의의 값을 가지고 조건식이 거짓일 때까지 반복하고, 반복시 값을 변화시키는 반복문입니다.

 

for문의 기본적인 구조는 다음과 같이 구성되어 있습니다.
public class Test{
    public static void main(String[] args) {
        for (초기값; 조건식; 증감량) {
            반복할 내용
        }
    }
}
위 코드처럼 초기값을 정하고, 조건식을 입력하여 값이 조건식에 해당된다면 반복하는 내용을 수행한 후 초기값을 증감량에 맞게 변화시킨 후 다시 조건식을 확인하는 방식입니다.
 
예를들어
public class Test{
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            System.out.println(i+"번 출력");
        }
    }
}
라는 코드를 입력한다면 내부적으로 i=0 -> i가 3보다 작은가? (참) -> 내용실행 -> i에 1더하기 -> i가 3보다 작은가? (참) -> 내용실행 ->... 의 과정이 반복됩니다.
따라서

콘솔에는 위와같이 출력되게 됩니다.
 
for문의 예시)
public class Test{
    public static void main(String[] args) {
        int count = 0// count 초기화
        for (int i = 0; i < 6; i++) { // i를 0으로 시작해 6번 반복하는 for문
            if(i % 2 == 0) { // i가 짝수일 때 참
                count ++// i가 짝수일 때 count에 1을 더한다.
            }
        }
        System.out.println(count+"개"); // for문이 끝나면 짝수의 개수 출력
    }
}
위 코드처럼 for문 안에 조건문 if를 넣기도 하면서 다양하게 반복문을 활용할 수 있습니다.

실제 실행하였을 때 짝수는 0, 2, 4뿐이므로 3개라고 정상적으로 출력됨을 확인할 수 있습니다.

2. while문
while문은 for문과 다르게  조건식 하나만을 가지고 false(거짓)일 때 멈추고 다음 코드를 수행하는 반복문입니다. (선조건후처리)
public class Test{
    public static void main(String[] args) {
        while (조건식) {
            수행할 내용
        }
    }
}
위와 같이 for문과는 상대적으로 간단하게 작성하여 이용하며 조건식은 boolean type으로 리턴되는 값을 넣어주어야합니다 (true, false입력 가능)
while문의 예시)
public class Test{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); //스캐너 생성
        boolean sw = true//스위치의 초기값을 참으로 설정
        while(sw) { // 스위치의 초기값이 true이기 때문에 반복한다.
            System.out.print("정수 입력, -1일 때 종료 : ");
            int x = sc.nextInt(); // 정수 입력받기
            System.out.println(x); // 입력받은 값 출력
            if(x == -1) { // x가 -1을 입력받았다면
                System.out.println("종료");
                sw = false// 스위치를 거짓(false)로 설정하여 더이상 while문 진행X
            }
        }
    }
}
 

위 예시코드를 보면 알수있듯이 while문의 조건식이 끝날수있는 요소를 넣어줌으로써 (-1을 입력받았을 때 sw = false) while문이 무한루프에 걸리지 않도록 주의해야 합니다.
꼭 스위치를 이용하지 않고 break;을 이용하여
public class Test{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); //스캐너 생성
        while(true) { // 기본값을 참으로 설정
            System.out.print("정수 입력, -1일 때 종료 : ");
            int x = sc.nextInt(); // 정수 입력받기
            System.out.println(x); // 입력받은 값 출력
            if(x == -1) { // x가 -1을 입력받았다면
                System.out.println("종료");
                break// break;을 이용하여 반복문을 탈출한다.
            }
        }
    }
}
위처럼 이용할 수도 있습니다.

3. do-while문
do-while문은 while문과 비슷하지만 진행 순서가 다른 반복문입니다.
while문은 외부요소에 의해 참이여야 반복을 시작하지만, do-while문은 먼저 진행을 한 후에 조건문을 확인하여 참일 때 다시 반복하는 반복문입니다.
public class Test{
    public static void main(String[] args) {
        do {
            반복할 코드
        } while (조건문);
    }
}
위처럼 do안에 반복할 코드를 입력하고, while에 조건문을 입력하는 선처리후조건의 형식을 띄고 있습니다.
do-while문의 예시)
public class Test{
    public static void main(String[] args) {
        int cnt = 1// 카운트 초기값 1
        do {
            System.out.println(cnt+"번째 출력");
            cnt++// 카운트에 1추가
        } while (cnt != 5); // 카운트가 5가 아니면 참, 5일때 멈춤
        System.out.println("끝"); // do-while문이 끝나면 끝이라고 출력
    }
}
 

위와 같이 이용 가능하며, 더 직관적으로 확인한다면
public class Test{
    public static void main(String[] args) {
        int cnt = 1// 카운트 초기값 1
        do {
            System.out.println(cnt+"번째 출력");
        } while (cnt != 1); // 카운트가 1이 아니면 참, 1일때 멈춤
        System.out.println("끝"); // do-while문이 끝나면 끝이라고 출력
    }
}
 

위와같이 카운트가 1이지만 먼저 do를 진행하고 더 진행할지 확인하는 while에서 거짓(false)이기 때문에 끝이라는 문자가 출력됨을 확인할 수 있습니다.

4. 디버깅표
디버깅표란 굳이 반복문이 아니더라도 이용가능하지만, 반복문에서 코드설계상의 문제가 있을 때 어디서 문제가 있는지 진행과정을 직관적으로 확인하는 표입니다.
public class Test{
    public static void main(String[] args) {
        int count = 0// count 초기화
        for (int i = 0; i < 6; i++) { // i를 0으로 시작해 6번 반복하는 for문
            if(i % 2 == 0) { // i가 짝수일 때 참
                count ++// i가 짝수일 때 count에 1을 더한다.
            }
        }
        System.out.println(count+"개"); // for문이 끝나면 짝수의 개수 출력
    }
}
위 for문에서 이용했던 코드를 디버깅표로 나타낸다면
 
i
i < 6
i % 2 == 0
count
count 출력여부
1번째
0
1
 
2번째
1
거짓
1
 
3번째
2
2
 
4번째
3
거짓
2
 
5번째
4
3
 
6번째
5
거짓
3
 
7번째
6
거짓
 
 
o
위처럼 내가 작성한 코드가 내부적으로 어떤 과정으로 진행되는지 확인하여  코드상의 오류를 바로잡을 수 있다는 장점이 있습니다.
생각보다 자주 이용하는 디버깅방법이니 한번쯤은 직접 작성해보는 것을 추천드립니다.
 
이상으로 반복문에 대하여 알아보았습니다.
반응형

'Java & Kotlin > Java' 카테고리의 다른 글

10. 클래스 (Class, 생성자)_1  (0) 2021.01.19
9. 메서드, 함수 (Function, 오버로딩)  (0) 2021.01.19
8. 배열 (Array)  (0) 2021.01.19
6. 조건문  (0) 2021.01.18
5. 연산자 (Operator)  (0) 2021.01.18
4. 형변환 (Casting)  (0) 2021.01.18