Don't Panic
in Java ☕ 2분 읽기

[Java] java 조건문

목차

1. 조건문 - if 문 (만약에… 라면)

조건문이란?

  • 주어진 조건에 따라 서로 다른 실행이 이루어지도록 구현하는 문법이다.
  • 예를 들어 “재산이 1억 이상이면 100만원을 세금으로 내고, 그렇지 않으면 내지 않는다”를 의사 코드로 표현하면 다음과 같다.
만약에 (재산이 1억 이상이면) {
    세금을 100만원 낸다
}
그렇지 않으면 {
    세금을 내지 않는다
}

if 문 문법

if(조건식){
  수행문;      // 조건식이 '참'인 경우에(조건에 맞는 경우) 수행문이 수행됨
 }             // 조건식이 '참'이 아니면(조건에 맞지 않는 경우) 수행문이 수행되지 않음

if - else 문 문법

if( 조건식) {

    수행문1;   // 조건식이 '참'인 경우에 수행됨
}
else{
    수행문2;    // 조건식이 '참'이 아닌 경우에 수행됨
}

if - else 예제

package ch14;

import java.util.Scanner;

public class IfElseTest {

	public static void main(String[] args) {

		int age = 7;

		//Scanner scanner = new Scanner(System.in);
		//int age = scanner.nextInt();

		if( age >= 8) {
			System.out.println("학교에 다닙니다");
		}
		else {
			System.out.println("학교에 다니지 않습니다.");
		}
	}
}

2. 조건이 여러 개일 때의 if 문

if-else if-else 문

  • 하나의 상황에 대한 조건이 여러 개로 나뉘고, 각 조건마다 다른 수행이 이루어져야 할 경우 사용한다.
  • 각 조건은 상호 배타적이다. 즉, 하나의 조건이 만족되면 나머지는 검사하지 않는다.
if(조건식1){
    수행문1;        // 조건식1이 '참'인 경우 수행하고 전체 조건문을 빠져나감
}
else if(조건식2){
    수행문2;        // 조건식2이 '참'인 경우 수행하고 전체 조건문을 빠져나감
}
else if(조건식3){
    수행문3;        // 조건식3이 '참'인 경우 수행하고 전체 조건문을 빠져나감
}
else{
    수행문4;        // 위 조건이 모두 해당되지 않는 경우 수행됨 (디폴트 조건)
}

수행문5;            // if-else if-else 문이 끝나면 수행됨

가령 조건식2가 만족되면 수행문2 -> 수행문5 순으로 수행된다.

if-else if-else 문의 흐름도

 package ch15;

public class IfElseIfElseTest {

	public static void main(String[] args) {
		int age = 12;
		int charge;

		if(age < 8){
			charge = 1000;
			System.out.println("미 취학 아동입니다.");
		}
		else if(age < 14){
			charge = 2000;
			System.out.println("초등학생 입니다.");
		}
		else if(age < 20){
			charge = 2500;
			System.out.println("중, 고등학생 입니다.");
		}
		else{
			charge = 3000;
			System.out.println("일반인 입니다.");
		}

		System.out.println("입장료는 " + charge + "원입니다.");
	}
}

if-else if-else 예제 실행 결과

if-else if 문과 if - if 문의 차이점

  • if - else if를 사용하는 경우, 하나의 조건이 만족되면 나머지 else if 부분은 수행되지 않는다.
  • if - if로 사용하면 각각 독립된 조건문으로 해석되어 조건마다 따로 검사·수행된다.

(위 예제의 else if를 모두 if로 바꾸어 보자.)

package ch15;

public class IfIfTest {

	public static void main(String[] args) {
		int age = 12;
		int charge;

		if(age < 8){
			charge = 1000;
			System.out.println("미 취학 아동입니다.");
		}
		if(age < 14){
			charge = 2000;
			System.out.println("초등학생 입니다.");
		}
		if(age < 20){
			charge = 2500;
			System.out.println("중, 고등학생 입니다.");
		}
		else{
			charge = 3000;
			System.out.println("일반인 입니다.");
		}

		System.out.println("입장료는 " + charge + "원입니다.");
	}
}

if-if 예제 실행 결과


3. 조건이 여러 개일 때 간단히 표현하는 switch-case 문

switch - case 문

  • if - else if - else 문이 복잡하고 번거로워질 때 가독성 좋게 구현할 수 있다.
  • 비교 조건이 특정 값이나 문자열인 경우 사용한다.
  • break 문을 사용하여 조건이 만족되면 switch 블럭을 빠져나오도록 한다.
  • 자바 14부터는 더 간결한 표현식이 지원된다. (break를 사용하지 않음)

한 달이 며칠인지 알려주는 프로그램 구현

package ch16;

public class SwitchCaseTest {

	public static void main(String[] args) {

		int month = 10;
		int day;

		switch(month){

			case 1: case 3: case 5: case 7: case 8: case 10: case 12:
				day = 31;
				break;
			case 4: case 6: case 9: case 11:
				day = 30;
				break;
			case 2:
				day = 28;
				break;
			default:
				day = 0;
				System.out.println("존재하지 않는 달 입니다.");

		}
		System.out.println(month + "월은 " + day + "일입니다.");
	}
}

switch-case 예제 실행 결과

문자열이 지원되는 switch - case 문

package ch16;

public class SwitchCaseTest2 {

	public static void main(String[] args) {
		String medal = "Gold";

		switch(medal) {

			case "Gold":
				System.out.println("금메달 입니다.");
				break;
			case "Silver":
				System.out.println("은메달 입니다.");
				break;
			case "Bronze":
				System.out.println("동메달 입니다.");
				break;
			default:
				System.out.println("메달이 없습니다.");
				break;
		}

	}
}

문자열 switch-case 예제 실행 결과

Java 14부터 지원되는 Switch Expression

  • 쉼표(,)로 여러 조건을 간단히 구분할 수 있다.
  • 식(expression)으로 표현하여 반환 값을 받을 수 있다. 리턴 값이 없는 경우는 오류가 발생한다.
  • yield 키워드를 사용한다.
package ch16;

public class SwitchCaseUpTest {

	public static void main(String[] args) {

		int month = 3;

		int day = switch (month) {
	    	case 1, 3, 5, 7, 8, 10,12 -> {
	    		System.out.println("한 달은 31일입니다.");
	    		yield 31;
	    	}
	    	case 4,6,9,11 -> {
	    		System.out.println("한 달은 30일입니다.");
	    		yield 30;
	    	}
	    	case 2 ->{
	    		System.out.println("한 달은 28일입니다.");
	    		yield 28;
	    	}
	    	default->{
	    		System.out.println("존재하지 않는 달 입니다.");
	    		yield 0;
	    	}
		};
		System.out.println(month + "월은 " + day + "일입니다.");
	}
}

Switch Expression 예제 실행 결과