[Java] 코드 실행 흐름 제어

kiteB·2021년 12월 19일
0

Java

목록 보기
4/35
post-thumbnail

[ 조건문 (if문, switch문) ]

1. if

조건식의 결과에 따라 블록 실행 여부가 결정된다.

조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나, boolean 변수가 올 수 있다.
조건식이 true이면 블록을 실행하고 false이면 블록을 실행하지 않는다.

예제

public class IfExample {

    int score = 93;
    
    if (score >= 90) {
        System.out.println("점수가 90보다 큽니다.");
        System.out.println("등급은 A입니다.");
    }
    
    if (score < 90) {
        System.out.println("점수가 90보다 작습니다.");
        System.out.println("등급은 B입니다.");
    }
}

실행 결과

점수가 90보다 큽니다.
등급은 A입니다.

2. if-else

if문은 else 블록과 함께 사용되어 조건식의 결과에 따라 실행 블록을 선택한다.

if문의 조건식이

  • true이면 if문의 블록이 실행되고,
  • false이면 else문의 블록이 실행된다.

조건식의 결과에 따라 이 두 개의 블록 중 어느 한 블록의 내용만 실행하고 전체 if문을 벗어나게 된다.

예제

public class IfElseExample {

    int score = 85;
    
    if (score >= 90) {
        System.out.println("점수가 90보다 큽니다.");
        System.out.println("등급은 A입니다.");
    } else {
        System.out.println("점수가 90보다 작습니다.");
        System.out.println("등급은 B입니다.");
    }
}

실행 결과

점수가 90보다 작습니다.
등급은 B입니다.

3. if-else if-else

조건문이 여러 개인 if

처음 if문의 조건식이 false일 경우, else if문을 이용하여 다른 조건식의 결과에 따라 실행 블록을 선택할 수 있다.

예제

public class IfElseIfElseExample {

    int score = 75;
    
    if (score >= 90) {
        System.out.println("점수가 90~100 입니다.");
        System.out.println("등급은 A입니다.");
    } else if (score >= 80) {
        System.out.println("점수가 80~89 입니다.");
        System.out.println("등급은 B입니다.");
    } else if (score >= 70) {
        System.out.println("점수가 70~79 입니다.");
        System.out.println("등급은 C입니다.");
    } else {
        System.out.println("점수가 70 미만 입니다.");
        System.out.println("등급은 D입니다.");
    }
}

실행 결과

점수가 70~79 입니다.
등급은 C입니다.

4. 중첩 if

if문의 블록 내부에는 또 다른 if문을 사용할 수 있다. 이를 중첩 if문이라고 부른다.

if문뿐만 아니라 switch문, for문, while문, do-while문은 서로 중첩시킬 수 있다.

예제

public class IfNestedExample {
    public static void main(String[] args) {
        int score = (int)(Math.random()*20) + 81;
        System.out.println("점수: " + score);

        String grade;

        if (score >= 90) {
            if (score >= 95) {
                grade = "A+";
            } else {
                grade = "A";
            }
        } else {
            if (score >= 85) {
                grade = "B+";
            } else {
                grade = "B";
            }
        }
        System.out.println("학점: " + grade);
    }
}

실행 결과

점수: 81
학점: B

5. switch

if문과 마찬가지로 조건 제어문이다.
if문처럼 조건식이 true인 경우에 블록 내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.

switch문은 괄호 안의 값과 동일한 값을 갖는 case로 가서 실행문을 실행시킨다.
만약 괄호 안의 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. (default는 생략 가능하다.)

예제

public class SwitchExample {
    public static void main(String[] args) {
        int num = (int) (Math.random() * 6) + 1;

        switch (num) {
            case 1:
                System.out.println("1번");
                break;
            case 2:
                System.out.println("2번");
                break;
            case 3:
                System.out.println("3번");
                break;
            case 4:
                System.out.println("4번");
                break;
            case 5:
                System.out.println("5번");
                break;
            default:
                System.out.println("6번");
                break;
        }
    }
}

