Java - 조건문 (2) switch

민찬홍·2023년 9월 5일

Java

목록 보기
15/31
post-thumbnail

🧩 switch

		byte fingersOut = 2;

        //  💡 switch : 괄호 안에 기준이 될 변수를 받음
        //  가능한 자료형: byte, short, int, char, String, enum(이후 배움)
        //  boolean을 쓸거면 그냥 if문을 쓴다.
        
        switch (fingersOut) {

            //  💡 case : 기준에 일치하는 case로 바로 이동
            //  💡 break : switch문 실행을 종료
            //  💡 default: 해당하는 case가 없을 때 - 마지막에 작성

            case 2:
                System.out.println("가위");
                break;
            case 0:
                System.out.println("바위");
                break;
            case 5:
                System.out.println("보");
                break;
            default:
                System.out.println("무효");
        }

case 뒤에 오는 자료형은 위에 switch(자료형) 에 들어있는 자료형과 일치시켜줘야 한다.

만약 case에 break를 걸어주지 않으면 break를 걸어주지 않은 부분이 모두 실행되는 것을 볼 수 있다.

case에 각각의 경우에 대응하는 값과 실행될 코드를 넣어주고, 그 경우가 아닌 경우에 실행할 코드를 default에 넣어주는 방식이다.


		String direction = "north";
        String dirKor;

        //  break 제거하고 실행해 볼 것
        switch (direction) {
            case "north":
                dirKor = "북";
                break;
            case "south":
                dirKor = "남";
                break;
            case "east":
                dirKor = "동";
                break;
            case "west":
                dirKor = "서";
                break;
            default:
                dirKor = null;
        }

        System.out.println(
                dirKor != null ? dirKor : "무효"
        );

		//  💡 break 관련 동작방식을 이용
		char yutnori = '도';

        switch (yutnori) {
            case '모': System.out.println("앞으로");
            case '윷': System.out.println("앞으로");
            case '걸': System.out.println("앞으로");
            case '개': System.out.println("앞으로");
            case '도': System.out.println("앞으로"); break;
            default:
                System.out.println("무효");
        }

만약 위에 코드에서 char가 '도'면 앞으로가 한번 출력될 것이다. 만약 char가 '개'면 앞으로가 두 번 출력될 것이다. 왜냐하면 '개'의 case 부분에 break가 없으므로 '개'의 case부분과 '도'의 case 부분이 모두 출력되는 것이다. 똑같은 로직으로 char가 '윷'이 된다면 앞으로가 네 번 출력될 것이다.


		byte month = 1;
        byte season;

        switch (month) {
            case 1: case 2: case 3:
                season = 1;
                break;
            case 4: case 5: case 6:
                season = 2;
                break;
            case 7: case 8: case 9:
                season = 3;
                break;
            case 10: case 11: case 12:
                season = 4;
                break;
            default:
                season = 0;
        }

        System.out.println(
                season > 0
                ? "지금은 %d분기입니다.".formatted(season)
                        : "무효한 월입니다."
        );

다음과 같은 코드 작성도 가능하다. case1, case2, case3이 붙어있는 것을 볼 수 있는데, 이 경우 1,2,3일때 모두 같은 코드를 실행한다는 것을 의미한다.


		byte startMonth = 1;
        String holidays = "";

        switch (startMonth) {
            case 1:
                holidays += "설날, ";
            case 2:
            case 3:
                holidays += "3·1절, ";
                break;
            case 4:
            case 5:
                holidays += "어린이날, ";
            case 6:
                holidays += "현충일, ";
                break;
            case 7:
            case 8:
                holidays += "광복절, ";
            case 9:
                holidays += "추석, ";
                break;
            case 10:
                holidays += "한글날, ";
            case 11:
            case 12:
                holidays += "크리스마스, ";
                break;
            default:
                holidays = null; // 휴일이 없는 분기와 구분
        }

        String result = holidays == null
                ? "(잘못된 월입니다)"
                : "분기 내 휴일: " + holidays
                .substring(0, holidays.lastIndexOf(", "));
profile
백엔드 개발자를 꿈꿉니다

0개의 댓글