No. 01

 

 

조건문


조건문은 프로그래밍에 있어서 매우 중요하다. 조건문을 이용하여 조건의 참,거짓에 따라 서로 다른 작업을 수행할 수 있다.

조건문에 사용하는 조건식의 결과는 반드시 true 또는 false이어야 하며, 다음과 같은 종류가 있다.

if문, if-else문, if-else if문, switch




No. 02

 

 

단순 if문


if문

if(조건식) {

  ... 실행 문장...

}

  • 가장 기본적인 조건문이다.
  • '조건식'과 '괄호{}'로 이루어져 있다. 괄호를 '블럭(block)'이라고 한다.
  • 블럭 내의 문장이 하나뿐일 경우 괄호{}를 생략할 수 있다. (가독성을 위해 생략하지 않는 것을 추천)
  • 조건식이 참(true)이면  if 내부의 실행 문장이 실행되며, 거짓(false)이면 if문을 벗어난다.


예제1 (짝수, 홀수 판단)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("짝수 홀수를 판단할 숫자를 입력하세요.");        
        String input = scanner.nextLine();        
        int n = Integer.parseInt(input);        
        
        //짝수일 때만 실행
        if(n%2 ==0) {
            System.out.println(n+"은 짝수입니다.");
        }
        
        //홀수일 때만 실행
        if(n%2 != 0) System.out.println(n+"은 홀수입니다.");         
 
    }//main
    
}//class
                                                          Colored By Color Scripter

실행 결과

짝수 홀수를 판단할 숫자를 입력하세요.

23

23은 홀수입니다.


if문을 사용하여 짝수인지 홀수인지 구분하는 예제이다. 입력한 n을 나눈 나머지가 0이면 짝수이고 아니면 홀수이다.

if문의 조건식이 true 일 때만 if문 내부의 실행문장을 실행하고 false일 때는 건너띈다.

실행문장이 하나일 경우에만 괄호{}를 생략 가능하다.



◈ 예제2 (학점 판단)

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
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);        
        char grade = ' ';
        
        if(score >= 90) { grade = 'A'; }
        
        if(score >= 80 && score <=89) { grade = 'B'; }
        
        if(score >= 70 && score <=79) { grade = 'C'; }
        
        if(score >= 60 && score <=69) { grade = 'D'; }
        
        if(score <=59) { grade = 'F'; }
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                           Colored By Color Scripter


실행 결과

점수를 입력하세요.

84

당신의 학점은 : B


점수를 입력받아 학점을 판단하는 예제이다.




No. 03

 

 

if-else문


단순 if문은 if문의 조건식이 참일 경우에만 실행 문장이 실행되고, 조건식이 거짓인 경우에는 아무 일도 하지 않고 if문을 벗어난다.

if-else문은 조건식이 거짓인 경우에 else블럭의 문장을 수행한다. 조건 연산자와 같은 역할을 하지만 가독성에서 뛰어 나기 때문에 if-else문을 선호한다.


if-else문

if (조건식) {

 조건식이 참일 경우 ... 실행 문장...

}

else {

 조건식이 거짓일 경우 ... 실행 문장...

}

  • else문 역시 실행문장을 블럭{}으로 감싸주어야 한다.
  • 조건식이 참(true)일 경우는 if문 블럭안의 실행문장을 거짓(false)일 경우 else문 블럭안의 실행 문장을 수행한다.


◈ 예제 (짝수, 홀수 판단)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("짝수 홀수를 판단할 숫자를 입력하세요.");        
        String input = scanner.nextLine();        
        int n = Integer.parseInt(input);
        
        if(n%2 ==0) {
            System.out.println(n+"은 짝수 입니다.");
        }
        else {
            System.out.println(n+"은 홀수 입니다.");
        }    
 
    }//main
    
}//class
                                                        Colored By Color Scripter


실행 결과

짝수 홀수를 판단할 숫자를 입력하세요.

23

23은 홀수입니다.


단순 if문은 if문의 수에 따라 조건식도 적어야 하지만 둘 중 하나를 선택해야 할 경우 if-else문을 사용하면 더 효율적으로 프로그래밍 할 수 있다.

