5. 조건문

Isaiah IM·2023년 1월 17일
0

java basic

목록 보기
6/38
post-thumbnail

1. 조건문(Conditional Statement)

조건문(Conditional Statement)이란 특정 변수 혹은 상태가 특정 조건을 만족하는지 비교하고, 만족하는 조건을 실행하는 구문이다.

예를 들어 a라는 변수가 3보다 큰 경우에는 a is over than 3이라는 값을 출력하고자 할 때 조건문을 사용할 수 있으며, 이러한 조건문에는 if-else 조건문과 switch-case 조건문이 있다.


2. if-else 조건문

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 상태를 확인해 조건에 부합하는 코드를 실행하는 조건문이다.


3. switch-case 조건문

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 구문에서 조건은 일반적으로 상수를 주로 사용한다.


4. if-else 조건문과 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중 선택방법

이렇듯 switch-case 구문과 if-else 구문은 약간의 차이가 있다. 그러나, 이 둘이 호환되는 경우에는 일반적으로 조건이 3개 이상일 경우에는 switch-case 구문을 사용하는 것이 가독성 측면에서 더 바람직하다.


5. 실습

  • Q1

    시험점수 score가 91~100점일 때는 A를, 81~90점일 때는 B를, 71~80점일 때는 C를, 61~70점일 때는 D를, 60점 이하일 때는 F를 출력하는 코드를 작성하시오. (score 값은 0~100점 사이에서 임의로 지정하시오.)

  • Q2

    화씨 온도인 temp_F 변수가 있다 가정하자. 이 온도를 섭씨 온도로 바꿔 출력하고, 섭씨 온도가 30도 초과일 경우에는 "더움"을, 25도~30도 미만일 경우에는 "따뜻함"을, 20도~ 25도 미만일 경우에는 "선선함"을, 20도 미만일 경우에는 "서늘함"을 출력하는 코드를 작성하시오.
    (화씨->섭씨 변환 공식: 섭씨=(화씨-32)*(5/9) )

  • Q3

    다음 코드에서 오류들을 수정하고, 오류가 발생한 부분과 함께 발생한 이유를 기술하시오.

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;
		}
		
	}
}

  • A1

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
  • A2

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
따뜻함
  • A3

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

오류가 발생한 부분:

  • double op;
    switch-case 구문에서는 비교 조건은 int, char, string, enum 자료형만 지원하므로, double 자료형은 지원하지 않기 때문에 오류가 발생할 수 밖에 없다.
    이를 해결하기 위해서는 double 자료형을 int자료형으로 변환함으로서 해결할 수 있다.
  • case (op==10):
    switch-case 구문에서는 op==10과 같이 boolean자료형으로 결과가 나오는 관계연산자는 사용이 불가능하다. 따라서, 이를 해결하기 위해서는 관계연산자를 제거하고, op이 10인 경우를 요구하는 구문이므로, case 10:으로 다시 작성함으로서 해결할 수 있다.

위 주소에서 code를 다운로드 받아 eclipse로 직접 정답 확인이 가능하다.
https://github.com/isaiahIM/java_basic/tree/main/conditional%20statement

profile
나는 생각한다. 고로 나는 코딩한다.

0개의 댓글