새끼 개발자의 Life is egg

[Java] 반복문 - for, while, do-while 본문

개발's egg/Java

[Java] 반복문 - for, while, do-while

현z 2019. 1. 12. 20:36

 반복문은 문장 또는 문장들을 여러번 반복해서 수행하고자 할 때 사용한다.

 

주어진 조건이 만족하는 동안 주어진 문장들을 반복적으로 실행하기 때문에 조건문을 포함하고 있다.

조건식의 결과가 true이면 실행, false이면 반복을 중단한다. 

 

반복문의 종류는 for문,  while문 그리고 do-while문이 있다.

 

for문이나 while문은 구조와 기능이 비슷해서 서로 변환되며, 어느 것으로 작성해도 문제는 없지만

for문은 주로 원하는 반복횟수를 지정할 때, while문은 반복횟수를 모를 때 사용한다(얼마나 반복해야할지 모를 때).

 

 

1
2
3
4
5
6
7
8
9
10
public class Main {
 
    public static void main(String[] args) {
 
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello, world!");
        }
 
    }
}
cs

 

"Hello, world!" 를 10번 출력해주는 for문이다.

 

 for문의 괄호 (  ) 에 조건식을 넣고, 중괄호 {  } 안에 원하는 문장을 넣으면 조건식 결과에 따라 반복되는 형태이다. for문을 작성할 때 블럭 내의 문장이 한 줄일 경우는 

 

1
2
3
4
5
6
7
8
9
10
public class Main {
 
    public static void main(String[] args) {
 
        for (int i = 0; i < 10; i++)
            System.out.println("Hello, world!");
 
 
    }
}
cs

 

처럼 중괄호 { } 를 생략해도 되지만, 나중에 헷갈릴 수 있기 때문에 웬만하면 써주는 것이 좋다.

 

for문의 조건식을 보자

 

1
2
3
4
5
for ( 초기화식 ; 조건식 ; 증감식 ) {
 
    // 문장
 
}
cs
 
으로 이루어져 있다.
 
초기화 --> 조건식 --> (조건식의 값이 참이면) --> 블럭 안의 문장 실행 --> 증감식 --> 조건식 ... 
의 순서로 반복된다.
 
 
 초기화식
반복문에 사용될 변수를 초기화하는 부분으로, 반복문이 시작될 때 한 번만 수행된다.
변수는 같은 타입의 두 개 이상의 변수로 이루어질 수도 있지만 보통 하나로 for문을 제어한다.
 
 조건식
조건식의 값이 참이면 반복을 계속, 거짓이면 반복을 멈추고 for 문을 탈출한다.
조건식을 잘못 작성하면 블럭 내의 문장이 한 번도 실행되지 않거나 무한히 반복되는 무한반복에 빠질 수 있으니 주의한다.
 
 증감식
반복문을 제어하고 있는 변수의 값을 증가시키거나 감소시키는 식. 반복할때마다 변수의 값을 변화시켜 결국에는 조건식을 거짓으로 만들게 하여 for문을 빠져나가게 한다.
++ 말고도 -- 라던지 i+=2 i=2*i+1 처럼 다양한 연산자로 작성하기도 한다.

 

for문의 초기화식, 조건식, 증감식은 필요에 따라 생략이 가능하다.

조건식을 생략하거나 세가지 모두 생략할 경우 무한반복문이 된다.

 

 

 

 

1
2
3
4
5
for(;;) {
 
    System.out.println("무한루프에 빠졌어...");
 
}
cs

 

 
 

양영순 작가님의 사랑해 마지않는 웹툰 롯... 아니 덴마.

패드랏슈와 진롯개가 무한루프를 탈출하지 못하고 (메모리를) 털리고 있다. (아님)

 

 

조건을 잘 줘서 의도하지 않은 무한루프를 방지하자.

 

 

 

 

위에서 작성한 for문을 털어보자.

 

1
2
3
4
5
6
7
8
9
10
public class Main {
 
    public static void main(String[] args) {
 
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello, world!");
        }
 
    }
}
cs

 

int i = 0;  // 정수형 타입의 i 라는 변수를 0으로 초기화했다.
i < 10      // 변수 i 가 10 보다 작으면 계속 진행한다.
i++         // 변수 i를 1 증가시킨다.
 
1. 초기화식
변수 i를 0으로 초기화했다.
 
2. 조건식 체크
변수 i의 값은 현재 0이므로 10보다 작은 것이 맞다. 고로 값은 true 이다.
 
3. 조건식의 값이 true이기 때문에 블럭 안의 문장을 실행한다. "Hello, world!"를 한 번 출력한다.
 
4. 증감식
변수 i를 1 증가시켜서 i의 값이 1이 되었다.
 
5. 조건식 체크
변수 i의 값은 현재 1이므로 10보다 작은 것이 맞다. 고로 값은 true 이다.
 
6. 조건식의 값이 true이기 때문에 블럭 안의 문장을 실행한다. "Hello, world!"를 한 번 출력한다.
 
7. 증감식
변수 i를 다시 1 증가시켜서 값을 2로 바꾼다.
 
... 반복 ...
 
8. 증감식
변수 i 를 1 증가시켜 값은 10으로 바꾼다.
 
9. 조건식 체크
변수 i의 값이 10이 되었으므로 조건식 i < 10 의 값은 false가 되었다.
 
10. 조건식의 값이 false가 되었으므로 for문을 벗어난다.
 
 
이렇게 반복문을 잘 활용하면 10줄 작성할 것을 한두줄로도 끝낼 수 있다.
 
 
 
 
한 줄로 짤 코드를 누가 열 줄로 만들어놨어요?
 
 

 