조건 연산자로도 같은 결과를 볼 수 있지만 가독성 면에서 if-else문이 더 좋다.



No. 04

 

 

if-else if문 (다중 if문)


if-else문의 두 가지 경우 중 하나가 실행되는 구조다. 처리해야 할 경우의 수가 셋 이상일 경우에는 여러 개의 조건식을 쓸 수 있는 'if- else if'문을 사용하면 된다. 다중 if문은 여러 가지 모양으로 구성할 수 있으나 전형적인 모양은 다음과 같다.


if-else if문

if (조건식1) {

   조건식1이 참일 경우 ... 실행 문장...

}

else if (조건식 2) {

   조건식2가 참일 경우 ... 실행 문장...

}

else if (조건식 3) {

   조건식3이 참일 경우 ... 실행 문장...

}

else if (조건식 n) {

   조건식n이 참일 경우 ... 실행 문장...

}

else{

   위의 조건식 모두를 만족하지 않을 경우 ... 실행 문장...   

}

  • 여러 개의 조건식중 참(true)인 조건식을 만나면 해당 블럭의 실행문장을 수행하고 if문 전체를 벗어난다.(하나만 실행하고 종료)
  • 첫 번째 조건식부터 순서대로 비교한다.
  • else 블럭은 생략가능하다.


◈ 예제 (학점 판단)
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
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);
        char grade = ' ';
        
        if (score >= 90) { grade = 'A'; }
        else if(score >= 80) { grade = 'B'; } // score >= 80 && score <= 89
        else if(score >=70) { grade = 'C'; }  // score >= 70 && score <= 79
        else if(score >= 60) { grade = 'D'; } // score >= 60 && score <= 69
        else { grade = 'F'; }  // score <= 59
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                                                        Colored By Color Scripter


실행 결과

점수를 입력하세요.

84

당신의 학점은 : B


첫 번째 조건식부터 차례대로 판단하기 때문에 90이상이 아니면 다음 if문을 검사하기 때문에 'score>=80 && score<=89'의 조건을 중복 해서 적지 않고 'score>=80'로 간단히 쓸 수 있다.

단순 if문으로 여러개 사용할 때보다 속도면에서도 효율적이다. 단순 if문은 조건식마다 모두 검사하는 반면 if-else if문은 차례로 조건식을 검사하면서 만족하는 조건식이 있으면 문장을 수행하고 다음 if문은 검사하지도 않고 종료하기 떄문이다.




No. 05

 

 

중첩 if문


if문 블럭 내에 또 다른 if문을 사용할 수 있다. 이것을 중첩 if문이라고 부르며, 횟수에느 제한이 없다.


◈ 예제1 (팔굽혀펴기 등급 판단)
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
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("당신의 나이를 입력하세요.");
        String input1 = scanner.nextLine();        
        int age = Integer.parseInt(input1);        
        
        System.out.println("팔굽혀펴기 횟수를 입력하세요.");        
        String input2 = scanner.nextLine();        
        int score = Integer.parseInt(input2);
        String grade = "";
        
        if(age <=25) { //나이가 25세 이하일 경우
            if(score >=72) {
                grade="특급";            
            }
            else if(score >= 64) {
                grade = "1급";
            }
            else if(score >= 56) {
                grade = "2급";
            }            
        }        
        else if(age <= 30) { // 26~30세 일 경우
            if(score >=70) {
                grade="특급";            
            }
            else if(score >= 62) {
                grade = "1급";
            }
            else if(score >= 54) {
                grade = "2급";
            }            
        }
        
        System.out.println("팔굽혀 펴기 등급  : "+grade);        
 
    }//main
    
}//class
                                                   Colored By Color Scripter


실행 결과

당신의 나이를 입력하세요.

23

팔굽혀 펴기 횟수를 입력하세요.

65

팔굽혀 펴기 등급  : 1급


