반응형

swith문에 대해 자세히 알아보자!


 

 

  • if 문의 경우 결과가 참, 거짓 두가지 밖에 없다.
  • 경우의 수가 많아 질 수록 else - if를 계속 추가해야해서 복잡하고, 처리시간도 길어진다.
switch 문
  • 단 하나의 조건식으로 많은 경우의 수를 처리
  • 표현도 간결해 알아보기가 쉽다.
  • 처리할 경우의 수가 많은 경우에는 if문 보다 switch문으로 작성하는 것이 좋다.
  • 단, switch문은 제약조건이 있기 때문에, 경우의 수가 많아도 어쩔 수 없이 if문으로 작성해야하는 경우가 있다.
  1. 조건식을 계산한다.
  2. 조건식의 결과와 일치하는 case문으로 이동한다.
  3. 이후의 문장들을 수행한다.
  4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.

  • 만약 조건식의 결과와 일치하는 case문이 하나도 없으면 default문으로 이동한다.
  • default문은 if 문의 else블럭과 같은 역할이라 생각하면 된다.
  • switch 문의 break 문은 각 case문의 영역을 구분하는 역할을 한다.
  • 만약 break문을 생략하게 된다면 case문 사이의 구분이 없어지는것과 같아, 다른 break 문을 만나거나 switch문 블럭{ } 끝을 만날때 까지 나오는 모든 문장들을 수행하게 된다.
  • 이러한 실수를 방지하기위해 break문을 빼먹지 않도록 주의해야한다.
switch 문의 제약조건

 

  • switch문의 조건식은 결과값이 반드시 정수이어야 한다.
  • 결과값과 일치하는 case문으로 이동하기 때문에 case문의 값 역시 정수이어야 한다.
  • case문의 값이 중복되지 않아야 한다. // 같은 값의 case문이 여러 개 이면 어디로 이동해야할지 모르기 때문!
  • case문의 값은 반드시 상수이어야 한다. // 변수나 실수는 case문의 값으로 사용할 수 없다!

public static void main(String[] args) {

int num, result;

final int ONE = 1;

 

 

switch (result) {

case '1' : // OK. 문자 리터럴(정수 49와 동일)

case ONE : // OK. 정수 상수

case "YES" : // OK. 문자열 리터럴. JDK 1.7부터 허용

case num : // 에러. 변수는 불가

case 1.0 : // 에러. 실수도 불가

 

}

switch문의 제약조건 예제
예제문은 [JAVA의 정석(기초편)_남궁성 지음] 책을 참고하였습니다.

package ch01;

 

import java.util.Scanner;

 

public class SwitchMainTest {

 

public static void main(String[] args) {

System.out.print("현재 월을 입력하세요.>");

 

Scanner sc = new Scanner(System.in);

 

int month = sc.nextInt(); // 화면을 통해 입력받은 숫자를 month에 지정

 

switch (month) {

case 3:

case 4:

case 5:

System.out.println("현재의 계절은 봄입니다.");

break;

case 6:

case 7:

case 8:

System.out.println("현재의 계절은 여름입니다.");

break;

case 9:

case 10:

case 11:

System.out.println("현재의 계절은 가을입니다.");

break;

default: // case 12: case 1: case 2:

System.out.println("현재의 계절은 겨울입니다.");

 

} // end of switch

 

} // end of main

 

} // end of class

 

* case문은 한 줄에 쓰던, 한 줄에 붙여서 쓰던 상관없음.

만약 예제의 switch 문을 if문으로 변경하면 다음과 같다.

if(month== 3 || month == 4 || month == 5) {

System.out.println("현재의 계절은 봄입니다.");

} else if (month== 6 || month == 7 || month == 8) {

System.out.println("현재의 계절은 여름입니다.");

} else if (month== 9 || month == 10 || month == 11) {

System.out.println("현재의 계절은 가을입니다.");

} else { // month == 12, 1, 2

System.out.println("현재의 계절은 겨울입니다.");

}

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 다형성  (0) 2023.08.10
[JAVA] 객체지향 언어  (0) 2023.08.09
[JAVA] 상속 (2)  (0) 2023.08.08
[JAVA] 상속  (0) 2023.08.08
[JAVA] 배열  (0) 2023.08.04

+ Recent posts