본문 바로가기
Language/Java

공부내용 정리 Java :: 기초 III

by Cs.Woo 2021. 6. 14.

1. 조건문

 조건문은 주어진 조건에 따라서 구성하고자 하는 프로그램을 원하는 방향으로 동작할 수 있도록 제어할수 있는 기느잉 있는 문법이다.

 본 장에서는 자바의 조건문에 대한 학습내용을 정리하였다.

 

1-1) 조건문의 문법

i ) if

 조건문은 if로 시작한다. if의 조건절 안의 값이 참일 경우 중괄호( { } )로 감싼 if절의 코드블럭이 실행되게된다. 만일 if절의 조건문 부분이 참이 아니라면 중괄호로 되어있는 코드블럭 부분의 코드는 실행되지 않고 if문 다음의 코드가 실행이 디되는 구조로 이루어져 있다.

 

if ( Condition ) {

	code block
    
    }

 

if의 조건(Condition)이 있는 부분을 if절이라고 하고, 중괄호 안의 코드들을 then절 이라고 한다. if조건문은, 만일 if절의 조건이 참이면, then절을 실행하고 그렇지 않으면 if절을 생략하는 기능을 갖고 있다.

 

    public static void main(String[] args) {
        if(true){
            System.out.println("result : true");
        }
    }
    
    // 실행결과
    // result: true

if(false){
    System.out.println("result : true");
}

// 실행결과
// 없음

 


if(false){
    System.out.println(1);
    System.out.println(2);
    System.out.println(3);
    System.out.println(4);
}
System.out.println(5);

// 실행결과
// 5

 

 상기와 같이 if절이 true라면 if절을 실행하고 그 밑의 코드를 실행하는 반면 if절이 거짓이라면 if절의 모든 모드를 건너뛰고 if절의 끝(해당 if문 중괄호의 끝)의 다음 코드부터 실행이 되는 것이다.

 

ii ) else

 if 절만으로도 조건문을 구사하여 프로그램을 구성할 수 있지만, 그렇게 되면 불필요한 중복 혹은 많은 코드가 필요하게 되고, 또한 원래의 의도처럼 프로그램을 제어하기에 어려움이 있을 수 있다.

 따라서 참일 경우엔 if절을 수행하고, 그의 반대되는 경우에 수행해야할 과업이 존재할 때 사용할 수 있는 것이 바로 else문이다.

 만일 else가 필요없을 경우 (반대의 경우가 필요없을 경우)는 else는 생략이 가능하다.

 

if ( Condition ) {

	code block
    
    } else {
    
    code block
    
    }

 

 구조는 if 문에서 크게 달라지는 것은 없다. if문 끝에 else 를 쓰고 중괄호를 열어 then절(코드블럭)을 만들어서 if절의 반대되는 상황에 대하여 수행할 코드만 기입해주면 된다.

 else 절에서 조건을 표기해줄 필요가 없는이유 -조건을 쓸 수있는 부분이 없는 이유-는 if절이 거짓일 때 else문이 실행되기 때문에 if문이 참인 경우를 제외한 모든경우 else 문이 실행되도록 설계되어있기 때문이다.

 

iii ) else if

 if와 else조건문만 가지고 프로그램을 제어한다면 조건의 범위가 제한적이다. 따라서 여러가지의 조건을 두기 위하여 있는 구문이 else if구문이다. if와 else는 if문에서 딱 한번만 등장할 수 있지만 else if는 제한없이 몇번이고 중복하여 사용할 수 있다.

 또한 else if가 필요없을 경우 생략 가능하다.

 if가 false일 경우 else if이하의 then절을 실행하고 else if가 중첩되어 사용되었을 경우 첫번째 else if문의 조건이 거짓일 경우 두번째 else if 문 then절이 실행되는 구조로 이루어져 있다.

 

 public static void main(String[] args) {
        if (false) {
            System.out.println(1);
        } else if (true) {
            System.out.println(2);
        } else if (true) {
            System.out.println(3);
        } else {
            System.out.println(4);
        }
 
    }

 

 상기의 예제와 같이 작성하고 그렇게 이루어져 있는 것이 else if구문이다. 

 