팔굽혀펴기 등급을 판단하는 예제이다. 체력검정의 경우 나이에 따른 횟수에 등급이 판단되므로 위와 같이 중첩if문을 사용하여 프로그래밍 할 수 있다.

중첩 if문을 사용할 때 처럼 복잡해지는 경우 블럭{}으로 잘 구분해주어야 가독성에도 좋고 예상하지 못한 결과를 피할 수 있다.



No. 06

 

 

switch문


하나의 식의 값에 따라 여러 결과를 내고자 하는 경우 if문을 사용하게 되면 else-if를 계속 추가해야 하므로 조건식이 많아져서 복잡해지고 처리 시간도 많이 걸린다. 그래서 처리할 경우의 수가 많은 경우에는 if문보다 switch문으로 작성하는 것이 좋다. 다만, switch문은 제약조건이 있기 때문에 if문으로 처리 해야 하는 경우도 있다.


switch문

switch (조건식) {

case 값1 :

조건식이 값1일 경우 ... 실행 문장...

break;

case 값2 :

조건식이 값2일 경우 ... 실행 문장...

break;

case 값n :

    조건식이 값n일 경우 ... 실행 문장...

break;

default :

조건식의 결과에 맞는 값이 없는 경우 ... 실행 문장... 

}

  • 조건식을 계산하고 결과와 일치하는 case문으로 이동하여 문장을 실행한다.
  • switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
  • case문의 값은 중복되지 않아야 한다.
  • break문이나 switch문의 끝을 만나면 switch문을 빠져나간다.
  • break문을 적지 않으면 다음 case문이 조건식의 값이 아니더라도 실행하므로 적어주어야 한다. (고의적으로 생략하는 경우도 있다.)


◈ 예제1 (학점 판단)

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
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);
        char grade = ' ';
        
        switch(score/10) {
            case 10 :
                grade = 'A';
                break;
            case 9 :
                grade = 'A';
                break;
            case 8 :
                grade = 'B';
                break;
            case 7 :
                grade = 'C';
                break;
            case 6 :
                grade = 'D';
                break;
            default :
                grade = 'F';
                
        }//switch
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                      Colored By Color Scripter


실행 결과

점수를 입력하세요.

75

당신의 학점은 : C


점수를 입력받아 학점을 판단하는 예제이다. 조건식을 보면 score/10 인데 점수를 나누면 몫을 얻을 수 있고 몇점대인지 알 수 있다.

이때 몇점대인지의 결과만 가지고 case문으로 판단하여 학점을 판단할 수 있다.



◈ 예제2 (학점 판단)

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
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);
        char grade = ' ';
        
        switch(score/10) {
            case 10 :            
            case 9 :
                grade = 'A';
                break;
            case 8 :
                grade = 'B';
                break;
            case 7 :
                grade = 'C';
                break;
            case 6 :
                grade = 'D';
                break;
            default :
                grade = 'F';
                
        }//switch
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                     Colored By Color Scripter


실행 결과

점수를 입력하세요.

75

당신의 학점은 : C


위의 결과와 같은 결과를 얻을 수 있지만 한가지 다른 것이 있다. 예제1에서는 만점을 받았을 경우 10 일때와 9일때 둘다 grade변수에 일일이 학점을 입력해주었으나 위와 같이 break문을 생략하면 10점일때와 9점일때 모두 하나의 실행문장으로 처리될 수 있다.

올바른 방법으로 이용한다면 문제가 되지 않지만 실수로 break문을 생략했다면 원하지 않는 결과가 나올 수 있으니 주의하여 사용하자.


switch문 역시 if문처럼 중첩으로 사용할 수 있으며, if문과도 조합하여 사용할 수도 있다.




'JAVA' 카테고리의 다른 글

[Java 16] 증감 연산자, 조건 연산자  (0) 2017.11.26
[Java 15] 논리 연산자, 비트 연산자, 쉬프트 연산자  (0) 2017.11.25
[Java 14] 비교 연산자  (0) 2017.11.23
[Java 13] 산술 연산자  (0) 2017.11.22
[Java 12] 연산자란?  (0) 2017.11.21

+ Recent posts