[JAVA] 조건문 ( if / if-else / 삼항연산자 / switch-case / switch Expression)
조건문?
특정한 조건이 true인 경우 해당하는 수행문을 실행하게 구현된 것.
[ If ]
조건식이 참일 때 수행문을 실행한다.
조건식이 거짓인 경우 else 이후에 있는 수행문 2를 수행한다.
If ( 조건식 ) {
수행문1 ;
} else {
수행문2
}
[ if - else if - else ]
else의 뒤에 if를 추가하여 조건식을 한번 더 수행할 수 있다.
ㄴ 하나의 상황에 대한 조건식이 여러개로 나뉘어 각 조건마다 서로 다른 수행문을 수행해야 하는 경우에 사용된다.
If ( 조건식 ) {
수행문1 ;
} else if {
수행문 2
} else {
수행문3
}
int age =18 ;
if ( age < 8 ) {
system.out.println(“미취학아동”);
} else if ( age < 20 ){
system.out.println(“학생”);
} else {
system.out.println(“성인”);
}
결과 :
학생
만약 if 뒤에 else를 붙이지 않으면 조건문은 종료된다.
즉 아래의 코드에서 수행문 2는 항상 실행된다
int a = 3;
if ( a != 1 ) {
system.out.println(“ a는 1이 아닙니다.” );
}
system.out.println(“ 이것은 수행문 2 입니다.” );
a는 1이 아닙니다.
이것은 수행문 2 입니다.
if는 단독조건이기 때문에 구문이 끝나면 해당 조건이 완료된다. 아래와 같이 코딩할 경우 모든 구문이 출력된다.
int age =5 ;
if ( age < 8 ) {
system.out.println(“미취학아동”);
}
if ( age < 20 ){
system.out.println(“학생”);
}
결과 :
미취학아동
학생
[ if - 삼항연산자]
If - else 는 삼항연산자로 바꾸어 한 줄로 간략하게 사용할 수 있다.
( a > b ) ? true이면 반환값 : false면 반환값 ;
if ( a > b ) { max = a } else { max = b }
↓
result = ( a > b ) ? a : b ;
[ switch - case ]
하나의 조건으로 여러개의 값을 비교해야하는 경우 유용하게 사용할 수 있다.
- if 조건문을 사용할 때 코드가 복잡하고 번거로워지는 단점을 보완하여 가독성을 높여준다.
- 비교 조건이 특정 값이거나 문자열로 표현할 때 사용한다.
- break문을 사용하여 조건이 완료되면 switch 문을 빠져나온다.
- break가 없으면 그 다음 케이스를 구분하여 출력한다.
- switch - case 내에서는 {}를 사용하지 않는다.
- 조건이 case에 지정된 값과 같으면 실행한다.
int a = {user_input_value};
switch( a ) {
case 1 :
result = result 1 ;
break ;
case 2 :
result = result 2 ;
break ;
case 3 : case 4 :
result = result 3 ;
break ;
default :
result = result 4;
}
- case를 중첩할 수있다.
switch(month){
case 1 : case3 : case5 : case7 : case8 : case 10 :
day = 31 ;
break;
case 2 : day = 28 ;
break;
case 4 : case 6 : case 9 : case 11 :
day = 30 ;
break;
default :
system.out.println(“존재하지 않는 달”);
day = -1;
}
system.out.println(month+“월은 ” + day + “일 입니다.“);
- case에는 문자형, 숫자형, 연산식도 사용할 수 있다.
아래의 경우, caseB+2를 수행한다.
int a = 2; int b = 0;
switch( a ) { //조건
case b+1 :
result = result 1 ; // 조건이 case 1과 같으면 실행한다
break ;
case b+2 :
result = result 2 ;
break ;
// 또는
switch(medal){
case ”gold“ :
system.out.println(“금메달”);
break;
case ”silver“ :
system.out.println(“은메달”);
break;
case ”bronze“ :
system.out.println(“동메달”);
break;
default :
system.out.println(“메달이 없습니다.”);
medal = -1;
}
break ?
break는 조건에 부합하는 case에서 break가 있는 구문까지 실행한다.
모든 case에 break가 없다면 switch문이 끝날 때 까지 모두 실행한다.
아래의 경우, case 2, case 3, case4, default까지 모두 실행한다.
int a = 2;
switch( a ) {
case 1 :
result = result 1 ;
case 2 :
result = result 2 ;
case 3 : case 4 :
result = result 3 ;
default :
result = result 4;
}
switch Expression ?
ㄴ java 14버전 이상부터 지원한다.
ㄴ 반환값을 바로 받을 수 있다.
ㄴ case : case가 여러개인 경우 쉼표로 구분한다.
ㄴ break 문을 사용하지 않는다.
ㄴ ->{} 람다식 사용
ㄴ yield 사용한다. ( switch문에 수행값과 반환이 있는 경우 반환값을 표현)
ㄴ 반환값만 있는 경우 yield를 사용하지않아도 됨.
ㄴ 수행값과 반환값이 같이 있는 경우 {}를 쓰고, 반환값에는 yield를 붙여주어야한다
ㄴ switch 문의 종료부분에 ;를 붙여주어야 함
int 반환값 = switch(조건){ case 조건1, 조건2 -> { yield 반환값 ; } default -> { yield 반환값; } };
int day = switch(month){
case 1, 3, 5, 7, 8, 10, 12 ->
31 ;
case 2 -> {
system.out.println(“2월은”);
yield 28 ;
}
case 4, 6, 9, 11 ->
30 ; // 반환값만 있는 경우 yield를 사용하지않아도 됨.
default -> {
// 수행값과 반환값이 같이 있는 경우 반환값에 yield를 붙여준다.
system.out.println(“존재하지 않는 달”);
yield 0;
}
};