반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[자바] switch문과 if문 차이점, switch문 표현법 및 활용 본문

JAVA

[자바] switch문과 if문 차이점, switch문 표현법 및 활용

yeonee 여니 2023. 4. 4. 11:54
728x90
반응형
SMALL

안녕하세요.

#yeoneeblog 여니입니다 :)

 

 

switch문은 if문과 동일한 조건문중에 하나입니다.

 

<switch문과 if문의 차이점>

if(조건식) 은 조건식을 복잡하게 기술이 가능합니다. 비교범위(대소비교)를 제시할수 있습니다.

switch는 조건식이 불가능합니다. 확실한 값만 조건으로 기술할수 있습니다.

이 값을가지고 '동등비교'만 수행합니다.

 

 

<switch문 표현법>

[표현법]

switch(동등비교를 수행할 값) {

case 값1 : 실행할 코드1;           // 앞으로 동등비교를할 대상자 == 값1 일경우 실행할코드1을 실행합니다.

break;                                        // 실행할코드1을 실행하고 switch문을 빠져나갈수 있게 'break;'를 걸어줍니다.

                                                  // 브레이크문이 없다면 아래내용이 순차적으로 실행됩니다.

case 값2 : 실행할 코드2; 

break;

 

case 값n : 실행할 코드n;

break;

 

default : 실행할 코드;                // if - else if문에서 else문과 같은 역할을 합니다.

                                                 // 위의 값1, 값2, ... 값n까지 앞으로 동등비교를할 대상자와 일치하지 않다면

                                                 // default 내의 실행할코드가 실행된다.

                                                 // 마지막은 break문을 작성하지 않음.

 }

 

<switch문의 활용>

public void method1() {

// 1-3사이의 정수값을 입력받아

// 1인경우 "빨간불입니다" 출력

// 2인경우 "파란불입니다" 출력

// 3인경우 "초록불입니다" 출력

// 잘못 입력한경우 "잘못 입력하셨습니다."

 

자, 가장 기본인 swich활용부터 해볼까요?

위의 내용을 swich문으로 식을 만들어 출력하고자 합니다.

 

Scanner sc = new Scanner(System.in);

int num = sc.nextInt();

 

// if(num == 1) {

// System.out.println("빨간불");

// }

// else if(num == 2) {

// System.out.println("파란불");

// }

// else if(num == 3) {

// System.out.println("초록불");

// }

// else {System.out.println("잘못 입력하셨습니다.");

// }

 

switch (num) { // num과 아래 case에 들어가는 1자리의 값이 같아야함 (문자면 문자, 정수면 정수)

case 1:

System.out.println("빨간불");

break;

case 2:

System.out.println("파란불");

break;

case 3:

System.out.println("초록불");

break;

default:

System.out.println("잘못 입력하셨습니다.");

 

}

}

=> 즉, 입력자가 '빨간불'을 입력하게 되면 'break;'가 실행되어 case1에서 실행코드가 끝나고, swich문을 빠져나가게 됩니다. 따라서, 입력자가 '파란불','초록불'을 입력한다면, 실행코드 case1, case2, case3이 순차적으로 진행되며 실행코드에 맞는 내용이 입력되면 'break;'가 실행되어 swich문을 빠져나오게 됩니다.

만약, 입력자가 '빨간불' , '파란불' , '초록불' 셋 다 아닌 것을 입력하면 'default'로 인해 "잘못 입력하셨습니다." 문구가 출력되게 됩니다.

 

 

 

public void method2() {

// 사용자에게 구매할 과일명을 입력받아 각 과일마다 가격을 출력하는 프로그램 만들기

// 사과(1000원), 바나나(2000원), 복숭아(5000원)

// xx의 가격은 xxxx원입니다.

// 판매하지 않는 과일의 경우 "저희 가게에서 판매하는 과일이 아닙니다"

Scanner sc = new Scanner(System.in);

System.out.println("구매할 과일 목록(사과, 바나나, 복숭아) ");

System.out.print("구매할 과일 입력 : ");

;

String frt = sc.nextLine();

 

int price = 0;

 

switch (frt) {

case "사과":

price = 1000;

break;

 

case "바나나":

price = 2000;

break;

 

case "복숭아":

System.out.printf("%s의 가격은 5000원입니다", frt);

break;

 

default:

System.out.println("저희 가게에서 판매하는 과일이 아닙니다.");

return; // 잘못 입력했을 경우에 아래 출력문이 안나오게끔 return문 필요

 

}

System.out.printf("%s의 가격은 %d원입니다", frt, price);

}

 

=> method1번과 같은 원리로 문자를 입력하는 방식으로 식이 만들어졌습니다.

추가된 점은 잘못 입력하였을 경우 가장 아래의 System.out.printf("%s의 가격은 %d원입니다", frt, price); 출력문이 실행되지 않도록 'return;'을 입력해주었습니다. return문을 통해 실행코드는 다시 상위로 올라가게 되고 입력자에게 새로운 입력을 요구하게 됩니다.

 

 

 

public void method3() {

// 사용자에게 등급별로 권한을 부여하는 프로그램

// 1등급 : 관리권한, 글쓰기 권한, 읽기 권한

// 2등급 : 글쓰기 권한, 읽기 권한

// 3등급 : 읽기 권한

 

Scanner sc = new Scanner(System.in);

System.out.print("등급을 입력해주세요 : ");

int level = sc.nextInt();

 

// break문 없이 switch 작성하는 케이스가 종종있음

switch (level) {

case 1:

System.out.print("관리 권한 소유 ");

case 2:

System.out.print("글쓰기 권한 소유");

case 3:

System.out.print("읽기 권한 소유");

}

}

 

=> 종종 'break' 없이 swich문을 작성하는 경우도 종종 있습니다.

 

 

 

public void method4() {

// 사용자에게 1월 ~ 12월 사이의 월을 입력받아 해당 달의 마지막 날짜를 출력하는 프로그램

// 1, 3, 5, 7, 8, 10, 12 -> 해당 달은 31일까지 입니다

// 4, 6, 9, 11 -> 해당 달은 30일까지 입니다

// 2 -> 해당 달은 28일 혹은 29일까지 입니다

// 그외 => 1월부터 12월까의 숫자를 입력해주세요

// swtich문으로 만들기, break문은 딱 3개만 사용

Scanner sc = new Scanner(System.in);

System.out.print("월을 입력해주세요");

int month = sc.nextInt();

 

switch (month) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

System.out.println("해당 달은 31일까지 입니다");

break;

 

case 2:

System.out.println("해당 달은 28일 혹은 29일까지 입니다");

break;

 

case 4:

case 6:

case 9:

case 11:

System.out.println("해당 달은 30일까지 입니다");

break;

 

default:

System.out.println("잘못 입력하셨습니다");

 

}

}

 

=> 실행코드의 결과값이 동일하다면, case를 연달아 작성한 후 출력값을 아래에 입력해줍니다.

나머지 'break' , 'default' 활용은 동일합니다.

 

 

 

 

<switch문의 장점>

: case에 기록된 값을 통해 내가 원하는 코드위치로 프리패스 가능하다.

 

* if~else문의 경우 if의 조건식 결과가 true가 나오기전까지 조건식검사를 계속 실행하므로 , switch문보다

* 연산효율이 떨어짐

*

* switch문 자주 사용되지는 않지만, 사용하는경우는 정말 어떤 동일한 연산결과가 수행되어야하는 경우.

* ex) 키보드입력, 마우스입력

 

 

728x90
반응형
LIST