1-2) 조건문의 중첩

 if문은 중첩으로 사용이 가능하다. 가령, 클라이언트로부터 여러가지의 인풋값을 받았을 때, 혹은 여러가지의 값에 대한 조건을 여러번 걸러주어야 할 때 같은 경우, 조건문을 중첩해서 사용할 수 있는 것이다.

 

 public static void main(String[] args) {
        String id = args[0];
        String password = args[1];
        if (id.equals("아이디")) {
            if (password.equals("비밀번호")) {
                System.out.println("일치합니다");
            } else {
                System.out.println("일치하지 않습니다");
            }
 
        } else {
            System.out.println("일치하지 않습니다");
        }
    }

 

 상기 예제와 같이 입력된 아이디와 비밀번호를 일치하는지 확인하는 조건이 겹친 중첩조건문을 만들 수 있다. 만일 아이디가 일치하지 않는다면 바로 else문으로 코드가 실행되어 일치하지 않는다고 출력하고, 아이디가 일치하였다면 비밀번호의 일치여부를 확인하여 출력하는 형태의 로직으로 구성되어있다.

 본 예제에서의 중점은 조건문을 중첩하여 사용할 수 있다는 것을 확인하는 것이다.

 

 

2. Switch 문

 조건문은 대개 if문을 사용한다. 하지만 Switch문을 사용할 수도 있다. Switch문을 사용한다면 보다 명료하게 조건에 대해서 표현할 수 있다. 동작방식과 원리는 if문과 상등하다.

 Switch문의 구조는 다음과 같다.

 

switch ( value ) {

	case value1 :
    	Command
        
    case value2 :
    	Command
        
    case value3 :
    	Command
        ...
        
    }

 

 스위치문은 스위치로 시작한다. 스위치의 괄호 안에 어떠한 값이 들어가고, 그 값과 스위치문 의 중괄호 안에 각 case의 값이 같을 때, 해당되는 case부터 순차적으로 실행되게 되어있다. 다음과 같다.

 

   public static void main(String[] args) {
         
        System.out.println("switch(1)");
        switch(1){
        case 1:
            System.out.println("one");
        case 2:
            System.out.println("two");
        case 3:
            System.out.println("three");
        }
    }

 

만일 위와 같다면, 실행결과는 case1부터 case3까지 순차적으로 실행된 one, two, three일 것이다. 그리고 만일,

 

System.out.println("switch(2)");
        switch(2){
        case 1:
            System.out.println("one");
        case 2:
            System.out.println("two");
        case 3:
            System.out.println("three");
        }

 상기와 같다면, case 2부터 3까지 순차적으로 실행된 two, three일 것이다. 즉 스위치문은, 스위치의 조건에 해당되는 case 부터 밑에있는 모든 case들을 순차적으로 실행하는 기능을 갖고있는 구문인 것이다.

 

 그렇다면 해당되는 case만 실행시키는 방법은 어떠한 것이 있을까 다음과 같다.

 

   public static void main(String[] args) {
         
        System.out.println("switch(1)");
        switch(1){
        case 1:
            System.out.println("one");
            break
        case 2:
            System.out.println("two");
            break
        case 3:
            System.out.println("three");
            break
        }
    }

 

 상기의 코드와 같이 case에 조건문을 중지시키는 break라는 키워드를 삽입하여 사용하면 해당되는 case가 실행하고, 명령이 중지되어 스위치문 밖으로 빠져나가게 되고, 그렇게 되면 해당되는 명령만 수행하고 나머지는 수행하지 않는 효과를 얻을 수 있는 것이다.

 

 즉 상기의 예제는 one만 나오고 나머지는 실행되지 않게 되는것이다. 스위치문은 이렇게 if문과 동일한 효과를 볼 수 있는데 상기의 코드를 if문으로 작성한다면 다음과 같다.

 

public static void main(String[] args) {
         
        int val = 1;
        if(val == 1){
            System.out.println("one");
        } else if(val == 2){
            System.out.println("two");
        } else if(val == 2){
            System.out.println("three");
        }
 
    }

 

이렇게 코드를 작성한다면 상기 스위치문에 break를 삽입한 것과 동일한 결과를 얻을 수 있게 된다. 그러나 스위치문의 조건에는 byte, short, char, int, enum, string 과 같이 제한된 데이터 타입만 사용할 수 있으므로 스위치와 if문을 상황에 알맞게 적절히 사용하면 된다.

 

1-1) default

  스위치문에는 default라는 것이 존재한다. if문의 else와 상등한데, switch 이하의 case에서 해당되는게 없다면 실행되는 기본값이라고 이해하면 된다. 하기와 같다.

 

System.out.println("switch(1)");
        switch(1){
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default:
            System.out.println("default");
            break;
        }
 // 결과값
 // one 
        
 System.out.println("switch(4)");
        switch(4){
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default:
            System.out.println("default");
            break;
        }
 // 결과값
 // default
 

 상기와 같이 스위치문 이하의 케이스에 해당되는 값이 있다면 그 값이 실행이 되고, 만일 해당되는 값이 없다면 default를 추가하여 default문에 해당되는 명령을 실행할 수 있도록 제어가 가능하다.