Java 입문 | 제어문(Control statement) | 조건문(Conditional statement)

조건문(Conditional statement)

자바는 if문과 switch문 두 개의 조건문을 가지고 있다. 이런한 문장들을 사용하여 실행 중에 조건들을 토대로 프로그램의 실행의 흐름을 제어할 수 있다.

if~else문

if문은 조건에 따라 두 대의 문장중에 하나가 수행되는 조건문이다.

if(조건식)
    실행 문장1;
else
    실행 문장2;

if 문은 조건식에 내용에 따란 true나 false값을 반환한다. else문은 필요시 기술을 하며 필요 없을 경우에는 생략할 수 있다.

package com.devkuma.tutorial.control.statement;

public class IfElse {

    public static void main(String[] args) {

        int a = 0;
        if (a == 1) {
            System.out.println("a는 1이다.");
        } else {
            System.out.println("a는 1 아니다.");
        }
    }
}

if ~ else if문

if ~ else if문은 if문을 이용하여 다중 선택을 가능하게 해준다.

if(조건식1)
    실행 문장1;
else if(조건식2)
    실행 문장2;
...
else
    실행 문장3;

자바의 모든 구문은 위에서 아래로 (top-down) 순차적으로 수행한다. 처음 조건식이 참으로 평가되면 해당 식을 수행한 후, if문장을 빠져 나가게 된다. 처음 조건절이 거짓으로 평가되면 계속해서 else if 조건절을 평가하여 수행한다.

package com.devkuma.tutorial.control.statement;

public class IfElseIf {

    public static void main(String[] args) {

        int month = 3;

        String season = null;
        if (month == 1) {
            season = "winter";
        } else if (month == 2) {
            season = "winter";
        } else if (month == 3) {
            season = "spring";
        } else if (month == 4) {
            season = "spring";
        } else if (month == 5) {
            season = "spring";
        } else if (month == 6) {
            season = "summer";
        } else if (month == 7) {
            season = "summer";
        } else if (month == 8) {
            season = "summer";
        } else if (month == 9) {
            season = "autumn";
        } else if (month == 10) {
            season = "autumn";
        } else if (month == 11) {
            season = "autumn";
        } else if (month == 12) {
            season = "winter";
        }

        System.out.println("month=" + month + ", season=" + season);
    }
}

실행 결과는 아래와 같다.

month=3, season=spring

switch ~ case문

switch ~ case문은 다중 선택을 가능하게 해준다.

switch(수식) {
    case 값1:
        실행 문장1;
       break;
    case 값2:
         실행 문장2;
        break;
  .....
   case 값n:
        실행 문장n;
        break;
   defulat:
        디폴트 실행 문장;
}

각 case문의 break문은 선택사항이다. 만일 break를 생략하게 된다면, 실행은 바로 밑에 있는 case문으로 넘어가게 된다. 이를 이용하여 다수개의 case절을 하나의 시행문으로 지정할 수 있다.

package com.devkuma.tutorial.control.statement;

public class SwitchCase1 {

    public static void main(String[] args) {

        int a = 257;
        int result = a % 3;

        switch (result) {
        case 1:
            System.out.println(a + "는 3의 배수가 아니다.");
            break;
        case 2:
            System.out.println(a + "는 3의 배수가 아니다.");
            break;
        default:
            System.out.println(a + "는 3의 배수이다.");
            break;
        }
    }
}

case문의 break문는 선택사항이다. 만일 break문을 생략하게 된다면, 실행은 바로 아래에 있는 case문으로 넘어가게 된다. 따라서 위에 예제는 아래과 같아 변경 가능하다.

package com.devkuma.tutorial.control.statement;

public class SwitchCase2 {

    public static void main(String[] args) {

        int a = 257;
        int result = a % 3;

        switch (result) {
        case 1:
        case 2:
            System.out.println(a + "는 3의 배수가 아니다.");
            break;
        default:
            System.out.println(a + "는 3의 배수이다.");
            break;
        }
    }
}

case 문자의 실행 문장은 break를 만나거나 마지막 case문 또는 default문에 도달할 때까지 계속 실행된다.

위에 if~else문 예제를 변경하면 아래와 같아 변경할 수 있다.

package com.devkuma.tutorial.control.statement;

public class SwitchCase3 {

    public static void main(String[] args) {

        int month = 3;

        String season = null;

        switch (month) {
        case 1:
        case 2:
        case 12:
            season = "winter";
            break;
        case 3:
        case 4:
        case 5:
            season = "spring";
            break;
        case 6:
        case 7:
        case 8:
            season = "summer";
            break;
        case 9:
        case 10:
        case 11:
            season = "autumn";
            break;
        default:
            break;
        }

        System.out.println("month=" + month + ", season=" + season);
    }
}

중첩된 switch문

switch문 내에 다른 switch문을 포함시킬 수 있다. 중첩된 상태의 switch문들은 같은 값을 가지는 case문을 자유롭게 사용할 수 있다.

package com.devkuma.tutorial.control.statement;

public class SwitchCase4 {

    public static void main(String[] args) {

        int a = 1;
        int b = 2;

        switch (a) {
        case 1:
            switch (b) {
            case 0:
                System.out.println("a=1, b=0");
            case 1:
                System.out.println("a=1, b=1");
            }
            break;
        case 2:
            System.out.println("a=2");
            break;
        default:
            break;
        }
    }
}