본문 바로가기
JAVA

JAVA Switch문 [코딩백과 with JAVA]

by GangDev 2024. 12. 22.

1.8.1: 프로그램의 흐름 제어를 위한 Switch 문 사용

Switch 문은 Java 언어에서 제공되는 다섯 가지 제어 흐름 문 중 하나로, 여러 실행 경로를 허용합니다. 선택자 변수의 값을 사용하여 실행될 경로를 선택합니다.

선택자 변수의 타입 선택

선택자 변수의 타입은 다음과 같은 유형 중 하나로 선택해야 합니다:

byte, short, char, int 기본 데이터 타입
Character, Byte, Short, Integer 래퍼 타입
열거형 타입
String 타입
주의할 점은 boolean, long, float, double 기본 타입은 선택자 변수의 타입으로 사용할 수 없다는 것입니다.

Switch 문 기본 구조 및 예시

다음은 Switch 문을 사용한 간단한 예제입니다:

import java.util.Scanner;

public class SeasonDeterminer {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("월을 입력하세요 (1-12): ");
        int month = scanner.nextInt();

        String season;

        switch (month) {
            case 12:
            case 1:
            case 2:
                season = "겨울";
                break;
            case 3:
            case 4:
            case 5:
                season = "봄";
                break;
            case 6:
            case 7:
            case 8:
                season = "여름";
                break;
            case 9:
            case 10:
            case 11:
                season = "가을";
                break;
            default:
                season = "유효하지 않은 월입니다.";
        }

        System.out.println(month + "월은 " + season + "입니다.");
    }
}
  1. Scanner 클래스를 사용하여 콘솔에서 사용자 입력을 받습니다.
  2. Switch 문에서 여러 케이스를 하나의 블록으로 그룹화하여 코드 중복을 줄입니다.
  3. 각 계절에 대해 동일한 결과를 반환하므로, 여러 케이스(case)를 한 번에 처리합니다.
  4. 유효하지 않은 월 입력에 대한 처리를 default로 구현합니다.

Fall-through 사용

Switch 문에서 break를 생략하면 Fall-through 현상이 발생합니다. 이는 여러 case가 동일한 코드 블록을 공유할 때 유용할 수 있습니다. 다음은 Fall-through를 사용한 예제입니다:

int month = 8;
List<String> futureMonths = new ArrayList<>();

switch (month) {
    case 1:  futureMonths.add("1월");
    case 2:  futureMonths.add("2월");
    case 3:  futureMonths.add("3월");
    case 4:  futureMonths.add("4월");
    case 5:  futureMonths.add("5월");
    case 6:  futureMonths.add("6월");
    case 7:  futureMonths.add("7월");
    case 8:  futureMonths.add("8월");
    case 9:  futureMonths.add("9월");
    case 10: futureMonths.add("10월");
    case 11: futureMonths.add("11월");
    case 12: futureMonths.add("12월");
             break;
    default: break;
}

System.out.println(futureMonths); // 출력: [8월, 9월, 10월, 11월, 12월]

이 예제에서 break를 생략하여 입력된 월 이후의 모든 월을 리스트에 추가합니다.

여러 case 레이블 사용

한 문장에 여러 case 레이블을 사용할 수 있습니다. 이는 코드 중복을 줄이고 가독성을 높이는 데 유용합니다. 다음은 여러 case 레이블을 사용한 예제입니다:

import java.util.Scanner;

public class GradeCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("학점을 입력하세요 (0-100): ");
        int score = scanner.nextInt();

        String grade;

        switch (score / 10) {
            case 9: case 10:
                grade = "A";
                break;
            case 8:
                grade = "B";
                break;
            case 7:
                grade = "C";
                break;
            case 6:
                grade = "D";
                break;
            default:
                grade = "F";
        }

        System.out.println(score + "점은 " + grade + "학점입니다.");
    }
}
  1. Scanner 클래스를 사용하여 콘솔에서 사용자 입력을 받습니다.
  2. Switch 문에서 score / 10을 사용하여 10점 단위로 그룹화합니다.
  3. 여러 케이스를 하나의 블록으로 그룹화하여 코드 중복을 줄입니다.
  4. 유효하지 않은 점수 입력에 대한 처리를 default로 구현합니다.

Switch 문 사용 시 주의사항

  1. Fall-through: 의도치 않게 다음 case로 넘어갈 수 있으므로, 각 case 끝에 break를 사용하는 것이 좋습니다.
  2. 타입 호환성: Switch 문의 표현식과 case 값은 같은 타입이어야 하거나 자동 변환이 가능해야 합니다.
  3. 상수만 사용: case 레이블에는 상수 표현식만 사용할 수 있습니다. 변수나 메소드 호출은 허용되지 않습니다.
  4. 중복된 case: 동일한 값에 대한 중복된 case는 컴파일 오류를 발생시킵니다.

편히 모아진 글 보시려면 아래 위키독스 링크 >>
https://wikidocs.net/book/17111