Java

조건문 - if, switch

성장코딩 2022. 12. 22. 01:03

Theme.  if문

 

 먼저, 아래 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
package test;
 
public class MainClass {
    public static void main(String[] args) {
    
        int number = 7;
        if (number > 0 ) {
            System.out.println("number는 0보다 큽니다.");
        }
    }
}
 
cs

결과는, "number는 0보다 큽니다."이다.

이제 형식을 알아보자.

1
2
3
4
5
6
if (조건식) {
 
    조건식이 참(true)일 때 수행될 문장들을 적는다. 
 
}
 
cs

가장 기본적인 조건문답게, '조건식', '괄호{ }', '조건식이 참(true)일 때 수행될 문장'으로 구성되어 있다.

'조건식이 참(true)일 때 수행될 문장'이라는 말을 통해 조건식이 거짓(false)일 때는 문장이 수행되지 않음을 알 수 있다. 

 

조건식

 조건식을 세울 때, 일반적으로 비교연산자와 논리연산자로 구성된다.

 잠시, 비교연산자와 논리연산자를 포함한 연산자에 대해 간단히 알아보자.

cf.  연산자의 종류

1)  산술 연산자

 사칙 연산자:  +, -, *, /

 %: 피연산자를 연산자로 나누고 난 나머지 값( 몫은 /을 통해서 구함)

 

2) 비교 연산자

 대소비교 연산자: < > <= >=

 등가비교 연사자: ==(같다) !=(같지 않다)

 

3) 논리 연산자

 && (AND 결합) , || (OR 결합), !(true와 false를 바꿈)

 

(자세한 설명은 다른 글에!!)

 

if문을 사용하여 간단한 코드들을 작성해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package test;
 
public class MainClass {
    public static void main(String[] args) {
    
        int number = 7;
        
        if (number > 0 ) {
            System.out.println("number는 0보다 큽니다."); // true
        }
        
        if (number == 7) { 
            System.out.println("number는 7입니다."); // true
        }
        
        if (number < 6 ) {
            System.out.println("number는 6보다 작습니다."); // false
        }
        
        if (number > 0 && number <= 10) {
            System.out.println("number는 0보다 크고 10보다 작거나 같습니다."); // true
        }
        
        if (number > 0 || number <= 10) {
            System.out.println("number는 0보다 크거나 10보다 작거나 같습니다."); // true
        }
        
        //    true            false
        if (number > 0 || number <= 5) {
            System.out.println("number는 0보다 크거나 5보다 작거나 같습니다."); // true
        }
        
    }
}
 
 
cs

< Console >

조건식이 참(true)인 경우에만 출력된 모습

추가적으로 코드를 작성해보면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package test;
 
public class MainClass {
    public static void main(String[] args) {
    
        boolean b = true;
        
        if(b == true) {
            System.out.println("b == true 입니다.");
        }
        
        if(b) {
            System.out.println("b == true 입니다.");
        }    
                
        b = false;
        
        if(b == false) {
            System.out.println("b == false 입니다.");
        }    
        
        if(!b) {
            System.out.println("b == false 입니다.");
        }
        
        // 조건문에서 조건에 문자열 비교가 있다면 주의해라. //
        
        String str1 = "worl";
        str1 = str1 + "d"
        System.out.println("str1 = " + str1); 
        // 이 식으로 world를 만들고 아래 조건문 돌리면 안돌아감
        if (str1 == "world") {
            System.out.println("str1 은 world 입니다."); 
        }
        
        // 따라서, 문자열 비교하는 조건문 쓸 때는 equals를 이용해라!
        
        if (str1.equals("world"== true) {
            System.out.println("str1(equals 쓴) 은 world 입니다.");
        }
                
    }
}
 
 
cs

Theme. if - else문

 

먼저, 아래의 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package test;
 
public class MainClass {
    public static void main(String[] args) {
    
        int count = 8;
        
        if (count < 6) {
            System.out.println("count는 6보다 작습니다."); // 조건식이 true일 때
        }
        
        else {
            System.out.println("count는 6보다 크거나 같습니다."); // 조건식이 false일 때
        }
        
    }
}
 
 
cs

결과는, "count는 6보다 크거나 같습니다." 이다.

 

이제 형식을 알아보자.

1) 

1
2
3
4
5
6
7
8
9
10
if (조건식) {
    조건식이 참(true)일 때 수행될 문장들을 적는다. 
}
else (조건식) {
    조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
cs

2)

1
2
3
4
5
6
7
8
9
10
if (조건식) {
    조건식이 참(true)일 때 수행될 문장들을 적는다. 
} else (조건식) {
    조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
cs

if문과의 차이점은 'else블럭'을 추가함으로써 조건식이 거짓(false)일 때 수행될 문장을 적을 수 있다는 것

1) 2) 형식 모두 동일한 결과를 가져온다

 

if - else문을 통한 코드를 작성해보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package test;
 