GuguClass 처럼 for문을 여러번 중첩하여 다중 반복문을 만들 수 있다.

 

 

 

 

이번에는 while문이다.

 

for문과는 다르게 ( 조건식 ) 하나와 { 블럭 } 만으로 이루어져 있지만, 

조건식의 값이 참일 동안 블럭 안의 문장을 수행한다는 건 같다.

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main {
 
    public static void main(String[] args) {
 
        int i = 0;
 
        while (i < 10) {
            System.out.println("Hello, world!");
            
            i++;
        }
    }
}
cs

 

위에서 작성한 for문과 같이 "Hello, world!" 를 10번 출력해주는 while문이다.
 
( 괄호 ) 안에 조건식을, { 블럭 } 안에 반복을 원하는 문장을 넣어준다.
또 변수를 미리 생성해놓고, 문장 안에 증감식같은 조건을 주어서 의도하지 않은 무한반복에 빠지지 않도록 한다.
 

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {
 
    public static void main(String[] args) {
 
        int i = 0// 변수 설정
        
        while( 조건식 ) {
            
            System.out.println("Hello, world!"); // 반복할 문장
            
            i++// 증감식(조건)
            
        }
    }
}
cs

 

 

 

다만 while문은 for문과는 다르게 조건식을 생략할 수 없다. 조건식이 항상 참이 되게 하려면 true 를 넣어준다.

 

순서는 간단한다. 조건식 --> (조건식의 값이 참이면) --> 블럭 실행 --> 조건식 반복이다.

 

 

위의 while 문도 뜯어보자

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {
 
    public static void main(String[] args) {
 
        int i = 0// 변수 설정
        
        while (i < 10) {
            
            System.out.println("Hello, world!"); // 반복할 문장
            
            i++// 증감식
            
        }
    }
}
cs
 
1. int형 변수 i를 0으로 초기화한다.
 
2. while문을 만났다. 조건식을 확인한다.
 
3. 변수 i의 값이 0이므로 10보다 작은 것이 맞다. 따라서 조건식의 값은 ture 다.
 
4. 조건식의 값이 참이므로 블럭 안의 문장을 실행한다. "Hello, world!" 가 한 번 출력된다.
 
5. 변수 i의 값을 1 증가시켜 i의 값이 1이 되었다.
 
6. 다시 조건식을 확인한다. i 의 값이 1이므로 조건식의 값이 참이다.
 
7. 블럭 안의 문장을 실행한다. "Hello, world!" 가 한 번 출력된다.
 
... 반복 ...
 
8. 변수 i의 값이 1 증가되어 10이 되었다.
 
9. 조건식을 확인. i의 값이 10이므로 조건식 (i < 10) 의 값은 false이다.
 
10. 조건식의 값이 false가 되었으므로 while문을 벗어난다.

 

 

 

 

 do-while문

while문이 변형된 형태이다. 기본적인 구조는 while문과 동일하지만 조건식과 블럭의 순서가 바뀌어 있다.

블럭을 먼저 수행한 후에 조건식을 체크하게 되므로 while문이 조건식에 따라 한 번도 수행되지 않을 수 있는 것과 다르게 do-while문은 최소한 한 번은 수행된다.

 

 

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
 
    public static void main(String[] args) {
 
        int i = 0;
 
        do {
 
            System.out.println("Hello, world!");
 
        } while (i < 10);
 
    }
}
cs
 
 
마찬가지로 "Hello, world!"를 10번 출력하는 do-while 문이다.
 
조건식 괄호 뒤에 세미콜론 ; 붙이는 것을 잊지 말자.
 
 
 
 
 

 break문

break문은 switch문에서도 사용하지만 반복문에서도 사용할 수 있다. 주로 if문과 함께 사용되어 특정 조건을 만족하면 자신이 포함된 가장 가까운 반복문을 탈출하게 한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Main {
 
    public static void main(String[] args) {
 
        int i = 0// 변수 초기화
 
        while (true) {
 
            i = (int) (Math.random() * 31+ 1;    // i에 1 ~ 31 사이의 난수를 저장
 
            System.out.println("i : " + i);        // i를 출력
 
            if (i == 31) {                        // i의 값이 31이라면
                break;                            // break문 실행. while문을 빠져나간다.
            }
        }
    }
}
cs

 

조건식을 true로 주었으나 블럭 안에 if문과 break문을 준 while문이다.

 

만약 랜덤으로 생성된 난수가 31이라면,

if문의 조건에 맞아들어가 break문을 수행하여 반복문을 벗어나게 될 것이다.

 

 

break문을 잘 활용하자.

 

 

 

 continue문

continue문은 반복문에서만 사용된다. 반복 도중에 continue문을 만나면 반복문의 끝으로 바로 이동, 다음 반복문으로 넘어간다. for문이라면 증감식으로, while문이나 do-while문이라면 조건식으로 이동하는 것이다.

 

break문처럼 주로 if문과 함께 사용되지만 break문이 반복문을 완전히 벗어나는 것에 비해 continue문은 다음 반복을 계속해서 수행한다는 차이가 있다.

 

 

 

 

 

참고 : 자바의 정석

'개발's egg > Java' 카테고리의 다른 글

ObjectMapper 에러  (0) 2023.03.01
스프링부트 mybatis bean 생성 못할때  (0) 2023.02.28
메모장으로 자바 프로그램을 작성해보자  (0) 2019.01.11
[자바이론] 변수  (0) 2019.01.05
[자바이론] 자바란?  (0) 2019.01.01
Comments