Java 조건식 기본 사항

JavaBeginner
지금 연습하기

소개

이번 랩에서는 Java 의 기본 데이터 타입과 연산자에 대해 배웠습니다. 이번 랩에서는 절차 지향 프로그래밍을 작성하는 방법을 배우기 시작할 것입니다. 주요 아이디어는 제어 구조의 패러다임, 즉 조건식을 사용하는 것입니다.

조건식

유용한 프로그램을 작성하려면 거의 항상 조건을 확인하고 그에 따라 프로그램의 동작을 변경해야 합니다. 조건문은 이러한 기능을 제공합니다.

If-Else 조건식

가장 간단한 형태는 if-else 문입니다.

예시:

/home/labex/project/ifelseTest.java 파일에 다음 코드를 작성합니다.

public class ifelseTest{
    public static void main(String[] args){
        int x = 1;
        if (x > 0) {
            System.out.println("x is positive");
        }
        else{
            System.out.println("x is non-positive");
        }
    }
}

출력:

터미널에서 다음 명령을 사용하여 ifelseTest.java 파일을 실행합니다.

javac /home/labex/project/ifelseTest.java
java ifelseTest

출력을 확인합니다.

x is positive

괄호 안의 표현식을 **조건 (condition)**이라고 합니다. 참이면 if 다음에 오는 중괄호 안의 문장이 실행됩니다. 조건이 참이 아니면 else 다음에 오는 중괄호 안의 문장이 실행됩니다. else가 없고 if 조건이 거짓이면, if-else 다음에 오는 문장 (있는 경우) 이 실행됩니다. 조건에는 비교 연산자 (comparison operators), 즉 관계 연산자 (relational operators) 중 하나가 포함될 수 있습니다.

예시:

if (x == y){ }               // x equals y
if (x != y){ }               // x is not equal to y
if (x > y) { }               // x is greater than y
if (x < y) { }               // x is less than y
if (x >= y){ }               // x is greater than or equal to y
if (x <= y){ }               // x is less than or equal to y

이러한 연산은 아마 익숙하겠지만, Java 에서 사용하는 구문은 =, ≠ 및 ≤와 같은 수학 기호와 약간 다릅니다. 흔한 오류는 이중 등호 (==) 대신 단일 등호 (=) 를 사용하는 것입니다. =는 할당 연산자이고 ==는 비교 연산자임을 기억하십시오. 또한 =< 또는 =>는 존재하지 않습니다.

조건 연산자의 양쪽은 동일한 유형이어야 합니다. int 는 int 와, double 은 double 과만 비교할 수 있습니다. 연산자 ==!=String과 함께 작동하지만, 예상대로 작동하지 않습니다. 그리고 다른 관계 연산자는 문자열에 전혀 적용되지 않습니다.

예시: x2로 나눈 나머지가 0이면 x가 짝수임을 알고 이 코드는 그에 대한 메시지를 출력합니다. 조건이 거짓이면 두 번째 print 문이 실행됩니다. 조건은 참 또는 거짓이어야 하므로 정확히 하나의 대안이 실행됩니다. 숫자의 패리티 (짝수 또는 홀수) 를 자주 확인해야 한다고 생각되면 다음과 같이 이 코드를 메서드로 "래핑"할 수 있습니다.

예시:

/home/labex/project/conditionTest.java 파일에 다음 코드를 작성합니다.

public class conditionTest
{
    public static void printParity(int x) {
        if (x%2 == 0) {
            System.out.println(x + " is even");
        } else {
              System.out.println(x + " is odd");
        }
    }
    public static void main(String[] args){
        printParity(17);
        printParity(18);
    }
}

출력:

터미널에서 다음 명령을 사용하여 conditionTest.java 파일을 실행합니다.

javac /home/labex/project/conditionTest.java
java conditionTest

출력을 확인합니다.

17 is odd
18 is even

이제 제공하려는 모든 정수에 대해 적절한 메시지를 출력하는 printParity라는 메서드가 있습니다. main에서 이 메서드를 호출합니다. 메서드를 호출할 때 제공하는 인수의 유형을 선언할 필요가 없다는 것을 항상 기억하십시오. Java 는 해당 유형을 파악할 수 있습니다. printParity(int 3)과 같은 것을 작성하려는 유혹을 참아야 합니다. 또한, 다른 조건문 안에 하나의 조건문을 중첩할 수도 있습니다.

예시:

/home/labex/project/nestedConditionTest.java 파일에 다음 코드를 작성합니다.

public class nestedConditionTest{
    public static void main(String[] args){
        int x = 0;  // you can try x = 1, x = -1
        if (x == 0) {
            System.out.println("x is zero");
        }
        else {
            if (x > 0) {
                System.out.println("x is positive");
            }
            else {
                System.out.println("x is negative");
            }
        }
    }
}

출력:

터미널에서 다음 명령을 사용하여 nestedConditionTest.java 파일을 실행합니다.

javac /home/labex/project/nestedConditionTest.java
java nestedConditionTest

출력을 확인합니다.

x is zero

이제 두 개의 분기를 포함하는 외부 조건문이 있습니다. 첫 번째 분기에는 간단한 print 문이 포함되어 있지만, 두 번째 분기에는 자체적으로 두 개의 분기가 있는 다른 조건문이 포함되어 있습니다. 두 분기 모두 print 문이지만, 조건문일 수도 있었습니다.

들여쓰기는 구조를 보기 좋고 이해하기 쉽게 만들지만, 그럼에도 불구하고 중첩된 조건문은 매우 빠르게 읽기 어려워집니다. 가능하면 피하십시오. 반면에 이러한 종류의 중첩 구조는 일반적이므로 다시 보게 될 것입니다. 그러니 익숙해지는 것이 좋습니다.

Switch-Case 조건식

Switch-case 문은 또 다른 조건식입니다. switch-case 문의 구문은 다음과 같습니다.

예시:

// value type can be byte, short, int, char, String, but long type is not correct.
switch (variable or an value expression)
{
    // case value must be a constant value
    case value1:
    // code
    ;
    case value2:
    // code
    ;
    default:
    // code
    ;
}

예시:

/home/labex/project/switchTest.java 파일에 다음 코드를 작성합니다.

public class switchTest
{
    public static void main(String[] args){
    // you can change i = 2, then try again
    int i = 2;
    switch(i)
    {
        case 1:
            System.out.println(1);
            break;
        case 2:
            System.out.println(2);
            // if no break expression, sometimes you'll get a confusing answer.
            // you can try deleting the break expression and see what happens.
            break;
        // if none of the above matches, execute the default statements
        default:
            System.out.println("default");
            break;
        }
    }
}

출력:

터미널에서 다음 명령을 사용하여 switchTest.java 파일을 실행합니다.

javac /home/labex/project/switchTest.java
java switchTest

출력을 확인합니다.

2

요약

이번 랩에서는 조건식과 두 가지 스타일의 조건문을 배웠습니다. 이는 프로그래밍에 매우 유용합니다. 다음 랩에서는 또 다른 제어 구조인 재귀 (recursion) 와 루프 (loops) 에 대해 배우겠습니다.