public class MainClass {
    public static void main(String[] args) {
    
        char c = 'A';
        
        if(c == 'a') {
            System.out.println("c는 'a'입니다.");
        }
        else {
            System.out.println("c는 'a'가 아닙니다.");
        }
        
    }
}
cs

결과는 "c는 'a'가 아닙니다." 이다.

 

cf.  if - else문과  삼항 연산자

위의 결과와 동일한 코드를 삼항 연산자를 이용하여 작성해보면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
package test;
 
public class MainClass {
    public static void main(String[] args) {
    
        char c = 'A';
        
        String str = (c == 'a') ? "c는 'a'입니다." : "c는 'a'가 아닙니다.";
        System.out.println(str);
                
    }
}
cs

 

Theme. if - else if문 

 

if - else문은 조건식이 참(true) 또는 거짓(false)인 경우 두 가지중 하나가 수행되는 구조인데,

이는 처리하고 싶은 경우가 셋 이상인 경우에는 적용할 수 없는 단점이 있다.

이때, 여러 개의 조건식을 적을 수 있는 'if - else if'문을 사용하면 된다.

 

형식에 대해 알아보자

1
2
3
4
5
6
7
8
9
10
if (조건식1) {
    조건식1이 참일 때 수행될 문장들을 적는다.
else if (조건식2) {                        // 조건식 1이 거짓일 때 조건식 2의 else if 문으로!
    조건식2이 참일 때 수행될 문장들을 적는다.
else if (조건식3) {
    조건식3이 참일 때 수행될 문장들을 적는다.
else {                                    // 마지막엔 보통 else 블럭으로 끝나는데, 생략도 가능하다.
    어떠한 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
 
cs

 

이제 if - else if문을 이용하여 코드를 작성해보자.

Q. 점수를 입력하도록 하고, 점수가 속한 범위에 따라 학점을 출력하는 코드를 작성해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package test;
 
import java.util.Scanner;
 
public class MainClass {
    public static void main(String[] args) {
    
        Scanner sc = new Scanner(System.in);
        int score;
        System.out.print("score = ");
        score = sc.nextInt();
        
        if (score >= 90) {
            System.out.println("A 학점입니다.");
        } else if (score >= 80) {
            System.out.println("B 학점입니다.");
        } else if (score >= 70) {
            System.out.println("C 학점입니다.");
        } else {
            System.out.println("재시험입니다.");
        }
                
    }
}
 
 
cs

75점을 입력했을 때, 결과는 아래와 같다.

55점을 입력했을 때, 결과는

재시험 같은 거 볼 일 없게 열심히 하자....

 

Theme. Switch문

 

if문과 달리 switch문은 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하여 알아보기 쉽다.

즉, 처리할 경우의 수가 많은 경우 switch문의 장점이 부각될 수 있다.

 

switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동한다. 이동한 case문 아래에 있는 문장들을 수행하며, break문을 만나면 전체 switch문을 빠져나가게 된다.

 

이제 형식을 알아보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch( 조건식 ) {
        case 값1:        
            조건식의 결과가 값1과 같을 경우 수행될 문장들
            break;
        case 값2:        
            조건식의 결과가 값2과 같을 경우 수행될 문장들
            break;         // switch문을 벗어난다.
 
        //...
    
        default:        
            조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
 
}
 
cs

switch문의 제약조건

 1) switch문의 조건식 결과는 정수 또는 문자열이어야 한다.

 2) case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

 

switch문을 이용한 코드를 작성해보자.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
        int choice;
        
        choice = 2;
        
        switch ( choice ) {
            case 1:
                System.out.println("처리1 입니다.");
                break;
            case 2:
                System.out.println("처리2 입니다.");
                break;                                
            case 3:
                System.out.println("처리3 입니다.");
                break;
            case 4:
                System.out.println("처리4 입니다.");
                break;
                
            default:
                System.out.println("1 ~ 3이 아닙니다.");
        }
        
        // break;를 생략하게 되면, 어떻게 될까?
        
        /*
         switch ( choice ) {
            case 1:
                System.out.println("처리1 입니다.");
                break;
            case 2:
                System.out.println("처리2 입니다.");
                break;                                
            case 3:
                System.out.println("처리3 입니다.");
                break;
            
            default:
                System.out.println("1 ~ 3이 아닙니다.");
        }
         case 1, case 3의 break; 코드를 생략해도 결과는 올바르게 나온 것처럼 보인다. 하지만, 
         case 2의 break; 코드를 생략하게 되면, 일단 처리2 입니다는 실행이 되고, 
         그 다음부터 처리해야 하는 것들은 break을 발견할 때까지 처리가 되어 버린다.
         즉, console 결과가
         처리2 입니다.
         처리3 입니다.
         이렇게 나온다.
         당연히 break;을 case마다 써야 하고, 처리가 되는 case 부분에서의 break;을 안쓰게 되면
         그 다음 case들이 break;을 만날 때까지 다 처리가 되어 버린다.
cs

결과는 "처리2 입니다." 가 나온다.

 

 

끝.