Welcome to Wesley & Harry's Traveling & Programming

IT Program/Java Basic

자바(java) 조건문 switch문

Wesley & Harry 2022. 3. 1. 20:11
반응형

앞선 게시글에서는 if문과 중첩if문을 통해 세부적인 점수의 분류를 해보았다.

switch문은 if문과 같은 조건문으로써 변수의 값에 따라 실행문이 결정이 된다.

우선 switch문의 형태를 살펴보자.

 

switch문의 형태는 기본적으로 이렇게 생겼다.

switch문이 돌아가는 형태는

우선 까만 네모블록을 읽을 차례가 되면 switch 함수는

회색 네모부분의 변수의 값을 불러오게된다.

그 다음 변수의 값과 case에 값1 이라고 적혀있는 부분의 값이 일치한다면

case 값1 : 이후의 실행문을 break; 전까지 실행하고

break;를 통해 switch문 바깥으로 초록색 네모부분으로 이동하게 된다.

 

만약 변수의 값이 case 값2 와 똑같다면 동일하게 

case 값2 : 이후의 실행문을 break; 전까지 실행하고

break;를 통해 switch문 바깥으로 초록색 네모부분으로 흐름이 이어가게된다.

 

보라색 네모부분 dafault:는 case 값x : 에 맞는값이 없다면 실행될 블록이다.

이또한 실행문을 마친 후 초록색 네모칸으로 이동하게 된다.

 

아래 코드에서 switch문의 예시를 들어보겠다.

		int wesley = 3;
		
		switch(wesley) {
		case 1:
			System.out.println("wesley는 1이다");
			break;
		case 2:
			System.out.println("wesley는 2이다");
			break;
		case 3:
			System.out.println("wesley는 3이다");
			break;
		default:
			System.out.println("그외의 숫자");
		}

wesley의 값을 3이라고 칭하였다.

위의 형태에서 볼 수 있듯이 

switch문에 변수명을 넣어주었다.

이 말은 switch(3){} 의 형태라는 것이다.

wesley의 값이 3이기 때문에 우리는 case 3:으로 이동하게 된다.

System.out.println("wesley는 3이다"); 를 실행한 후 switch 문을 빠져나가게 된다.

결과값을 확인해보자.

 

우리는 여기서 한가지 의문점이 있을 수 있다.

break;는 왜 있는것일까?
궁금한 것은 바로 써보면된다.

wesley의 값을 2로 바꿔주고

case 2: 블록의 break를 없애보면 어떻게 결과가 나올지 아래코드를 통해 확인해보자.

		int wesley = 2;
		
		switch(wesley) {
		case 1:
			System.out.println("wesley는 1이다");
			break;
		case 2:
			System.out.println("wesley는 2이다");
		case 3:
			System.out.println("wesley는 3이다");
			break;
		default:
			System.out.println("그외의 숫자");
		}

이 코드의 결과값은 어떨까 직접 돌려보도록 한다.

결과값이 break;가 빠져있는 부분아래로 case의 값과 상관없이 출력되는 것을 알 수 있다.

case 2 와 case 3 이 순서대로 실행이 된것이다.

이렇듯 switch case문은 꼭 break를 달아줘야 한다는 것을 알 수 있다.

 

이 예제를 가지고 우리는 저번 게시글에 if문에서 배웠던 Math.random()을 통해 주사위를 돌려보자.

아래 코드를 본다.

		int dice = (int)(Math.random()*6) + 1;
		System.out.println(dice);
		switch(dice) {
		case 1:
			System.out.println("dice는 1이다");
			break;
		case 2:
			System.out.println("dice는 2이다");
			break;
		case 3:
			System.out.println("dice는 3이다");
			break;
		case 4:
			System.out.println("dice는 4이다");
			break;
		case 5:
			System.out.println("dice는 5이다");
			break;
		default:
			System.out.println("dice는 6이다");
		}

저번 내용을 복습해본다.

int dice = (int)(Math.random()*6) + 1; 를 쓴 이유는 무엇일까

Math.random()*6을 통해 0~5까지의 int값을 얻어낼 수 있다. ( Math.random()의 최대값 0.99999 * 6은 맨앞 int값 최대5)

하지만 주사위는 1~6까지이기 때문에 +1을 해준것이다.

그리고 switch case의 구문이 잘 돌아가는지 확인하기 위해

System.out.println(dice); 를 통해 확인 후 결과값을 위해 

코드를 실행해본다.

 

아주 잘 돌아간다는 것을 알 수 있다.

 

또 한가지 break를 이용하여 두가지 케이스의 같은 실행문을 실행하는 행위 또한 가능하다.

아래 코드를 통해 알아보자.

		char wesleygrade = 'b';
		System.out.println(wesleygrade);
		switch(wesleygrade) {
		case 'A':
		case 'a':
			System.out.println("wesleygrade는 A등급이다");
			break;
		case 'B':
		case 'b':
			System.out.println("wesleygrade는 B등급이다");
			break;
		default:
			System.out.println("wesleygrade는 그 외 등급이다");
		}

switch 문에는 int뿐만 아니라 char, String 형태 또한 들어갈 수 있다.

이 예제는 대문자와 소문자 상관없이 등급을 나타내는 switch case 문으로써 실행함으로써 

앞선 과정을 해왔다면 무리없이 이해가 가능할 것이다.

wesleygrade의 값을 바꿔가며 실행을 해보자. 결과값 예시는 아래와 같다.

 

반응형