Skip to content

Day 05(21.09.06)

Byeong Gwan Seo edited this page Sep 14, 2021 · 1 revision

05. 조건문 - if

1. if문

if (condition) {
  condition이 true일때의 실행문1
  condition이 true일때의 실행문2
  ...
}

위와 같은 형태로 구성되며, 조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나 boolean 변수가 올 수 있다.
여기서 조건식이 true일 때, 블록을 실행하며, false일 땐 블록을 실행하지 않는다.
※ 블록이란 중괄호로 묶인 구역을 말한다.

public class IfExample {
  public static void main(String[] args) {
    int score = 93;

    if(score >= 90) {     //score의 값이 93이므로, condition의 값이 true이다.
      System.out.println("점수가 90보다 큽니다."); //condition의 값이 true이므로 아래 실행문이 실행된다.
      System.out.println("등급은 A입니다.");
    }
  }
}

2. if-else문

if문은 else 블록과 함께 사용되어 condition의 결과에 따라 실행 블록을 선택한다.
if문의 조건이 true이면, if문의 블록이 실행되고, 조건식이 false이면 else 블록이 실행된다.
즉, condition의 true-false 여부에 따라 if 블록, else 블록 중 하나의 블록만 실행하고 전체 if문을 벗어나게 된다.
쉽게 말하면 이거 아니면 저거라는 소리다.

public class IfElseExample {
  public static void main(String[] args) {
    int score = 85;

    if(score >= 90) {     
      System.out.println("점수가 90보다 큽니다."); 
      System.out.println("등급은 A입니다.");
    } else { 
//condition의 값이 false일 때, 이 else 블록이 실행된다. 
//이 경우엔 score의 값이 85점으로 선언되었기에 condition의 값이 false, 따라서 else 블록이 구문이 실행된다.
      System.out.println("점수가 90보다 작습니다.");
      System.out.println("등급은 B입니다.");
    }
  }
}

3. if-else if-else문

조건문이 여러 개일때, 처음 if문의 조건식이 false일 경우 다른 조건식의 결과에 따라 실행 블록을 선택할 수 있다.
if 블록의 끝에 else if문을 붙이면 되는데, else if 문의 갯수에는 제한이 없으며, true가 되는 블록만 실행하고 전체 if문을 벗어난다.
마지막에는 else if가 아닌 else 블록을 추가할 수 있는데, 모든 조건식이 false일 경우 else 블록을 실행하고 전체 if문을 벗어난다.

public class IfElseIfElseExample {
  public static void main(String[] args) {
    int score = 75;

    if(score >= 90) { //score가 90 이하 이므로 false, 이 블록은 실행되지 않음.    
      System.out.println("점수가 90~100입니다."); 
      System.out.println("등급은 A입니다.");
    } else if(score >= 80) { //score가 80 이하 이므로 false, 이 블록은 실행되지 않음.
      System.out.println("점수가 80~89입니다.");
      System.out.println("등급은 B입니다.");
    } else if(score >= 70) { //score가 70 이상이므로 true, 따라서 이 블록이 실행됨.
      System.out.println("점수가 70~79입니다.");
      System.out.println("등급은 C입니다.");
    } else { //90이상, 80이상, 70이상 전부 해당되지 않을 경우 이 블록이 실행됨.
      System.out.println("점수가 70 미만입니다.");
      System.out.println("등급은 D입니다.");
    }
  }
}

하지만 if else문에는 구조적인 문제가 있는데,

정수 하나를 입력했을 때, 몇의 배수인지를 알려주는 프로그램을 작성하시오.  
if (a % 5 == 0) {
	System.out.println(a + "는 5의 배수");
		} else if (a % 2 == 0) {
	System.out.println(a + "는 2의 배수");
		} else if (a % 4 == 0) {
	System.err.println(a + "는 4의 배수");
		} else {
	System.out.println("해당 없음");
		}

이와 같이 작성할 경우, 4를 입력하면 2의 배수를 출력하는 블록에 걸려서 4의 배수라는 답을 얻지 못한다.
즉, 공배수와 같이 교집합이 있는 문제의 경우 if-else문을 사용하려면 문제가 상당히 복잡해지는데, 이 경우에는 다중 if문을 사용하면 된다.
다중 if문이라고 해서 특별한 건 없고, if-else문이 아닌 아래와 같이 if 블록을 복수 작성하면 된다.

if(a % 2 == 0) {
	System.out.println(a + "는 2의 배수");
	}
		
if (a % 4 == 0) {
	System.out.println(a + "는 4의 배수");
	}

4. 중첩 if문

if문의 블록 내부에 또 다른 if문을 사용하는 것.
중첩의 단계에는 제한이 없으므로 실행 흐름을 잘 판단해서 작성하면 된다.
제어문(조건문, 반복문)은 서로 중첩이 가능한데, if문 안에 for문을 중첩시킬 수도 있고, while문에 if문을 중첩시킬 수도 있다.

public class CDMain4 {
  public static void main(String[] args) {
    int b = 10;
    if (b % 2 == 0) { //바깥의 if문의 condition이 true일때
      if (b % 5 == 0) { //중첩된 if문 condition이 true이면 내부 실행문이 실행된다.
        System.out.println(b + "는 2의 배수.");
        System.out.println(b + "는 5의 배수.");
      }
    }
  }
}

06. 조건문 - switch

1. switch문

switch(변수) {
    case 값1:
        //변수가 값 1일 경우의 실행문
      break;

    case 값2:
        //변수가 값 2일 경우의 실행문
      break;

    default;
        //변수가 둘 다 아닐 경우의 실행문
      break;
    }

switch문 또한 if문과 마찬가지로 조건 제어문이다.
하지만 if문은 condition의 값이 true일 경우에 블록 내부의 실행문을 실행하지만, switch문은 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.
위의 switch문 예시를 기준으로, switch문은 동일한 값을 갖는 case로 가서 실행문을 실행시킨다. 동일한 값을 갖는 case가 없으면 default의 실행문이 실행된다.
아래는 메뉴 번호를 받아, 해당 번호의 메뉴명을 출력하는 프로그램을 작성한 것이다.

import java.util.Scanner;

public class CDMain5_SwitchCase {
  public static void main(String[] args) {

    System.out.print("몇 번 메뉴? (1~4): ");
      int menu = input.nextInt(); //입력 값을 받음
	
     switch (menu) {
      case 1: //입력 값이 1일때
        System.out.println("아메리카노");
      break;
      case 2: //입력 값이 2일때
        System.out.println("카페라떼");
      break;
      case 3: //입력 값이 3일때
        System.out.println("바닐라라떼");
      break;
      case 4: //입력 값이 4일때
        System.out.println("민트초코라떼");
      break;
      default: //1~4가 아닌 다른 숫자를 입력했을때
        System.out.println("그런거 없다");
      break;
    }
  }
}

Clone this wiki locally