본문 바로가기
JAVA

조건문 (switch 문)

by RoyalBlue 2023. 9. 22.

if문에 이어 오늘 공부할 조건문은 "switch" 문이다.

 

 

Switch

 

if 문은 조건식의 결과를 "true" or "false" 단 두가지만으로 내고, 실행문을 실행시킨다.

조건식에서의 결과가 많아지면 else if 를 그만큼 추가해야 함으로 코드가 복잡해지는 단점을 지니고 있다.

 

만약, 조건에 대입되는 값의 수가 명확하게 정해져 있다면 if 문 대신,

switch문을 사용하는 것도 좋은 선택이 될 수 있다.

 

아래 그림은 switch문의 실행 흐름을 보여준다. 

 

switch문의 실행 흐름

 

먼저 switch문의 "( )" 안에는 정확한 값을 지닌 변수가 올 수 있다.

if 문과 다르게 연산식이 올 수 없으며, 그 외로 boolean 타입도 올 수 없다.(상수 값일 경우는 가능)

 

switch문의 괄호 안에는 정확한 값이 와야하기 때문에 오차가 발생하는

부동 소수점 타입인 float과 double 타입 또한 올 수 없다.

 

가장 일반적으로 사용되는 데이터 타입은 정수형 변수다 long 타입은 넣을 수 없다.

(byte, short, char, int)

 

이제 본격적으로 switch문의 사용 예제를 함께 보자. 

 

 

위 코드에서 변수 "alphabet"은 "B"라는 값을 지니고 있고,

switch문을 통해 변수의 값과 해당되는 case 안의 출력문을 실행시킨 것을 볼 수 있다.

 

그런데 결과를 보면 아래의 "case C" 도 함께 실행된 것을 볼 수 있다.

왜 그럴까?

 

 

🔘 break

 

switch 문은 변수에 해당되는 값을 지닌 case를 실행시키고 나면

해당 블록을 빠져나가는 if 문과는 다르게,

 

변수값에 해당되는 처음 마주한 case 의 실행문을 실행 후

아래의 실행문을 모두 실행시킨다.

 

변수값에 해당되는 case만 실행시키고 switch문을 빠져나오고 싶다면 아래처럼 break문을 추가로 기입해줘야 한다.

 

 

수정된 코드를 보면 해당 case를 실행시키고

break; 를 통해 switch문을 빠져나온 것을 확인할 수 있다.

 

A, B, C 모두 해당하는 case만 실행시키고 싶다면 모두 break를 달아주면 된다.

특별한 경우가 아니라면 주로 case 안에 break를 모두 지정해 사용한다. 

 

정수형 변수 대신에 String 도 switch의 괄호 안에 올 수 있는데,

String 타입 변수를 통한 모든 case에 break; 를 기입한 아래의 예시를 보면 이해가 빠를 것이다.

 

 

 

🔘 default

 

switch문의 마지막에는 선택적으로 default문을 작성할 수 있다.

지정한 변수값이 switch문 내부 case중 어디에도 없다면  default문 내부를 실행하게 된다.

(else if 문의 마지막 else와 유사하다.)

 

아래의 코드를 보자.

 

 

5개의 case문 중 변수에 해당하는 값이 없어

switch문은 default : 를 실행시켰다.

 

default는 switch 문 내부에서 필수적인 것은 아니기에 선택 사항이며,

만약 변수의 값이 명확하게 주어져 있는 로직이라면

default또한 하나의 case문처럼 써도 되기는 된다...

 

 


 

 

switch문의 경우 JAVA 버전 12 이후부터는 Expressions(표현식) 을 사용할 수 있다.

기존의 swich문에서 더욱 직관적인 코드 구성과,

"{ }" 기호를 추가해 별도의 break;문이 필요없게 한 것인데

 

나의 경우 티스토리에 사용하는 "Trinket"이 자바 12버전 이상을 지원하지 않아,

따로 이렇게 기입하여 정보를 남겨둔다. 

switch문의 간결한 표현식이 궁금한 분들은 구글에 "java12 이후 switch문" 으로 검색하여 참고하면 된다. 

 

다음 포스팅에서는 반복문을 알아본다!

'JAVA' 카테고리의 다른 글

조건문(if 문)  (0) 2023.09.20
삼항 연산자  (0) 2023.09.19
연산자(part 2)  (0) 2023.09.11
산술 연산식에서의 형변환  (0) 2023.09.06
연산자(part 1)  (0) 2023.09.05