[Java 기초] 6. 조건문(Conditional)

Kyung Jae, Cheong·2024년 8월 12일
1
post-thumbnail
  • 최대한 기초가 거의 없는 분들의 입장에서 정리해본 내용이므로, 어려운 개념들은 가급적 포함시키지 않거나 최대한 간단하게만 표현하였습니다.
  • Java 세팅 및 실습은 Windows 환경에서 IntelliJ를 통해 진행되었습니다.
  • (참고) IntelliJ 코드 실행 단축키
    • Windows, Linux : Shift+F10
    • MacOS : Ctrl+R

6. 조건문(Conditional)

6-1. 조건문이란?

  • 조건문은 특정 조건에 따라서 다른 코드를 실행하는 것을 의미합니다.
    • 조건문을 통해 특정 조건이 참일 때 실행될 코드를 지정할 수 있으며, 조건에 따라 다른 동작을 수행하도록 프로그램을 작성할 수 있습니다.
  • 자바에서 사용되는 주요 조건문에는 if-else, switch가 있습니다. 각 조건문에 대해 설명하고 예시를 들어 정리하겠습니다.

6-2. if 문 (혹은 if-else문)

if 문

  • if 문은 가장 기본적인 조건문으로, 조건이 참(true)일 경우 특정 블록의 코드를 실행합니다.

if문 구문

if (조건식) {
    // 조건식이 참일 경우 실행되는 코드
}

if문 예시

int number = 10;
if (number > 5) {
    System.out.println("Number is greater than 5.");
}
  • 위 예시 처럼 if다음의 조건식이 true인 경우 뒤에 중괄호{}의 코드가 실행되는 방식입니다.
    • 참고로 수행할 코드가 한줄 뿐인 경우 중괄호{}를 생략할 수 있습니다만, 가독성과 유지보수 차원에서 한줄이어도 중괄호는 써주는게 좋습니다.

if-else문

  • if-else 문은 조건이 참일 때와 거짓일 때 각각 다른 코드를 실행할 수 있게 해줍니다.

if-else문 구문

if (조건식) {
    // 조건식이 참일 경우 실행되는 코드
} else {
    // 조건식이 거짓일 경우 실행되는 코드
}

if-else문 예시

int number = 3;
if (number > 5) {
    System.out.println("Number is greater than 5.");
} else {
    System.out.println("Number is 5 or less.");
}
  • 위 예시처럼 if 다음의 조건식이 true라면 그 다음 코드가 실행되고, false라면 else 다음의 코드가 실행되는 방식입니다.

if-else if-else 문

  • if-else if-else 문은 여러 조건을 순차적으로 검사하여 조건에 맞는 코드를 실행할 수 있습니다.
    • else와 if가 결합된 형태라 보시면 됩니다.

if-else if-else문 구문

if (조건식1) {
    // 조건식1이 참일 경우 실행되는 코드
} else if (조건식2) {
    // 조건식2가 참일 경우 실행되는 코드
} else {
    // 위의 조건들이 모두 거짓일 경우 실행되는 코드
}

if-else if-else문 예시

int number = 7;
if (number > 10) {
    System.out.println("Number is greater than 10.");
} else if (number > 5) {
    System.out.println("Number is greater than 5 but less than or equal to 10.");
} else {
    System.out.println("Number is 5 or less.");
}
  • 위 예시 처럼 처음에는 if문의 조건식을 검사하고, false인 경우 else if의 조건식을 검사하고, 이또한 false인 경우 else의 코드가 실행되는 방식입니다.
    • 정말 많이 쓰이므로 꼭 알아두시고 익숙해집시다!

중첩 if 문 (Nested if)

  • if 문은 다른 if 문 내에 중첩될 수 있습니다. 이를 통해 더 복잡한 조건을 처리할 수 있습니다.

중첩 if 문 구문

if (조건식1) {
    if (조건식2) {
        // 조건식1과 조건식2가 모두 참일 경우 실행되는 코드
    }
}

중첩 if 문 예시

int number = 10;
if (number > 5) {
    if (number < 15) {
        System.out.println("Number is between 6 and 14.");
    }
}
  • 위 예시처럼 if문 안에 또다른 if문을 넣어줌으로써 더 복잡한 조건을 처리할 수 있게 됩니다.

6-3. switch문

  • swicth문은 어떻게 보면 특이한 조건식입니다. 하나의 변수에 대해서 여러 값의 조건을 처리할때 유용하게 쓰일 수 있습니다.

    • if-else if문처럼 사용할 순 있지만, 좀 더 간결한 코드를 작성하고자 할때 switch문을 쓰게 됩니다.
  • 기본적인 구문은 다음과 같습니다.

switch (변수) {
    case1:
        // 변수와 값1이 일치할 때 실행되는 코드
        break;
    case2:
        // 변수와 값2가 일치할 때 실행되는 코드
        break;
    // ... 추가적인 case 문들
    default:
        // 모든 case와 일치하지 않을 때 실행되는 코드
}
  • switch문을 활용한 예시입니다.
