조건문(Conditional Statement)
이란 특정 변수 혹은 상태가 특정 조건을 만족하는지 비교하고, 만족하는 조건을 실행하는 구문이다.
예를 들어 a
라는 변수가 3보다 큰 경우에는 a is over than 3
이라는 값을 출력하고자 할 때 조건문을 사용할 수 있으며, 이러한 조건문에는 if-else 조건문과 switch-case 조건문이 있다.
if-else 조건문은 boolean type의 특정 조건을 만족하는 코드를 실행시키는 구문이다.
if-else 조건문의 형식은 다음과 같다.
if(condition1){
...// code1
}
else if(condition2){
...// code2
}
else{
...// code3
}
위와 같은 if-else구문은 다음과 같이 동작한다.
condition1이 만약 true
일 경우 code1
을 실행한다.
만약 condition2가 true
일 경우 code2
를 실행한다.
만약 condtion1과 condition2가 모두 true가 아닐 경우에는 code3
을 실행하게 된다.
이와 같이 특정 조건을 만족할 경우 특정 코드를 실행하는 것이 if-else 조건문이다.
좀 더 자세하게 위의 코드의 동작 과정을 알아보면 다음과 같다.
먼저, condition1이 true
인지 확인을 한다. 만약 condition1이 true
일 경우에는 code1
을 실행하고 if-else 구문을 종료한다.
만약 condition1이 true
가 아닌 경우에는 condition2가 true
인지 비교를 한다. 만약 condition2가 true
일 경우에는 code2
를 실행하고 if-else 구문을 종료한다.
마지막으로, condition2가 true
가 아닐 경우에는 그 다음 condition이 없기 때문에 else에 있는 code3
을 실행하고 if-else 구문을 종료한다.
아래 코드는 간단한 if-else 구문의 코드이다.
code:
public class IfStatement {
public static void main(String[] args) {
int a=15;
if(a<5) {
System.out.println("a is under the 5.");
}
else if(a<10) {
System.out.println("a is under the 10.");
}
else {
System.out.println("a is over the 10.");
}
}
}
output:
a is over the 10.
위 코드의 동작 과정을 분석하면 다음과 같다.
먼저 a가 5보다 작은지 비교를 한다.
이때, a가 15이기 때문에 5보다 작지 않기 때문에 a<5의 비교 결과는 false
가 된다.
앞의 조건 결과가 false
이기에 그 다음 조건인 a가 10보다 작은지 비교를 한다. 이때 역시도 a가 15이기 때문에 10보다 작지 않기 때문에 a<10의 비교 결과는 false
가 된다.
앞전의 모든 조건이 false
이기 때문에 결국 else 구문에 있는 코드인 a is over the 10
을 출력하고 if-else 구문을 종료한다.
이와같이 if-else 구문은 특정 조건의 true/false 상태를 확인해 조건에 부합하는 코드를 실행하는 조건문이다.
switch-case 조건문은 if-else 조건문과 유사한 형식의 또 다른 조건문이다.
switch-case 조건문의 형식은 다음과 같다.
switch(op) {
case 1:// op=1
...// code1
break;
case 2:// op=2
...//code2
break;
case 3:// op=3
...//code3
break;
default:// others
...//code4
break;
}
위와 같은 switch-case구문은 다음과 같이 동작한다.
만약 op가 1일 경우에는 code1
을 실행한다. 그 다음 break
구문이 있기 때문에 switch-case 구문을 종료한다.
만약 op가 2일 경우에는 code2
을 실행한다.
그 다음 break
구문이 있기 때문에 switch-case 구문을 종료한다.
만약 op가 3일 경우에는 code3
을 실행한다.
그 다음 break
구문이 있기 때문에 switch-case 구문을 종료한다.
만약 op가 앞에 있던 조건들인 1, 2, 3이 아닐 경우에는 code4
을 실행한다.
그 다음 break
구문이 있기 때문에 switch-case 구문을 종료한다.
이와 같이 if-else 구문과 유사하게 특정 조건에서 특정 코드를 실행하는 것이 switch-case 조건문이다.
또한, switch-case 구문에서 조건은 일반적으로 상수를 주로 사용한다.
앞에서 살펴본 바와 같이 if-else 조건문과 switch-case 조건문은 상당히 유사하다. 그렇다면 이번에는 switch-case 조건문과 if-else 조건문의 차이를 알아보도록 하자.
가장 큰 차이점은 각 조건문에 들어가는 조건의 차이이다.
먼저, if-else 조건문의 경우 비교 조건은 "무조건" boolean
자료형만 들어갈 수 있다. 즉, 조건이 true
일 경우 코드를 실행하고, false
일 경우에는 코드를 실행하지 않는 방식으로 동작한다. 따라서 다음과 같은 코드는 작성할 수 없다. 심지어 작성한다 하더라도 문법오류가 일어나 코드가 동작하지 않는다.
int num=5;
if(num) {
...// code
}
반면에, switch-case 구문의 경우 비교 조건은 int
, char
, string
, enum
자료형이 들어갈 수 있다. 즉, 일반적인 if-else 구문과 달리 조건연산이 불가능하므로, 아래 코드와 같이는 작성할 수 없다.
switch(op) {
case 1:// op=1
System.out.println("1");
break;
case (op>2):// error
System.out.println("over than 2");
break;
default:// others
...
break;
}
반면에 String 자료형은 지원하고 있으므로, 다음과 같이 작성하는 것은 가능하다.
String str;
str="hello world.";
switch(str) {
case "hell world":
System.out.println("1");
break;
case "hello world.":
System.out.println("2");
break;
}
output:
2
이렇듯 switch-case 구문과 if-else 구문은 약간의 차이가 있다. 그러나, 이 둘이 호환되는 경우에는 일반적으로 조건이 3개 이상일 경우에는 switch-case 구문을 사용하는 것이 가독성 측면에서 더 바람직하다.
시험점수
score
가 91~100점일 때는 A를, 81~90점일 때는 B를, 71~80점일 때는 C를, 61~70점일 때는 D를, 60점 이하일 때는 F를 출력하는 코드를 작성하시오. (score 값은 0~100점 사이에서 임의로 지정하시오.)
화씨 온도인
temp_F
변수가 있다 가정하자. 이 온도를 섭씨 온도로 바꿔 출력하고, 섭씨 온도가 30도 초과일 경우에는 "더움"을, 25도~30도 미만일 경우에는 "따뜻함"을, 20도~ 25도 미만일 경우에는 "선선함"을, 20도 미만일 경우에는 "서늘함"을 출력하는 코드를 작성하시오.
(화씨->섭씨 변환 공식: 섭씨=(화씨-32)*(5/9) )
다음 코드에서 오류들을 수정하고, 오류가 발생한 부분과 함께 발생한 이유를 기술하시오.
public class Q3 {
public static void main(String[] args) {
double op;
op=12;
switch(op) {
case (op==10):
System.out.println("option is 10");
break;
case 5:
System.out.println("option is 5");
break;
case 12:
System.out.println("option is 12");
break;
}
}
}
public class Q1 {
public static void main(String[] args) {
int score=86;
if(score>=91 && score<=100) {// A
System.out.println("A");
}
else if(score>=81 && score<=90) {// B
System.out.println("B");
}
else if(score>=71 && score<=80) {// C
System.out.println("C");
}
else if(score>=61 && score<=70) {
System.out.println("D");
}
else if(score<=60) {
System.out.println("F");
}
}
}
result:
B
public class Q2 {
public static void main(String[] args) {
float temp_F, temp_C;
temp_F=85.3f;
temp_C=(temp_F-32)*(5.f/9.f);
System.out.println(temp_C);
if(temp_C>30.f){
System.out.println("더움");
}
else if(temp_C>=25.f && temp_C<30.f){
System.out.println("따뜻함");
}
else if(temp_C>=20.f && temp_C<25.f){
System.out.println("선선함");
}
else if(temp_C<20.f){
System.out.println("서늘함");
}
}
}
result:
29.611115
따뜻함
public class Q3 {
public static void main(String[] args) {
int op;
op=12;
switch(op) {
case 10:
System.out.println("option is 10");
break;
case 5:
System.out.println("option is 5");
break;
case 12:
System.out.println("option is 12");
break;
}
}
}
output
option is 12
오류가 발생한 부분:
int
, char
, string
, enum
자료형만 지원하므로, double
자료형은 지원하지 않기 때문에 오류가 발생할 수 밖에 없다.double
자료형을 int
자료형으로 변환함으로서 해결할 수 있다.op==10
과 같이 boolean
자료형으로 결과가 나오는 관계연산자는 사용이 불가능하다. 따라서, 이를 해결하기 위해서는 관계연산자를 제거하고, op이 10인 경우를 요구하는 구문이므로, case 10:
으로 다시 작성함으로서 해결할 수 있다.위 주소에서 code를 다운로드 받아 eclipse로 직접 정답 확인이 가능하다.
https://github.com/isaiahIM/java_basic/tree/main/conditional%20statement