실행 결과

6번

[ 반복문 (for문, while문, do-while문) ]

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


1. for

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

  1. for문이 처음 실행될 때 ①초기화식이 제일 먼저 실행된다.
  2. 그 다음 ②조건식을 평가해서
    • true면 ③실행문을 실행시키고,
    • falsefor문 블록을 실행하지 않고 끝나게 된다.
  3. 블록 내부의 ③실행문들이 모두 실행되면 ④증감식을 실행시키고 다시 ②조건식을 평가하게 된다.
  4. 위의 과정을 반복한다.

예제

public class ForSumFrom1To100Example {
    public static void main(String[] args) {
        int sum = 0;

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

        System.out.println("1 ~ 100 합: " + sum);
        
    }
}

실행 결과

1 ~ 100 합: 5050

2. while

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

  1. while문이 처음 실행될 때 ①조건식을 평가한다. 평가 결과가 true이면 ②실행문을 실행시킨다.
  2. 실행문이 모두 실행되면 다시 조건식으로 되돌아가서 ①조건식을 다시 평가한다.
    • true면 ② → ①로 다시 진행하고,
    • falsewhile문을 종료한다.

예제

public class WhileSumFrom1To100Example {
    public static void main(String[] args) {
        int sum = 0;

        int i = 0;

        while(i <= 100) {
            sum += i;
            i++;
        }

        System.out.println("1 ~ " + (i - 1) + " 합: " + sum);

    }
}

실행 결과

1 ~ 100 합: 5050

3. do-while

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

  1. do-while문이 처음 실행될 때 실행문을 우선 실행한다.
  2. 실행문이 모두 실행되면 ②조건식을 평가한다.
    • true면 ① → ②와 같이 반복하여 실행한다.
    • falsedo-while문을 종료한다.

do-while문은 while() 뒤에 반드시 세미콜론;을 붙여야 한다.


4. 기타 제어문

1) continue

루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어가게 해주는 역할을 한다. 보통 반복문 내에서 특정 조건에 대한 예외 처리를 하고자 할 때 사용된다.

예제

public class ContinueExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 20; i++) {
            if (i % 5 == 0) {
                System.out.println(i);
            } else {
                continue;
            }
        }

    }
}

5로 나누어 떨어지는 경우만 출력하고, 아닌 경우에는 건너뛴다.

실행 결과

5
10
15
20

2) break

루프 내에서 사용하여 해당 반복문을 완전히 종료시킨 뒤, 반복문 바로 다음에 위치한 명령문을 실행한다. 루프 내에서 조건식의 판단 결과와 상관없이 반복문을 완전히 빠져나가고 싶을 때 사용한다.

예제

public class BreakExample {
    public static void main(String[] args) {
        
        int i = 5, j = 10;
        while (true) {
            if (i >= j) {
                break;
            }
            i++;
        }
        System.out.println(i);
    }
}

while의 조건이 True로, 무한 루프이지만, ij보다 크거나 같을 때 break를 수행하도록 하여서i10일 때 루프가 종료된다.

실행 결과

10

3) 이름을 가지는 반복문 ( break with label )

반복문이 중첩되어 있을 때, 한 번에 모든 반복문을 빠져나가거나 특정 반복문까지만 빠져나가고 싶다면 반복문에 이름(label)을 설정하면 된다!

반복문 앞에 이름(라벨)을 붙이고, break 이름;을 하면 된다.

예제

public class BreakOutterExample {
    public static void main(String[] args) {

        Outter:
        for (int i = 2; i < 10; i++) {
            for (int j = 2; j < 10; j++) {
                if (i == 5) {
                    break Outter;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
        }
    }
}

break Outter;를 통해, 가장 바깥쪽 반복문까지 종료시켰다.

실행 결과

2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

i5일 때 종료하였으므로, 4단까지만 출력된다.


[ 참고자료 ]

이것이 자바다 책
http://tcpschool.com/java/java_control_etc

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글