int day = 3;
switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    default:
        System.out.println("Invalid day");
        break; // 생략 가능
}
  • 여기서 주의할 점은 case와 default의 break;를 추가해주어야 한다는 점입니다.
    • 코드 길이가 길어지거나 복잡해지는 경우에 break로 멈춰주지 않으면 나머지 모든 케이스에 대한 검사를 진행하고서 switch문이 종료되기 때문입니다.
    • 이러한 현상을 "fall-through"라 하는데 지금 단계에선 자세히 알려고 하실 필요는 없습니다.
  • break 구문에 대해선 다음 포스팅인 반복문에서 더 자세히 다룰 예정이고, 일단은 switch문을 종료시키는 코드다라고 이해하시면 됩니다.

switch 표현식 (자바 13버전 이후)

  • 자바 13(12나 14라고 하는 경우도 있긴합니다)버전 이후 부터 문(statement)로 사용되던 switch문을 개선하여 값을 반환하는 표현식(expression)으로 사용할 수 있게 되었습니다.
    • 이 기능은 기존의 switch 문에 비해 더 간결하고 안전한 방식으로 사용할 수 있도록 설계되었습니다.
    • switch 문 내에서 화살표(->) 구문을 사용하여, 간결하게 여러 가지 작업을 정의할 수 있게 됐습니다. 참고로 화살표 구문은 lambda식이라 하는데 이런게 있구나하고 넘어가시면 될듯합니다.

새로운 switch문 예시 1

int number = 3;
String result = switch (number) {
    case 1 -> "One";
    case 2 -> "Two";
    case 3 -> "Three";
    default -> "Unknown";
};

System.out.println(result);  // "Three"
  • 위 예시 처럼 switch 표현식과 -> 구문은 코드의 가독성을 크게 개선하며, 여러 case 블록에서 동일한 코드를 사용하는 경우 코드 중복을 줄여주는 데 유용합니다.
    • 또한 기존 switch문 처럼 모든 case에 break를 써줄 필요가 전혀 없습니다.
  • 또한 단순히 값을 반환하는 것 뿐 아니라 기존 switch문처럼 코드를 실행하도록 할 수도 있습니다.
int number = 3;
String result = switch (number) {
    case 1 -> {
        System.out.println("Executing case 1");
        yield "One";
    }
    case 2 -> {
        System.out.println("Executing case 2");
        yield "Two";
    }
    case 3 -> {
        System.out.println("Executing case 3");
        yield "Three";
    }
    default -> {
        System.out.println("Executing default case");
        yield "Unknown";
    }
};

System.out.println(result);  // "Executing case 3" followed by "Three"
  • 이때 중괄호 {} 안에 여러 줄의 코드를 작성하고 yield 키워드를 사용하여 반환할 값을 지정할 수 있습니다.
    • 여기서 yield문은 함수의 실행을 일시 중지하고 값을 반환하는 구문인데, 지금 단계에서는 이런게 있구나 정도로 이해하시면 될듯 합니다.

6-4. 조건문에서 자주 사용되는 연산자

  • 연산자 파트에서 정리하긴 했지만, 다시한번 정리해보도록 하겠습니다.
  • 조건문(특히 if문)에서는 true/false만을 구분하기때문에, 연산자 적용후의 값이 boolean으로 반환되는 연산자를 이용하셔야합니다.
    • 비교 연산자: ==, !=, <, >, <=, >=, .equals(), 등
      • 두 값을 비교합니다.
    • 논리 연산자: &&(AND), ||(OR), !(NOT)
      • 더 복잡한 조건을 처리합니다.

삼항 연산자 (Ternary Operator)

  • 자바에서 조건에 따라 값 또는 표현식을 선택할 때 사용하는 간단하고 강력한 연산자입니다.
  • 삼항 연산자는 if-else 문의 축약된 형태라고 볼 수 있습니다.
    • 삼항 연산자는 조건문을 한 줄로 표현할 수 있어, 간단한 조건문을 더 간결하게 작성할 수 있습니다.
    • 다만 삼항 연산자를 중첩해서 쓰면 가독성을 떨어 뜨릴수 있고, 복잡한 로직에는 디버깅이 어려울 수 있습니다.

삼항 연산자 구문

변수 = (조건식) ? 참일 때의 값 : 거짓일 때의 값;
  • 조건식: 불리언 값을 반환하는 표현식입니다 (true 또는 false).
  • 참일 때의 값: 조건식이 true일 때 반환되는 값 또는 표현식.
  • 거짓일 때의 값: 조건식이 false일 때 반환되는 값 또는 표현식.

삼항 연산자 예시

int a = 10;
int b = 20;

// a가 b보다 큰 경우  a의 값을 반환하고, 그렇지 않으면 b의 값을 반환
int max = (a > b) ? a : b;

System.out.println("Max: " + max);  // 출력: Max: 20
  • 위 예제에서, (a > b)는 조건식입니다. a가 b보다 크면 a의 값이 반환되어 max 변수에 저장되고, 그렇지 않으면 b의 값이 반환됩니다.

마무리

  • 본 포스팅에서는 가장 중요하게 쓰이는 조건문과 관련 연산자들에 대해서 알아보았습니다.
  • 다음 포스팅에서는 아주 중요하게 쓰이는 구문인 반복문에 대해서 알아보도록 하겠습니다!
profile
일 때문에 포스팅은 잠시 쉬어요 ㅠ 바쁘다 바빠 모두들 화이팅! // Machine Learning (AI) Engineer & BackEnd Engineer (Entry)

1개의 댓글

comment-user-thumbnail
2025년 2월 19일

잘 봤습니다.

답글 달기