언어(Language)/Java

[Java] 자바 조건문 개념 정리 및 사용법 (if, else if, else, switch)

잇트루 2022. 9. 12. 16:31
반응형

if문

if 문의 소괄호 안에는 boolean 값으로 반환될 수 있는 조건식을 넣고, 중괄호 안에서 조건이 참일 때 실행하고자 하는 코드를 적는다.

if (조건식) {
  // 조건식이 참일 때 실행되는 블록
}

중괄호 {}를 이용해 실행하고자 하는 코드를 묶을 수 있다. 이를 블록(block)이라 한다.

 

else if문

if ~ else문은 조건식의 결과에 따라 참인 블록을 실행하는 조건문이다.

만약 if문의 조건식이 true이면 해당 블록을 실행하고, false이면 다음 블록을 검사한다.

else if문을 사용하여 다음 실행 블록에 대한 조건식을 생성할 수 있다.

else if문의 모든 조건식이 false이면, 나머지 경우를 의미하는 else 블록이 실행된다.

if (조건식1) {
	// 조건식1이 참이면 실행
} else if (조건식2) {
	// 조건식1이 참이 아니고, 조건식2가 참이면 실행
} else if (조건식3) {
	// 조건식1과 2가 참이 아니고, 조건식3이 참이면 실행
} ... {
} else {
	// 위의 모든 조건식이 참이 아니면 실행되
}

 

사용자의 입력을 받아 성적을 구하는 예제를 통해 구체적으로 살펴본다.

import java.util.Scanner;

public class IfEx {
    static Scanner myInput = new Scanner(System.in);
    public static void main(String[] args) {
        // 사용자로부터 점수 입력 받기
        int score = myInput.nextInt();
        
        if (score >= 90) { 
            System.out.println('A'); // 점수가 90점 이상이면 A
        } else if (score >= 80) {
            System.out.println('B'); // 점수가 90점 미만 80점 이상이면 B
        } else if (score >= 70) {
            System.out.println('C'); // 점수가 80점 미만 70점 이상이면 C
        } else if (score >= 60) {
            System.out.println('D'); // 점수가 70점 미만 60점 이상이면 D
        } else {
            System.out.println('F'); // 점수가 60점 미만이면 F
        }
    }
}

 

switch문

switch문도 if문과 마찬가지로 조건 제어문이다. 하지만, 사용하는 방식은 if문과 다르게 switch문은 변수가 어떤 값을 갖느냐에 따라 실행문이 결정된다. 따라서 상황에 따라 코드가 더 간결해질 수 있다.

switch (입력 변수) {
    case 값1 :
        값1과 일치하면 실행되는 공간
        break; // 다음 case를 실행하지 않고 switch문을 벗어나기 위해 사용
    case 값2 :
        값2와 일치하면 실행되는 공간
        break;
    ...
    default:
        일치하는 case가 없으면 실행되는 공간
        break;
}

 

다음은 0부터 6 사이의 숫자를 입력받아 요일을 출력하는 예제를 통해 구체적으로 살펴본다.

package Section1.IfAndSwitch;

import java.util.Scanner;

public class SwitchEx {
    static Scanner myInput = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.print("0부터 6사이의 숫자를 입력하시오: ");
        int day = myInput.nextInt();
        switch (day) {
            case 0 :
                System.out.println("일요일"); // day가 0이면 실행
                break;
            case 1 :
                System.out.println("월요일"); // day가 1이면 실행
                break;
            case 2 :
                System.out.println("화요일"); // day가 2이면 실행
                break;
            case 3 :
                System.out.println("수요일"); // day가 3이면 실행
                break;
            case 4 :
                System.out.println("목요일"); // day가 4이면 실행
                break;
            case 5 :
                System.out.println("금요일"); // day가 5이면 실행
                break;
            case 6 :
                System.out.println("토요일"); // day가 6이면 실행
                break;
            default:
                System.out.println("잘못된 입력"); // case에 없는 입력 시 실행
                break;
        }
    }
}

switch문은 괄호 안의 값과 동일한 값을 갖는 case의 실행문을 실행한다. 그러나, 괄호 안의 값을 갖는 case가 없으면 default의 실행문을 실행한다.

switch문의 괄호 안에는 int, char, String 등 다양한 데이터 타입의 변수가 들어올 수 있다.

 

break를 사용하는 이유

break문을 작성하지 않으면 switch문을 벗어나지 않고 모든 case문의 값과 비교하여 중복으로 일치하는 case도 실행한다. 이러한 경우 원치 않는 결과(fall through)를 얻을 수 있다.

 

break를 사용하지 않고 중복 case를 이용하는 예제도 작성할 수 있다.

import java.util.Scanner;

public class SwitchOverlapCase {
    static Scanner userInput = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.print("포지션을 입력하시오 : ");
        String position = userInput.nextLine();

        switch(position) {
            case "공격수" :
                System.out.println("전방 배치");
                break;
            case "수비수" :
            case "골키퍼" :
                System.out.println("후방 배치");
                break;
            default :
                System.out.println("중앙 배치");
                break;
        }
    }
}

 

중첩 조건문

중첩 조건문은 조건문을 중첩해서 사용하는 것으로, 조건문 안에 새로운 조건문을 작성하는 것이다.

즉, switch문 안에 case에 if문 또는 switch를 중첩하여 사용하거나, if문 실행 블록 안에 if문 또는 switch문을 사용하는 것을 말한다.

if (조건식1) {
    switch (입력 변수) {
        case 1 : 
            if (조건식2) {
            }
        break;
        ...
    }
} else if {
		...

다음과 같이 중첩 조건문을 계속해서 사용할 수 있다. 하지만, 중첩 조건문이 많을수록 성능이 급격히 저하되므로 최소한의 조건문으로 작성해야 한다.

 

개선된 switch문

자바 14이후 버전에서는 개선된 switch문을 표준화하여 사용한다.

 

기존의 switch문과의 차이점

  1. 여러 조건에 따라 ‘,’로 구분하여 한 번에 처리할 수 있다.
  2. ‘:’ 대신에 →를 사용하고, break문은 생략한다.
  3. 실행문이 2개 이상이거나 반환 값이 존재할 경우 중괄호 {}를 사용한다.
import java.util.Scanner;

public class SwitchOverlapCase {
    static Scanner userInput = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.print("포지션을 입력하시오 : ");
        String[] positionList = {"공격수", "수비수", "골키퍼"};
        String position = userInput.nextLine(); //입력 받기

        switch (position) {
            case "Senior" -> System.out.println("전방 배치");
            case "Junior", "Manager" -> System.out.println("후방 배치");
            default -> System.out.println("중앙 배치");
        }
    }
}

.

 

 

반응형