Java의 조건 분기문

우리는 어떤 문제를 직면했을때 참 또는 거짓을 판별해야하는 경우가 있습니다.

프로그램에서 참/거짓을 판별하는 기능을 하는 조건문( 분기문 )을 학습합니다.

  • 조건문이란?
  • if 문
  • if 문의 확장( else, else if )
  • switch 문

조건문이란?

우리는 살아가면서 많은 선택을 합니다.

예를 들면, 좌회전을 할 것인가? 우회전을 할 것인가? 와 같은 선택 부터 누군가 악수를 청하면 악수에 응한다. 하지만 악수를 청하지 않으면 악수를 제안하지 않는다 같은 상황에 따라 다른 선택을 해야하는 경우가 있습니다.

선택을 하는 단계를 구체화하고 도식화 하면 아래와 같다.

조건문 도식화

문제가 생겼을 때, 어떤 조건에 의해 그 조건이 참이면 특정 행동을 만약 거짓이면 다른 특정 행동을 수행하여 문제를 해결한다.

여기서 상황에 따라 어떤 행동을 취할 것인지 판별하는 것을 조건문 이라고 한다.

if 문

if 문은 말 그래도 만약 어떤 일이 일어난다면~ 이라는 의미를 갖는 문법이다. Java를 제외한 거의 대부분의 언어들이 if 문을 사용하고 있고 사용법도 굉장히 흡사하다. 그리고 프로그램을 만드는데 제일 빈번하게 사용되는 문법이기도 하다.

if 문의 사용법

기능1

if( 조건식 ){
    기능2
}

기능3

if 문은 위와 같이 사용한다.

  1. 조건식은 boolean 자료형을 리턴하는 조건식 이 와야한다.
  2. 조건식이 참이라면, 기능1 -> 기능2 -> 기능3 순서대로 코드를 실행한다.
  3. 조건식이 거짓일 경우, 기능1 -> 기능3 순서대로 코드를 실행한다.

if 문의 사용

class ifClass{
    public static void main(String[] args){
      	int i = 20;

        System.out.println("기능1");
      	if( i == 20 ){
            System.out.println("기능2");
        }
      	System.out.println("기능3");
    }
}
기능1
기능2
기능3

int 형 변수 i 에 초기화된 값이 20이고, if 조건문에서 검사한 ( i == 20 ) 은 참이므로 코드 블럭 내에 System.out.println("기능2"); 이 실행 되었다.

class ifClass{
    public static void main(String[] args){
      	int i = 20;

        System.out.println("기능1");
      	if( i == 10 ){
            System.out.println("기능2");
        }
      	System.out.println("기능3");
    }
}
기능1
기능3

( i == 10 ) 의 조건문은 거짓이기 때문에, if 문 코드블럭 내부가 실행되지 않았다.

if문의 확장

지금까지 if 문을 사용하여 조건이 참일 경우에 대한 처리를 진행했다. 그렇다면 조건문에 만족을 하지 못할 경우엔 어떻게 해야할까? 이때 사용하는 것이 if~else 문법이다.

else 문

기능1

if( 조건식 ){
    기능2
}else{
  	기능3
}

기능4
  • 조건식을 만족할 때, 기능1 -> 기능2 -> 기능4 순서대로 실행된다.
  • 조건식을 만족하지 못할 때, else 의 코드블럭 내부가 실행되어 기능1 -> 기능3 -> 기능4 순서대로 실행된다.

else if(조건문)

else if 문법은 검사해야하는 조건식이 여러개 일때 사용한다.

기능1

if( 조건식1 ){
    기능2
}else if( 조건식2 ){
  	기능3
}else if( 조건식3 ){
  	기능3
}else{
  	기능5
}

기능4
  • 조건식 1이 만족되지 못하면 조건식2를, 조건식2를 만족하지 못한다면 조건식3을 순서대로 검사한다.
  • 특정 조건식을 만족하면 코드 블럭을 실행한다.
  • 하지만, 모두 만족하지 못하면 마지막 else 코드 블럭을 실행한다.
  • 예를 들어 조건식1과 조건식2를 만족하지 못하고 조건식3을 만족한다면 기능1 -> 기능3 -> 기능5 순으로 실행된다.

if문 예제 코드

class ifClass{
  public static void main(String[] args){
    int number =10;
	// if
    if(number > 20){
    	System.out.println("20보다 큽니다.");
    }
    if(number < 20){
    	System.out.println("20보다 작습니다.");
    }
    if(number <= 20){
    	System.out.println("20보다 작거나 같습니다.");
    }
    if(number >= 20){
    	System.out.println("20보다 크거나 같습니다.");
    }
    if(number == 20){
    	System.out.println("20입니다.");
    }

	// if ~ else
    if(number >= 15){
    	System.out.println("number 는 15보다 크거나 같습니다.");
    }else{
    	System.out.println("number 는 15보다 작습니다.");		//else 내부가 실행된다.
    }

    // if ~ else if ~ else
    // 성적 계산 프로그램
    int score = 85;

    if(score == 100){
    	System.out.println("100점 만점입니다.!");
    }else if( score >= 90 && score < 100){
    	System.out.println("A 입니다!");
    }else if( score > 80 && score < 90){		//조건을 만족하므로 해당 코드 내부가 실행된다.
    	System.out.println("B 입니다!");
    }else if( score > 70 && score < 80){
    	System.out.println("C 입니다!");
    }else{
    	System.out.println("F 낙제! 입니다!");
    }
  }
}

20보다 작습니다.
20보다 작거나 같습니다.
number는 15보다 작습니다.
B 입니다!

switch 문

switch문도 조건에 따라 다른 행동( 처리 )을 할 수 있도록 해주는 분기문이다.

switch문은 변수의 값과 일치하는 행동을 실행하도록 분기한다.

class switchClass
{
  public static void main(String[] args)
  {
    String score;
    int num = 90;		//비교에 사용할 변수

    switch (num)
    {
      case 100:			// num이 100이면 실행
        score = "A+";
        break;
      case 90:			// num이 90이면 실행
        score = "A";
        break;
      case 80:			// num이 80이면 실행
        score = "B";
        break;
      case 70:			// num이 70이면 실행
        score = "C";
        break;
      default :			// num이 아무곳에도 해당하지 않으면 실행
      	score = "F";
    }
    System.out.println("Score: "+score);
  }
}
Score: A

num 변수와 일치하는 case 를 실행한다. if 문 보다는 실행해야할 코드 블록이 직관적으로 표현된다.

하지만 num 변수에 94를 넣고 실행하면 원하는 실행결과를 얻을 수 없고 Score: F가 출력될 것이다.

그 이유는 if 문과의 차이점에서 찾아볼수 있다.

if 문 vs switch문의 차이점

if문 switch문
변수 값의 범위를 비교할 수 있다. 변수와 정확히 일치하는 케이스만 실행이 된다.
<, >, <=, >= 등 비교연산을 사용할 수 있다. 범위에 대한 비교 연산을 사용할 수 없다.

Comments