Java/STUDY HALLE

[Java] 제어문

무토(MUTO) 2020. 12. 5. 01:03

Java에서 코드의 흐름을 통제하는 방법에는 두가지가 있다.

바로 선택문과 반복문인데 이 두가지를 통해 프로그램의 실행 흐름을 조작하는 방법에 대해서 알아보도록 하자.

1. 선택문

if문

if

if (inputNumber > 0) {
    System.out.println("양수입니다.");
}

if 우측의 괄호에 참, 거짓을 구분할 수 있는 판별식이 들어가고 해당 판별식이 참이라면 그 후에 이어지는 중괄호에 있는 문장을 읽어 실행한다.


else

if (inputNumber > 0) {
    System.out.println("양수입니다.");
} else {
    System.out.println("양수가 아닙니다.");
}

else 의 의미는 위에 해당하는 조건식의 !연산을 한 결과가 참이면 실행한다는 의미이다. 위의 문장을 해석하면 다음과 같다.

if (!(inputNumber > 0)) {
    System.out.println("양수가 아닙니다.");
}

if (inputNumber > 0) {
    System.out.println("양수입니다.");
}

else if

if (inputNumber > 0) {
    System.out.println("양수 입니다.");
} else if (inputNumber < 0) {
    System.out.println("음수 입니다.");
} else {
    System.out.println("양수도 음수도 아닙니다.");
}

else if 의 의미는 위에서 판별한 모든 판별식이 거짓이고 현재의 if문에 해당하는 판별식이 참이라면 블록에 있는 코드를 실행한다는 뜻이다. 위의 문장을 해석하면 다음과 같다.

if (!(inputNumber > 0) && !(inputNumber < 0)) {
    System.out.println("양수도 음수도 아닙니다.");
}

if (!(inputNumber > 0) && (inputNumber < 0)) {
    System.out.println("음수입니다.");
}

if (inputNumber > 0) {
    System.out.println("양수입니다.");
}



switch-case문

기존의 switch-case문

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());

        switch (inputNumber) {
            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;
            default:
                System.out.println("1,2,3,4 가 아닙니다.");
        }

    }
}

입력받은 값이 해당하는 case로 찾아간 후 아래로의 모든 내용을 읽는다. 그래서 case에 해당하는 문장이 모두 끝났을 경우 break를 해주지 않으면 아래쪽에 해당하는 문장들도 전부 실행되어버린다. default는 위에 case에 해당하는 모든 문장이 전부 아닐 때 default의 문장을 읽어들인다.

추가된 switch-case문

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());

        switch (inputNumber) {
            case 1 -> System.out.println("1입니다.");
            case 2 -> System.out.println("2입니다.");
            case 3 -> System.out.println("3입니다.");
            case 4 -> System.out.println("4입니다.");
            default -> System.out.println("1,2,3,4 가 아닙니다.");
        }

    }
}

->연산자를 통해서 case에 해당하는 문장을 실행하는 형식으로 변경되었다. 따로 break를 적지 않아도 된다.

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());

        String string = switch (inputNumber) {
            case 1 -> {
                System.out.println("1입니다.");
                yield "1";
            }
            case 2 -> "2입니다.";
            case 3 -> "3입니다.";
            case 4 -> "4입니다.";
            default -> "1,2,3,4 가 아닙니다.";
        };

    }
}

다음과 같이 {}를 사용해서 내부에 로직을 작성할 수고 있고,
yield를 사용해서 원하는 값을 리턴할 수도 있다.
{}를 사용하지 않으면 바로 해당하는 값을 리턴할 수 있다.



2. 반복문

while문

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());

        while (inputNumber < 10) {
            System.out.println("현재 숫자는 " + inputNumber + "입니다.");
            inputNumber++;
        }

    }
}

while 다음의 조건식이 참일 경우 아래 블록의 문장들을 실행한다.


do-while문


public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());

        do {
            System.out.println("현재 숫자는 " + inputNumber + "입니다.");
            inputNumber++;
        }while (inputNumber < 10);

    }
}

우선 do 뒤에 나오는 블록을 실행한다. 그리고 블록의 실행을 마칠 때 while뒤의 조건식이 참이면 다시 맨 위의 블록으로 돌아가 흐름을 반복한다.


for문


public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());

        for (int i = 0; i < 10; i++) {
            System.out.println("현재 숫자는 " + inputNumber + "입니다.");
        }

    }
}

가장 기본적인 for문이다.( 1 ; 2 ; 3 )의 형식 안에서
1번 구간은 반복문 안에서 사용할 값을 초기화한다.
2번 구간은 조건식을 판별한다. 해당 조건이 참이면 아래 블록의 문장을 실행하고 거짓이면 멈춘다.
3번 구간은 해당 블록이 실행되고 나서 따로 처리할 변수들의 값 변화구간이다.
3번이 끝나면 2->블록->3->2->블록->3의 형태로 반복적으로 계속 실행한다.


public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());
        int k = 0;

        for (; i < 10 && inputNumber < 80; inputNumber++, i++) {
            System.out.println("현재 숫자는 " + inputNumber + "입니다.");
        }

    }
}

1번 구간과 같이 해당 구간을 생략하는것도 가능하다.
2번 구간은 생략하면 true이다.
더불어 3번 구간에는 쉼표로 여러개의 작업을 처리하는 것도 가능하다.


for-each문


public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNumber = Integer.parseInt(br.readLine());

        int[] arr = new int[inputNumber];

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

        for (int i : arr) {
            System.out.println("현재 숫자는 " + i + "입니다.");
        }

    }
}

아래의 for문인데 배열, list와 같이 선형 자료구조를 가지고 있는 집합에 대해서 자동적으로 반복을 실행해주는 반복문이다.
인덱스가 필요 없을 때 사용한다.


!Iterator와 Stream은 추후에 Collection프레임워크와 Stream을 다룰 때 다시 언급하기로 한다.

'Java > STUDY HALLE' 카테고리의 다른 글

[Java] GitHub Library 사용법  (0) 2020.12.06
[Java] JUnit5  (0) 2020.12.05
[Java] 연산자  (1) 2020.11.27
[Java] 데이터타입, 변수, 배열  (0) 2020.11.21
[Java]JVM 기술 스택의 구조 이해하기  (0) 2020.11.14